# Node actions
Source: https://docs.flowx.ai/5.1/docs/building-blocks/actions/actions
The activity that a node has to handle is defined using an action. These can have various types, they can be used to specify the communication details for plugins or integrations.
Node actions allow you to incorporate **business rules** into a **process**, and send various data to be displayed in front-end applications.
The FlowX.AI platform supports the following **types of node actions**:
You can only define and add actions on the following types of **nodes**: [**send message task**](../node/message-send-received-task-node#message-send-task), [**task**](../node/task-node) and [**user task**](../node/user-task-node).
Actions fall into two categories:
* Business rules
* User interactions
### Business rules
Actions can use action rules such as DMN rules, MVEL expressions, or scripts in JavaScript, Python, or Groovy to attach business rules to a node.
For more information about supported scripting languages, click on this card.
Each button on the user interface corresponds to a manual user action.
### Action edit
Actions can be:
* Manual or automatic
* Optional or mandatory
If all the mandatory actions are not executed on a node, the flow (token) will not advance.
* Actions can also be marked as one-time or repeatable

### Action parameters
Action params store extra values as key/value pairs, like topics for outgoing messages or message formats for the front-end.
A decision on an **exclusive gateway** is defined using a **node rule**. Similar to action rules, these can be set using [DMN](../../platform-overview/frameworks-and-standards/business-process-industry-standards/intro-to-dmn) or [MVEL](../../platform-overview/frameworks-and-standards/business-process-industry-standards/intro-to-mvel).
## Configuring actions
Actions have a few characteristics that need to be set:
* an **action** can be set as **manual** or **automatic**. Manual actions can be executed only through the REST API, this usually means they are triggered by the application user from the interface. Automatic actions are executed without any need for external triggers.
* manual actions can be either mandatory or optional. Automatic actions are all considered mandatory.
* all actions have an **order.** When there are more actions on a single node, the order needs to be set.
* **repeatable** - the actions that could be triggered more than once are marked accordingly
* the actions can have a parent/child hierarchy
* **allow back to this action** - the user can navigate back to this action from a subsequent node
For more information, check the following section:
## Linking actions together
There are two ways actions could be linked together, so certain actions can be set to run immediately after others.
Certain actions can run immediately after another action by setting the `parentName` field on the action for callbacks. Callback actions are performed when a specific message is received by the Engine, indicated by the `callbacksForAction` header in the message. To run actions immediately after the parent action, set the `autoRunChildren` flag to true for the parent action.
### Child actions
A parent action has a flag `autoRunChildren`, set to `false` by default. When this flag is set to `true`, the child actions (the ones defined as mandatory and automatic) will be run immediately after the execution of the parent action is finalized.

### Callback actions
Child actions can be marked as callbacks to be run after a reply from an external system is received. They will need to be set when defining the interaction with the external system (the [Kafka send action](../node/message-send-received-task-node#configuring-a-message-send-task-node)).
For example, a callback function might be used to handle a user's interaction with a web page, such as upload a file. When the user performs the action, the callback function is executed, allowing the web application to respond appropriately.

Child actions can be marked as callbacks to be run after a reply from an external system is received. They will need to be set when defining the interaction with the external system (the Kafka send action).

#### Example
Callback actions are added in the **Advanced configuration** tab, in the **header** param - `callbacksForAction`.
```js theme={"system"}
{"processInstanceId": ${processInstanceId}, "destinationId": "upload_file", "callbacksForAction": "upload_file"}
```
* `callbacksForAction` - the value of this key is a string that specifies a callback action associated with the "upload\_file" destination ID. This is part of an event-driven system (Kafka send action) where this callback will be called once the "upload\_file" action is completed.
## Scheduling actions
A useful feature for actions is having the ability to set them to run at a future time. Actions can be configured to be run after a period of time, starting from the moment the token triggered them to be executed.

# Append params to parent process
Source: https://docs.flowx.ai/5.1/docs/building-blocks/actions/append-params-to-parent-process
It is a type of action that allows you to send data from a subprocess to a parent process.
**Why is it important?** If you are using subprocesses that produce data that needs to be sent back to the main **process**, you can do that by using an **Append Params to Parent Process** action.
## Configuring an Append params to parent process
After you create a process designed to be used as a [subprocess](../process/subprocess), you can configure the action. To do this, you need to add an **Append Params to Parent Process** on a [**Task node**](../node/task-node) in the subprocess.
The following properties must be configured:
* [Action Edit](#action-edit)
* [Back in steps (for Manual actions)](#back-in-steps)
* [Parameters](#parameters)
* [Data to send (for Manual actions)](#data-to-send)
### Action edit
* **Name** - used internally to make a distinction between different actions on nodes in the process. We recommend defining an action naming standard to be able to quickly find the process actions
* **Order** - if multiple actions are defined on the same node, the running order should be set using this option
* **Timer expression** - it can be used if a delay is required on that action. The format used for this is [ISO 8601 duration format ](https://www.w3.org/TR/NOTE-datetime)(for example, a delay of 30 seconds will be set up as `PT30S`)
* **Action type** - should be set to **Append Params to Parent Process**
* **Trigger type** (options are Automatic/Manual) - choose if this action should be triggered automatically (when the process flow reaches this step) or manually (triggered by the user); in most use cases, this will be set to automatic
* **Required type** (options are Mandatory/Optional) - automatic actions can only be defined as mandatory. Manual actions can be defined as mandatory or optional.
* **Repeatable** - should be checked if the action can be triggered multiple times;
* **Autorun Children** - when this is switched on, the child actions (the ones defined as mandatory and automatic) will run immediately after the execution of the parent action is finalized
### Back in steps
* **Allow BACK on this action** - back in process is a functionality that allows you to go back in a business process and redo a series of previous actions in the process. For more details, check [**Moving a token backwards in a process**](../../flowx-designer/managing-a-project-flow/moving-a-token-backwards-in-a-process) section
### Parameters
* **Copy from current state** - data that you want to be copied back to the parent process
* **Destination in the parent state** - on what key to copy the param values
To recap: if you have a **Copy from current state** with a simple **JSON** -`{"age": 17}`, that needs to be available in the parent process, on the `application.client.age` key, you will need to set this field (**Destination in the parent state**) with `application.client`, which will be the key to append to in the parent process.
**Advanced configuration**
* **Show Target Process** - ID of the parent process where you need to copy the params, this was made available on to the `${parentProcessInstanceId}` variable, if you defined it when you [started the subprocess](./start-subprocess-action)
### Data to send
* **Keys** - are used when data is sent from the frontend via an action to validate the data (you can find more information in the [User Task configuration](../node/user-task-node) section)
**Data to send** option is configurable only when the action **trigger type** is **Manual.**
## Example
We have a subprocess that allows us to enter the age of the client on the **data.client.age** key, and we want to copy the value back to the parent process. The key to which we want to receive this value in the parent process is **application.client.age**.
This is the configuration to apply the above scenario:
**Parameters**
* **Copy from current state** - `{"client": ${data.client.age}}` to copy the age of the client (the param value we want to copy)
* **Destination in the parent state** - `application` to append the data o to the **application** key on the parent process
**Advanced configuration**
* **Show Target Process** - `${parentProcessInstanceId}`to copy the data on the parent of this subprocess

# Business rules types
Source: https://docs.flowx.ai/5.1/docs/building-blocks/actions/business-rule-action/business-rule-action
A business rule is an action type in FlowX.AI that allows you to configure a script on a BPMN node. It's a way to specify business logic or decision-making processes in a business process.
The script can read and write the data available on the process at the moment the script is executed. For this reason, it is very important to understand what data is available on the process when the script is executed.
Business rules can be attached to a node by using actions with [**action rules**](../actions#action-rules) on them. These can be specified using [DMN rules](./dmn-business-rule-action), [MVEL](../../../platform-overview/frameworks-and-standards/business-process-industry-standards/intro-to-mvel) expressions, or scripts written in JavaScript, Python, or Groovy.

For more information about supported scripting languages, see the next section:
You can also test your rules by using the **Test Rule** function.

## Configuration
To use a Business Rules Action, follow these steps:
1. **Select a BPMN Task Node**: Choose the BPMN task node to which you want to attach the Business Rules Action. This could be a Service Task, User Task, or another task type that supports actions.
2. **Define the Action**: In the task node properties, configure the "Business Rules Action" field and select the desired language (MVEL, Java, JavaScript or Python).
3. **Write the Business Rule**: In the selected language, write the business rule or decision logic. This rule should take input data, process it, and possibly generate an output or result.
4. **Input and Output Variables**: Ensure that the task node can access the necessary input variables from the BPMN process context and store any output or result variables as needed.
5. **Execution**: When the BPMN process reaches the task node, the attached Business Rules Action is executed, and the defined business rule is evaluated.
6. **Result**: The result of the business rule execution may affect the flow of the BPMN process, update process variables, or trigger other actions based on the logic defined in the rule.
Let's take look at the following example. We have some data about the gender of a user and we need to create a business rule that computes the formal title based on the gender:
1. This is how the process instance data looks like before it reaches the business rule:
```json theme={"system"}
{
"application" : {
"client" :
{
"firstName" : "David",
"surName" : "James",
"gender" : "M",
}
}
}
```
2. When the token reaches this node the following script (defined for the business rule) is executed. The language used here for scripting is MVEL.
```java theme={"system"}
if (input.application.client.gender == 'F') {
output.put("application", {
"client": {
"salutation": "Ms"
}
});
} else if (input.application.client.gender == 'M') {
output.put("application", {
"client": {
"salutation": "Mr"
}
});
} else {
output.put("application", {
"client": {
"salutation": "Mx"
}
});
}
```
3. After the script is executed, the process instance data will look like this:
```json theme={"system"}
{
"application": {
"client": {
"firstName": "David",
"surName": "James",
"gender": "M",
"salutation": "Mr"
}
}
}
```

## Flattened vs unflattened keys
With version [**2.5.0**](https://old-docs.flowx.ai/release-notes/v2.5.0-april-2022/) we introduced unflattened keys inside business rules. Flattened keys are now obsolete. You are notified when you need to delete and recreate a business rule so it contains an unflattened key.

## Business rules examples
Examples available for [**v2.5.0**](https://old-docs.flowx.ai/release-notes/v2.5.0-april-2022/) version and higher
We will use the MVEL example used above to rewrite it in other scripting languages formats:
```Java theme={"system"}
if (input.application.client.gender == 'F') {
output.put("application", {
"client": {
"salutation": "Ms"
}
});
} else if (input.application.client.gender == 'M') {
output.put("application", {
"client": {
"salutation": "Mr"
}
});
} else {
output.put("application", {
"client": {
"salutation": "Mx"
}
});
}
```
```python theme={"system"}
if input.get("application").get("client").get("gender") == "F":
output.put("application", {
"client" : {
"salutation" : "Ms"
}
})
elif input.get("application").get("client").get("gender") == "M":
output.put("application", {
"client" : {
"salutation" : "Mr"
}
})
else:
output.put("application", {
"client" : {
"salutation" : "Mx"
}
})
```
```js theme={"system"}
if (input.application.client.gender === 'F') {
output.application = {
client: {
salutation: 'Ms'
}
};
} else if (input.application.client.gender === 'M') {
output.application = {
client: {
salutation: 'Mr'
}
};
} else {
output.application = {
client: {
salutation: 'Mx'
}
};
}
```
```groovy theme={"system"}
if (input.application.client.gender === 'F') {
def gender = input.application.client.gender
switch (gender) {
case 'F':
output.application = [client: [salutation: 'Ms']]
break
case 'M':
output.application = [client: [salutation: 'Mr']]
break
default:
output.application = [client: [salutation: 'Mx']]
}
```
For more detailed information on each type of Business Rule Action, refer to the following sections:
[DMN Business Rule Action](./dmn-business-rule-action)
# Configuring a DMN business rule action
Source: https://docs.flowx.ai/5.1/docs/building-blocks/actions/business-rule-action/dmn-business-rule-action
Decision Model and Notation is a graphical language used to specify business decisions. DMN helps convert complex decision-making code into easily readable diagrams.
## Creating a DMN Business Rule action
To create and link a DMN **business rule** action to a task **node** in FlowX.AI, follow these steps:
1. Launch **FlowX.AI Designer** and navigate to **Process Definitions** .
2. Locate and select your specific process from the list, then click on **Edit Process**.
3. Choose a **task node**, and click the **Edit** button (represented by a key icon). This action will open the node configuration menu.
4. Inside the node configuration menu, head to the **Actions** tab and click the "**+**" button to add a new action.
5. From the dropdown menu, select the action type as **Business Rule**.
6. In the **Language** dropdown menu, pick **DMN**.
For a visual guide, refer to the following recording:

## Using a DMN Business Rule Action
Consider a scenario where a bank needs to perform client information tasks/actions to send salutations, similar to what was previously created using MVEL [here](./business-rule-action#business-rules-examples).
A business person or specialist can use DMN to design this business rule, without having to delve into technical definitions.
Here is an example of an **MVEL** script defined as a business rule action inside a **Service Task** node:
```java theme={"system"}
if (input.application.client.gender == 'F') {
output.put("application", {
"client": {
"salutation": "Ms"
}
});
} else if (input.application.client.gender == 'M') {
output.put("application", {
"client": {
"salutation": "Mr"
}
});
} else {
output.put("application", {
"client": {
"salutation": "Mx"
}
});
}
```
The previous example can be easily transformed into a DMN Business Rule action represented by the decision table:

In the example above, we used FEEL expression language to write the rules that should be met for the output to occur. FEEL defines a syntax for expressing conditions that input data should be evaluated against.
**Input** - In the example above, we used the user-selected gender from the first screen as input, bound to the `application.client.gender` key.

**Output** - In the example above, we used the salutation (bound to `application.client.salutation`) computed based on the user's gender selection.

DMN also defines an XML schema that allows DMN models to be used across multiple DMN authoring platforms. The following output is the XML source of the decision table example from the previous section:
```xml theme={"system"}
application.client.gender"M""Mr""F""Ms""O""Mx"
```
# Extracting additional data in business rules
Source: https://docs.flowx.ai/5.1/docs/building-blocks/actions/business-rule-action/extracting-additional-data
Business rules in FlowX.AI allow you to extract and use key values dynamically. This is essential for handling user security details, configuration parameters, and business logic calculations.
This guide is covering the following:
✅ Retrieving security details dynamically\
✅ Extracting specific user attributes\
✅ Fetching configuration parameters
## Extracting security details
Security details (`securityDetails`) store user-related data, including **email, username, roles, and permissions**. These values are stored in `additionalData.securityDetails` and can be accessed dynamically within a process.
### Retrieve security details
Use the following business rule to fetch and store security details:
```JavaScript theme={"system"}
// Retrieve security details from additionalData
securityDetails = additionalData.get("securityDetails");
// Store the extracted security details
output.put("securityDetails", securityDetails);
```


Example output:
```json theme={"system"}
{
"securityDetails": {
"Default": {
"owner": {
"username": "user@email.com",
"identifier": "f08b1452-7c4c-415c-ad6d-8bb2d2d14600",
"details": {
"firstName": "John",
"lastName": "Snow",
"email": "user@email.com",
"jwt": "your_jwt",
"roles": [],
"groups": [
"/Users/Flowx_demo",
"/superAdmin"
],
"attributes": {}
}
}
}
}
}
```
### Extract specific owner details
To retrieve specific attributes, such as email, username, first name, and last name, use one of the following scripts (JS or Python):
```javascript theme={"system"}
// Retrieve security details
securityDetails = additionalData.get("securityDetails");
// Extract owner details from the Default swimlane
email = securityDetails.Default.owner.details.email;
username = securityDetails.Default.owner.username;
firstName = securityDetails.Default.owner.details.firstName;
lastName = securityDetails.Default.owner.details.lastName;
// Store extracted details in the output
output.put("email", email);
output.put("username", username);
output.put("firstName", firstName);
output.put("lastName", lastName);
```
```python theme={"system"}
# Retrieve security details
security_details = additionalData.get("securityDetails")
# Extract owner details from the Default swimlane
email = security_details["Default"]["owner"]["details"]["email"]
username = security_details["Default"]["owner"]["username"]
first_name = security_details["Default"]["owner"]["details"]["firstName"]
last_name = security_details["Default"]["owner"]["details"]["lastName"]
# Store extracted details in the output
output["email"] = email
output["username"] = username
output["firstName"] = first_name
output["lastName"] = last_name
```
Extracted values:
* **Owner Email** (`securityDetails.Default.owner.details.email`)
* **Username** (`securityDetails.Default.owner.username`)
* **First Name** (`securityDetails.Default.owner.details.firstName`)
* **Last Name** (`securityDetails.Default.owner.details.lastName`)

### Dynamic extraction by swimlane
If your application uses multiple swimlanes, retrieve the owner details dynamically:
```JavaScript theme={"system"}
// Get security details
securityDetails = additionalData.get("securityDetails");
// Extract owner details based on the swimlane
ownerDetails = securityDetails.Default.owner.details;
Default is the swimlane name in this example. Replace it with your swimlane name.
// Store extracted values in the process instance
output.put("email", ownerDetails.email);
output.put("username", securityDetails.Default.owner.username);
output.put("firstName", ownerDetails.firstName);
output.put("lastName", ownerDetails.lastName);
```
Example output:
```json theme={"system"}
{
"email": "user@email.com",
"username": "user@email.com",
"firstName": "John",
"lastName": "Snow"
}
```
***
## Extracting values from configuration parameters
To make business rules flexible, store configuration values in project configuration parameters instead of hardcoding them.

### Retrieve configuration parameters
Use a business rule to fetch and store configuration parameter values dynamically:
```JavaScript theme={"system"}
// Retrieve a configuration parameter (e.g., commission percentage)
commissionPercentage = additionalData.applicationConfiguration.get("commissionPercentage");
// Store the retrieved value in output in the process instance
output.put("commissionPercentage", commissionPercentage);
```
### Example use case: commission calculation
This example shows how to calculate a commission value dynamically using a configuration parameter.

#### Configuration parameters
| **Parameter Name** | **Description** | **Example Value** |
| ---------------------- | ----------------------------------------------- | ----------------- |
| `commissionPercentage` | The percentage used to calculate the commission | `0.05` (5%) |
Configuration parameters can be modified in:
➡ FlowX.AI Designer → Your Project → Configuration Parameters
#### Process flow
In a User task we have an input UI element where the user provides an amount (`userInputAmount`).

In the next node, a Service Task fetches the `commissionPercentage` from the configuration parameters.

Business rule used:
```JavaScript theme={"system"}
// Retrieve user input
amount = input.get("userInputAmount");
// Retrieve a value from configuration
commissionPercentage = additionalData.applicationConfiguration.get("commissionPercentage");
// Apply the configuration value
commissionValue = amount * commissionPercentage;
// Store the calculated result in the process instance
output.put("commissionValue", commissionValue);
```
Formula used to calculate the commission:
$$
\text{commissionValue} = \text{userInputAmount} \times \text{commissionPercentage}
$$
The computed `commissionValue` is stored for further processing.
Final result:

Why Use Configuration Parameters?
✅ Keep business rules flexible by avoiding hardcoded values.\
✅ Adapt calculations dynamically based on environment settings.\
✅ Simplify updates by modifying values in the project configuration rather than editing business rules.
# Kafka send action
Source: https://docs.flowx.ai/5.1/docs/building-blocks/actions/kafka-send-action
The FlowX.AI Designer offers various options to configure the Kafka Send Action through the Actions tab at the node level.
* [Action Edit](#action-edit)
* [Parameters](#parameters)

### Action Edit
* **Name** - Used internally to distinguish between different [actions](../actions/actions) within the process. Establish a clear naming convention for easy identification.
* **Order** - Sets the running order for multiple actions on the same node.
* **Timer Expression** - Enables a delay, using [ISO 8601 duration format](../node/timer-events/timer-expressions#iso-8601) (e.g., `PT30S` for a 30-second delay).
* **Action Type** - Designate as **Kafka Send Action** for sending messages to external systems.
* **Trigger Type** - Always set to Automatic.
The Kafka Send Action type is always **Automatic**. Typically, Kafka Send Actions automatically trigger when the process reaches this step.
* **Required Type** (Mandatory/Optional) - **Automatic** actions are typically set as **mandatory**. Manual actions can be either mandatory or optional.
* **Repeatable** - Allows triggering the action multiple times if required.
* **Autorun Children** - When activated, child actions (mandatory and automatic) execute immediately after the parent action concludes.
### Parameters
You can add parameters via the **Custom** option or import predefined parameters from an integration.
For detailed information on **Integrations management**, refer to [**this link**](../../platform-deep-dive/core-extensions/integration-management/).
* **Topics** - Specifies the Kafka topics listened to by the external system for requests.
* **Message** - Contains the message payload to be dispatched.
* **Advanced Configuration (Headers)** - Represents a JSON value sent within the Kafka message headers.

## Dynamic Kafka topics
You can use dynamic topic names for Kafka Send and Kafka Receive actions in FlowX.AI processes by leveraging Configuration Parameters. This enables flexibility when working with Kafka topics across different environments or use cases.
Steps to Create Dynamic Kafka Topics:
Navigate to **Projects → Your Project → Configuration Parameters** in FlowX.AI Designer.
Add or update configuration keys for Kafka topics.
Example:
* Key: `kafka_send_2`
* Value: `ai.flowx.plugin.document.trigger`
* Key: `kafka_receive`
* Value: `ai.flowx.engine.receive.plugin.document`

This allows referencing these parameters dynamically in your Kafka actions.
Open the process where you want to configure the Kafka Send Action.
Go to Node Config > Actions.
Select Kafka Send Action as the action type.
Under Parameters, locate the Topics field.
Use a dynamic reference to concatenate a parameter with another value:
`${kafka_send_2}.${topic2}`
Here:
* `${kafka_send_2}` dynamically pulls the value from Configuration Parameters.
* `${topic2}` can be another dynamic input set within the process.
Define the JSON structure for the message payload.

Ensure that all required fields align with the expected schema of the consuming system.
Start the process and check whether messages are correctly sent to the Kafka topic.
If needed, modify the configuration parameters to change the topic dynamically.
## Kafka send action scenarios
The Kafka Send action serves as a versatile tool that facilitates seamless communication across various systems and plugins, enabling efficient data transfer, robust document management, notifications, and process initiation.
This action finds application in numerous scenarios while configuring processes:
* **Communicating with External Services**
* **Interacting with Connectors** - For example, integrating a connector in the FlowX.AI Designer [here](../../platform-deep-dive/integrations/building-a-connector#integrating-a-connector-in-flowxai-designer).
* **Engaging with Plugins:**
* **Document Plugin:**
* Generating, uploading, converting, and splitting documents - Explore examples [here](../../platform-deep-dive/plugins/custom-plugins/documents-plugin/documents-plugin-overview).
* Updating/deleting documents - Find an example [here](../../platform-deep-dive/plugins/custom-plugins/documents-plugin/deleting-a-file)
* Optical Character Recognition (OCR) integration - View an example [here](../../platform-deep-dive/plugins/custom-plugins/ocr-plugin#scenario-for-flowxai-generated-documents).
* **Notification Plugin:**
* Sending notifications - Example available [here](../../platform-deep-dive/plugins/custom-plugins/notifications-plugin/sending-a-notification) and emails with attachments [here](../../platform-deep-dive/plugins/custom-plugins/notifications-plugin/sending-an-email-with-attachments).
* One-Time Password (OTP) validation - Refer to this [example](../../platform-deep-dive/plugins/custom-plugins/notifications-plugin/sending-a-notification).
* Forwarding notifications to external systems - Explore this [example](../../platform-deep-dive/plugins/custom-plugins/notifications-plugin/forwarding-notifications-to-an-external-system).
* **OCR Plugin**
* **Customer Management Plugin**
* **Task Management Plugin:**
* Bulk operations update - Find an example [here](../../platform-deep-dive/core-extensions/task-management/task-management-overview#bulk-updates).
* **Requesting Process Data for Forwarding or Processing** - For example, Data Search [here](../../platform-deep-dive/core-extensions/search-data-service).
* **Initiating Processes** - Starting a process via Kafka. Find examples [here](../../flowx-designer/managing-a-project-flow/starting-a-process).
The Kafka Send action stands as a versatile facilitator, enabling smooth operations in communication, document management, notifications, and process initiation across diverse systems and plugins.
# Send data to user interface
Source: https://docs.flowx.ai/5.1/docs/building-blocks/actions/send-data-to-user-interface
Send data to user interface action is based on Server-Sent Events (SSE), a web technology that enables servers to push real-time updates or events to clients over a single, long-lived HTTP connection. It provides a unidirectional communication channel from the server to the client, allowing the server to send updates to the client without the need for the client to continuously make requests.
**Why is it useful?** It provides real-time updates and communication between the **process** and the frontend application.
## Configuring a Send data to user interface action
Multiple options are available for this type of action and can be configured via the **FlowX.AI Designer**. To configure a Send data to user interface, use the **Actions** tab at the [task node level](../../flowx-designer/managing-a-project-flow/adding-a-new-node), which has the following configuration options:
* [Action Edit](#action-edit)
* [Back in steps (for Manual actions)](#back-in-steps)
* [Parameters](#parameters)
* [Data to send (for Manual actions)](#data-to-send)
### Action Edit
* **Name** - used internally to make a distinction between different actions on nodes in the process. We recommend defining an action naming standard to be able to quickly find the process actions
* **Order** - if multiple actions are defined on the same node, the running order should be set using this option
* **Timer expression** - it can be used if a delay is required on that action. The format used for this is [**ISO 8601 duration format**](https://www.w3.org/TR/NOTE-datetime) (for example, a delay of 30 seconds will be set up as `PT30S`)
* **Action type** - should be set to Send data to user interface
* **Trigger type** (options are Automatic/Manual) - choose if this action should be triggered automatically (when the process flow reaches this step) or manually (triggered by the user); in most use cases, this will be set to automatic
* **Required type** (options are Mandatory/Optional) - automatic actions can only be defined as mandatory. Manual actions can be defined as mandatory or optional.
* **Repeatable** - should be checked if the action can be triggered multiple times
* **Autorun Children** - when this is switched on, the child actions (the ones defined as mandatory and automatic) will run immediately after the execution of the parent action is finalized
### Back in steps
* **Allow BACK on this action** - back in process is a functionality that allows you to go back in a business process and redo a series of previous actions in the process. For more details, check [Moving a token backwards in a process](../../flowx-designer/managing-a-project-flow/moving-a-token-backwards-in-a-process) section.

### Parameters
The following fields are required for a minimum configuration of this type of action:
* **Message Type** - if you only want to send data, you can set this to **Default** (it defaults to the **data** message type)
If you need to start a new process using a **Send data to user interface**, you can do that by setting the **Message Type** to **Action** and you will need to define a **Message** with the following format:
```json theme={"system"}
{
"processName": "demoProcess",
"type": "START_PROCESS_INHERIT",
"clientDataKeys":["webAppKeys"],
"params": {
"startCondition": "${startCondition}",
"paramsToCopy": []
}
}
```
* `paramsToCopy` - choose which of the keys from the parent process parameters to be copied to the subprocess
* `withoutParams` - choose which of the keys from the parent process parameters are to be ignored when copying parameter values from the parent process to the subprocess
* **Message** - here you define the data to be sent as a JSON object, you can use constant values and values from the process instance data.
* **Target Process** - is used to specify to what running process instance should this message be sent - **Active process** or **Parent process**
If you are defining this action on a [**Call activity node**](../node/call-subprocess-tasks/call-activity-node), you can send the message to the parent process using **Target Process: Parent process**.
### Data to send
* **Keys** - are used when data is sent from the frontend via an action to validate the data (you can find more information in the [User task configuration](../node/user-task-node) section)
**Data to send** option is configurable only when the action **trigger type** is **Manual**.

### Send update data example
To send the latest value from the [process instance](../../projects/runtime/active-process/process-instance) data found at `application.client.firstName` key, to the frontend app, you can do the following:
1. Add a **Send data to user interface**.
2. Set the **Message Type** to **Default** (this is default value for `data`).
3. Add a **Message** with the data you want to send:
* `{ "name": "${application.client.firstName}" }`
4. Choose the **Target Process**.

# Start integration workflow action
Source: https://docs.flowx.ai/5.1/docs/building-blocks/actions/start-integration-workflow
The Start Integration Workflow action initiates a configured workflow to enable data processing, transformation, or other tasks across connected systems.
The Start integration workflow action allows for data transfer by sending configured inputs to initiate workflows and receiving outputs at the designated result key once the workflow completes. Here’s an overview of its key functionalities:
### Triggering
When a Start integration workflow action is triggered:
* The input data mapped in Input is sent as start variables to the workflow.
* The workflow runs with these inputs.
* Workflow output data is captured on the the specified result key upon completion.
### Integratiom mapping
The Select Workflows dropdown displays:
* All workflows within the current application version.
* Any workflows referenced in the application (e.g., via the Library).
### Workflow output
To receive output data from a workflow:
* Add a Receive Message Task node to the BPMN process.
* This node ensures that output data is properly captured and processed based on the designated workflow configuration.
# Start new project instance
Source: https://docs.flowx.ai/5.1/docs/building-blocks/actions/start-new-project-instance
The Start New Project Instance action allows users to initiate a completely new process (referred to as a "main process") from within an ongoing process. This functionality is designed to support scenarios where isolated use cases are managed across different applications or environments.

### Key considerations
* The "Start New Project Instance" action **cannot be configured as a subaction**. It must always be a standalone action.
* This action is exclusively triggered **manually**; automated execution is not supported.
You can launch a new project instance, which will always use the active version of the target application's build at the time of execution.
***
## Common use cases
This action is particularly useful when multiple use cases are managed separately and require isolation between applications. For example:
1. **Customer Profile Management:**
* Onboarding a power of attorney.
* Submitting a mortgage request.
* Enrolling in a credit card program.
Each of these processes may be managed by different teams and applications, emphasizing the need for separation and flexibility.
2. **Cross-Application Workflow Initiation:**
A process in one application might require triggering a process in another application with specific parameters. For instance:
* Initiating an "Onboarding" process (version 2) for a customer directly from the main application.
## Configuring the action
The **Start New Project Instance** action is configured via the **FlowX.AI Designer**. To set it up, navigate to the **Actions** tab at the [task node level](../../flowx-designer/managing-a-project-flow/adding-a-new-node).
### Configuration options
#### Action settings
* **Name:** Used internally to distinguish actions on nodes. It’s recommended to define a naming standard for easier identification.
* **Order:** If multiple actions exist on the same node, specify the order in which they run.
* **Timer Expression:** Adds a delay to the action if needed. Use the [**ISO 8601 duration format**](https://www.w3.org/TR/NOTE-datetime) (e.g., `PT30S` for a 30-second delay).
* **Action Type:** Must be set to **Start New Project Instance**.
* **Trigger Type:** Always set to **Manual**.
* **Required Type:**
* **Mandatory:** Required for automatic actions.
* **Optional or Mandatory:** Can be used for manual actions.
* **Repeatable:** Check this box if the action can be triggered multiple times.
* **Autorun Children:** Automatically runs child actions (mandatory and automatic) immediately after the parent action completes.
* **Allow Back on This Action:** Enables users to move back in the process flow and redo previous actions. For details, see [Moving a Token Backwards in a Process](../../flowx-designer/managing-a-project-flow/moving-a-token-backwards-in-a-process).
The "Start New Project Instance" action is incompatible with subprocess configurations because projects, unlike libraries, are self-contained collections of resources designed to satisfy specific use cases. Libraries provide reusable, lightweight resources and routines, such as error handling or enumerations, and do not manage complex business logic.
#### Parameters
The following parameters must be configured for the action:
* **Project:** Specifies the target project to be initiated.
* **Process:** Selects the process from the list of processes available in all builds.
* **Start with Parameters:** Defines the parameters passed to the new process. These parameters can include:
* **Customer Name:** Useful for initiating flows tailored to a specific customer.
* **Copied Data:** Information from the current process that is required to start the target application’s process.

***
## Key benefits
* **Isolated Process Management:** Supports launching new, isolated processes in separate applications, ensuring flexibility and independence across teams and environments.
* **Active Version Execution:** Ensures that the project instance uses the active build version at the time of initiation, providing consistency in functionality.
* **Parameter Passing:** Enables seamless data transfer between the initiating and target processes, improving operational efficiency.
# Start subprocess action
Source: https://docs.flowx.ai/5.1/docs/building-blocks/actions/start-subprocess-action
A Start subprocess action is an action that allows you to start a subprocess from another (parent) process.
The "Start subprocess" is available only on [User Task](../node/user-task-node) nodes.
For any other scenarios, you should use the [Call Activity node](../node/call-subprocess-tasks/call-activity-node) instead.
Using **subprocesses** is a good way to split the complexity of your business flow into multiple, simple and reusable processes.
## Configuring a Start subprocess action
To use a process as a [subprocess](../process/subprocess) you must first create it. Once the subprocess is created, you can start it from another (parent) process. To do this, you will need to add a **Start Subprocess** action to a [**User task**](../node/task-node) node in the parent process or by using a [Call activity node](../node/call-subprocess-tasks/call-activity-node).
Here are the steps to start a subprocess from a parent process:
1. First, create a [process](../process/process-definition) designed to be used as a [subprocess](../process/subprocess).
2. In the parent process, create a **user task** node where you want to start the subprocess created at step 1.
3. Add a **Start subprocess** action to the task node.
4. Configure the **Start Subprocess** action and from the dropdown list choose the subprocess created at step 1.
By following these steps, you can start a subprocess from a parent process and control its execution based on your specific use case.

The following properties must be configured for a **Start subprocess** action:
* [Action Edit](#action-edit)
* [Trigger](#trigger)
* [Execution](#execution)
* [Navigation](#navigation)
* [Select Subprocess](#select-subprocess)
* [Subprocess Options](#subprocess-options)
* [Data Mapping](#data-mapping)
* [Advanced Configuration](#advanced-configuration)
* [Data to send (for Manual actions)](#data-to-send)
### Action edit
* **Name** - used internally to make a distinction between different actions on nodes in the process. We recommend defining an action naming standard to be able to quickly find the process actions
* **Action type** - should be set to **Start Subprocess**
### Trigger
* **Manual** - toggle to choose if this action should be triggered manually (triggered by the user) or automatically (when the process flow reaches this step). In most use cases, this will be set to automatic
* **Repeatable** - toggle to enable if the action can be triggered multiple times
### Execution
* **Optional** - automatic actions are mandatory by default. Manual actions can be set as optional by enabling this toggle
* **Autorun Children?** - when this is enabled, the child actions (the ones defined as mandatory and automatic) will run immediately after the execution of the parent action is finalized
### Navigation
* **Allow back to this action** - enables back-in-process functionality that allows you to go back in a business process and redo a series of previous actions in the process. For more details, check [**Moving a token backwards in a process**](../../flowx-designer/managing-a-project-flow/moving-a-token-backwards-in-a-process) section
### Select Subprocess
* **Subprocess name** - dropdown to select the process that you want to start as a subprocess. The dropdown displays the available subprocesses in the format `[Workspace]ProcessName`
* **Branch** - a dropdown menu displaying available branches on the subprocess (both opened and merged)
* **Version** - the type of version that should be used within the subprocess
- **Latest Work in Progress**:
* Displayed if the selected branch is not merged into another branch.
* This configuration is used when there is a work-in-progress (WIP) version on the selected branch or when there is no WIP version on the selected branch due to either work in progress being submitted or the branch being merged.
* In such cases, the latest available configuration on the selected branch is used.
- **Latest Submitted Work**:
* This configuration is used when there is submitted work on the selected branch, and the current branch has been submitted on another branch (latest submitted work on the selected branch is not the merged version).
- **Custom Version**:
* Displayed if the selected branch contains submitted versions.
### Subprocess Options
* **Parallel Multi-Instance** - enables the subprocess to run multiple instances in parallel
* **Start Async** - when enabled, the subprocess will start asynchronously
### Data Mapping
* **Switch to legacy mapping** - toggle to enable legacy data mapping configuration
When legacy mapping is enabled, you can configure:
* **Copy from current state** - if a value is set here, it will overwrite the default behavior (of copying the whole data from the subprocess) with copying just the data that is specified (based on keys). Click the **+** button to add keys and specify the **Output Key** for each
* **Exclude from current state** - specify which fields you want to exclude when copying the data from the parent process to the subprocess (by default all data fields are copied). Click the **+** button to add keys to exclude
Map which data will be sent and received from the subprocess you are starting.

### Advanced configuration
* **Show Target Process** - toggle to enable the subprocess to communicate with the parent process (the process where this action is configured)
### Data to send
* **Keys** - are used when data is sent from the frontend via an action to validate the data (you can find more information in the [**User task configuration**](../node/user-task-node) section)
**Data to send** option is configurable only when the action **trigger type** is **Manual**.
## Example
Let's create a main **process**, in this process we will add a user task node that will represent a menu page. In this newly added node we will add multiple subprocess actions that will represent menu items. When you select a menu item, a subprocess will run representing that particular menu item.

To start a subprocess, we can, for example, create the following minimum configuration in a user task node (now we configure the process where we want to start a subprocess):
* **Action** - `menu_item_1` - used internally to make a distinction between different actions on nodes in the process. We recommend defining an action naming standard to be able to quickly find the process actions
* **Trigger type** - Manual; Optional
* **Repeatable** - yes
* **Subprocess** - `docs_menu_item_1` - the name of the process that you want to start as a subprocess
* **Exclude from current state** - `test.price` - copy all the data from the parent, except the price data
* **Copy from current state** - leave this field empty in order to copy all the data (except the keys that are specified in the **Exclude from current state** field), if not, add the keys from which you wish to copy the data

**Advanced configuration**
* **Target process (parentProcessInstanceId)** - `${processInstanceId}` - current process ID
#### Result

# Upload file action
Source: https://docs.flowx.ai/5.1/docs/building-blocks/actions/upload-file-action
An Upload File action is an action type that allows you to upload a file to a service available on Kafka.
**Why is it useful?** The action will receive a file from the frontend and send it to Kafka, and will also attach some metadata.
## Configuring an Upload file action
Multiple options are available for this type of action and can be configured via the **FlowX.AI Designer**. To configure an Upload File action, use the **Actions** tab at the [task node level](../../flowx-designer/managing-a-project-flow/adding-an-action-to-a-node), which has the following configuration options:
* [Action Edit](#action-edit)
* [Back in steps (for Manual actions)](#back-in-steps)
* [Parameters](#parameters)
* [Data to send (for Manual actions)](#data-to-send)
* [UI Configuration](#ui-configuration)
### Action edit
* **Name** - used internally to make a distinction between different actions on nodes in the process. We recommend defining an action naming standard to be able to quickly find the process actions
* **Order** - if multiple actions are defined on the same node, the running order should be set using this option
* **Timer expression** - it can be used if a delay is required on that action. The format used for this is [ISO 8601 duration format ](https://www.w3.org/TR/NOTE-datetime)(for example, a delay of 30 seconds will be set up as `PT30S`)
* **Action type** - should be set to **Upload File**
* **Trigger type** (options are Automatic/Manual) - choose if this action should be triggered automatically (when the process flow reaches this step) or manually (triggered by the user); in most use cases, this will be set to automatic
* **Required type** (options are Mandatory/Optional) - automatic actions can only be defined as mandatory. Manual actions can be defined as mandatory or optional.
* **Repeatable** - should be checked if the action can be triggered multiple times
* **Autorun Children** - when this is switched on, the child actions (the ones defined as mandatory and automatic) will run immediately after the execution of the parent action is finalized

### Back in steps
* **Allow BACK on this action** - back in process is a functionality that allows you to go back in a business process and redo a series of previous actions in the process. For more details, check [Moving a token backwards in a process](../../flowx-designer/managing-a-project-flow/moving-a-token-backwards-in-a-process) section.
### Parameters
* **Address** - the Kafka topic where the file will be posted
* **Document Type** - other metadata that can be set (useful for the [document plugin](../../../../platform-deep-dive/core-extensions/content-management/notifications-plugin/sending-a-notification))
* **Folder** - allows you to configure a value by which the file will be identified in the future
* **Advanced configuration (Show headers)** - this represents a JSON value that will be sent on the headers of the Kafka message
### Data to send
* **Keys** - are used when data is sent from the frontend via an action to validate the data (you can find more information in the [User Task configuration](../node/user-task-node) section)
**Data to send** option is configurable only when the action **trigger type** is **Manual**.
## UI configuration
When configuring the UI action that corresponds to the Upload File node action, you must set the **UI action type** to **upload**. This ensures proper integration between the frontend interface and the backend upload functionality.

## Example
An example of **Upload File Action** is to send a file to the [document plugin](../../../../platform-deep-dive/core-extensions/content-management/notifications-plugin/sending-a-notification). In this case, the configuration will look like this:
**Parameters configuration**
* **Address (topicName)** - will be set to (the id of the document plugin service) `ai.flowx.in.document.persist.v1`
* **Document Type** - metadata used by the document plugin, here we will set it to`BULK`
* **Folder** - the value by which we want to identify this file in the future (here we use the **client.id** value available on the process instance data: `${application.client.id}`
**Advanced configuration**
* **Headers** - headers will send extra metadata to this topic -`{"processInstanceId": ${processInstanceId}, "destinationId": "currentNodeName"}`)

# Call activity node
Source: https://docs.flowx.ai/5.1/docs/building-blocks/node/call-subprocess-tasks/call-activity-node
Call activity is a node that provides advanced options for starting subprocesses.
There are cases when extra functionality is needed on certain nodes to enhance process management and execution.

The Call Activity node contains a default action for starting a subprocess, which can be started in two modes:
* **Async mode**: The parent **process** will continue without waiting for the subprocess to finish.
Select if this task should be invoked asynchronously. Make tasks asynchronous if they cannot be executed instantaneously, for example, a task performed by an outside service.
* **Sync mode**: The parent process must wait for the subprocess to finish before advancing.
The start mode can be chosen when configuring the call activity.
If the parent process needs to wait for the subprocess to finish and retrieve results, the parent process key that will hold the results must be defined using the *output key* node configuration value.

## Starting multiple subprocesses
This node type can also be used for starting a set of subprocesses that will be started and run at the same time.
This is useful when there is an array of values in the parent process parameters, and a subprocess needs to be started for each element in that array.

#### Business rule example
Below is an example of an MVEL business rule used to generate a list of shipping codes:
```java theme={"system"}
import java.util.*;
def mapValues(shippingCode) {
return {
"shippingCode": shippingCode
}
}
shippingCodeList = [];
shippingCodeList.add(mapValues("12456"));
shippingCodeList.add(mapValues("146e3"));
shippingCodeList.add(mapValues("24356"));
shippingCodeList.add(mapValues("54356"));
output.put("shippingCodeList", shippingCodeList);
```
In this example, the shippingCodeList array contains multiple shipping code maps. Each of these maps could represent parameters for individual subprocesses. The ability to generate and handle such arrays allows the system to dynamically start and manage multiple subprocesses based on the elements in the array, enabling parallel processing of tasks or operations.
To achieve this, select the *parallel multi-instance* option. The *collection key* name from the parent process also needs to be specified.

When designing such a subprocess that will be started in a loop, remember that the input value for the subprocess (one of the values from the array in the parent process) will be stored in the subprocess parameter values under the key named *item*. This key should be used inside the subprocess. If this subprocess produces any results, they should be stored under a key named *result* to be sent back to the parent process.

#### Subprocess business rule example
Here's an MVEL business rule for a subprocess that processes shipping codes:
```java theme={"system"}
import java.util.*;
map = new HashMap();
if (input.item.shippingCode.startsWith("1")) {
map.package = "Fragile";
} else {
map.package = "Non-fragile";
}
map.shippingCode = input.item.shippingCode;
output.put("result", map);
```
## Result (one of the subprocess instances)
The result shows the output of a process that has handled multiple shipping codes. The structure is:

```json theme={"system"}
{
"package": "Non-fragile",
"shippingCode": "54356"
}
```
This contains the result of processing the specific shipping code, indicating additional attributes related to the shipping code (e.g., package type) determined during the subprocess execution.
# Start embedded subprocess
Source: https://docs.flowx.ai/5.1/docs/building-blocks/node/call-subprocess-tasks/start-embedded-subprocess
The Start Embedded Subprocess node initiates subprocesses within a parent process, allowing for encapsulated functionality and enhanced process management.
## Overview
The Start Embedded Subprocess node enables the initiation of subprocesses within a parent process, offering a range of features and options for enhanced functionality.

## Usage Considerations
### Data Management
Embedded subprocesses offer advantages such as:
* Segregated sections from a subprocess can be utilized without rendering them over the parent process.
* Data is stored within the parent process instance, eliminating the need for data transfer.
* Embedded subprocesses are visible in the navigation view.
### Runtime Considerations
**Important** runtime considerations for embedded subprocesses include:
* The **child process** must have only **one swimlane**.
* Runtime swimlane permissions are inherited from the parent.
* Certain boundary events are supported on Start Embedded Subprocess node, except for Timer events (currently not implemented).
Embedded subprocesses cannot support multiple swimlanes in the actual implementation.
## Example
Let's explore this scenario: Imagine you're creating a process that involves a series of steps, each akin to a sequential movement of a stepper. Now, among these steps, rather than configuring one step from scratch, you can seamlessly integrate a pre-existing process, treating it as a self-contained unit within the overarching process.
### Step 1: Design the Embedded Subprocess
Log in to the FlowX.AI Designer where you create and manage process flows.
Start by creating a new process or selecting an existing process where you want to embed the subprocess.
Design your navigation areas to match your needs.

Make sure you allocated all your user tasks into the navigation area accordingly.
Within the selected process, design the subprocess by adding necessary tasks, events and so on. Ensure that the subprocess is contained within **a single swimlane**.

To initiate a process with an embedded subprocess, designate the root Navigation Area of the subprocess as an inheritance placeholder **Parent Process Area** label in the **Navigation Areas**.
Ensure that the navigation hierarchy within the Parent Process Area can be displayed beneath the parent navigation area within the main process interface.

Make sure you allocated all your user tasks into the navigation area accordingly.
### Step 2: Configure Start Embedded Subprocess Node
Within the parent process, add a **Start Embedded Subprocess Node** from the node palette to initiate the embedded subprocess.
Configure the node to specify the embedded subprocess that it will initiate. This typically involves selecting the subprocess from the available subprocesses in your process repository.

### Step 3: Customize Subprocess Behavior
[**Alternative flows**](../../process/navigation-areas#alternative-flows) configured in the **main process** will also be applied to **embedded subprocesses** if they share the same name.
Within the subprocess, handle data as needed. Remember that data is stored within the parent process instance when using embedded subprocesses.
Implement boundary events within the subprocess if specific actions need to be triggered based on certain conditions.

### Step 4: Test Integration
Test the integration of the embedded subprocess within the parent process. Ensure that the subprocess initiates correctly and interacts with the parent process as expected.
Verify that data flows correctly between the parent process and the embedded subprocess. Check if any results produced by the subprocess are correctly captured by the parent process.

For further details on other ways of configuring and utilizing subprocesses, refer to the following resources:
# Error events
Source: https://docs.flowx.ai/5.1/docs/building-blocks/node/error-events
Error Events expand the capabilities of process modeling and error handling within BPMN processing. These Error Event nodes enhance the BPMN standard and offer improved control over error management.

## Intermediate event - error event (interrupting)

## Compatibility matrix for Error Events
**Error Events** are used to handle error scenarios within BPMN processes. The following table outlines their compatibility with different node types:
| **Node Type** | **Error Boundary Event** |
| ------------------------ | ------------------------ |
| **User Task** | Yes |
| **Service Task** | Yes |
| **Send Message Task** | Yes |
| **Receive Message Task** | Yes |
| **Subprocess** | Yes |
| **Call Activity** | Yes |
## Key characteristics
1. **Boundary of an Activity node or Subprocess:**
* Error Events can only be used on the boundary of an activity, including subprocesses nodes. They cannot be placed in the normal flow of the process.
2. **Always Interrupt the Activity:**
* It's important to note that Error Events always interrupt the activity to which they are attached. There is no non-interrupting version of Error Events.
3. **Handling Thrown Errors:**
* A thrown error, represented by an Error Event, can be caught by an Error Catch Event. This is achieved specifically using an Error Boundary Event, which is placed on the boundary of the corresponding activity.
4. **Using error events on Subprocesses nodes**:
* An error catch event can be linked to a subprocess, with the error source residing within the subprocess itself, denoted by the presence of an error end event, signifying an abnormal termination of the subprocess.
## Configuring an Error Intermediate boundary event

* **Name**: Assign a name to the event for easy identification.
* **Condition**: Specify the condition that triggers the error event. Various script languages can be used for defining conditions, including:
* MVEL
* JavaScript
* Python
To draw a sequence from an error event node and link it to other nodes, simply follow these steps: right-click on the node, and then select the option to "Add Sequence."
When crafting a condition, use a predefined key as illustrated below:

For instance, in the example provided, we've taken a process key defined on a switch UI element and constructed a user-defined condition like this: `input.application.switch == true`.
* **Priority**: Determine the priority level of this error event in relation to other error events added on the same node.
When multiple error events are configured for a node, and multiple conditions simultaneously evaluate to true, only one condition can interrupt the ongoing activity and advance the token to the next node. The determination of which condition takes precedence is based on the "priority" field.
If the "priority" field is set to "null," the system will randomly select one of the active conditions to trigger the interruption.
* `input.application.switch`: This represents a key to bind a value to the Switch UI element within the "application" part of the "input". It is used in this example to capture input or configuration from a user.
* `==`: This is an equality operator, and it checks if the value on the left is equal to the value on the right.
* `true` is a boolean value, which typically represents a state of "true" or "on."
So, when you put it all together, the statement is checking if the value of the "input.application.switch" is equal to the string "true." If the value of "input.application.switch" is indeed "true" (as a string), the condition is considered true. If the value is anything other than "true," the condition is false and the error is triggered.
### Use case: handling errors during User Task execution
**Description:** This use case pertains to a page dedicated to collecting client contact data. Specifically, it deals with scenarios where users are given the opportunity to verify their email addresses and phone numbers.
In this scenario we will create a process to throw an error if an email address is not valid.

#### Example configuration
1. **Error Boundary Event:** We will set an error boundary event associated with a user task.
2. **Error Node:** The node will be responsible to redirect the user to other flows after the user's email address is validated based on the conditions defined.
```java theme={"system"}
input.application.client.contactData.email.emailAddress != "john.doe@email.com"
```
The expression checks if the email address configured in `application.client.contactData.email.emailAddress` key is not equal to "[john.doe@email.com](mailto:john.doe@email.com)." If they are not the same, it evaluates to true, indicating a mismatch.

3. **Flow Control:** Depending on the outcome of the validation process, users will be directed to different flows, which may involve displaying error modals as appropriate.

# Exclusive gateway
Source: https://docs.flowx.ai/5.1/docs/building-blocks/node/exclusive-gateway-node
In the world of process flows, decisions play a crucial role, and that's where the Exclusive Gateway comes into play. This powerful tool enables you to create conditional pathways based on data provided.
## Understanding Exclusive (XOR) Gateway
An exclusive gateway (also called XOR gateway) represents a decision point in your process where exactly one outgoing path is selected based on conditions. This is one of the most common routing mechanisms used in business process modeling.
**Core principles of Exclusive Gateways**
When designing decision logic with exclusive gateways, consider these guiding principles:
An exclusive gateway evaluates multiple conditions, but only **one outgoing sequence flow** will be taken - the first condition that evaluates to *true*.
Each outgoing path from an XOR gateway depends on a condition that evaluates to *true* or *false*.
Overlapping conditions - where multiple paths could match - can lead to **unpredictable routing**. Gateways will select the first matching path, which might not be the correct one.
This is the essential question behind every XOR gateway: **"Given the input, which path should the process follow?"**
Before deploying a process with an XOR gateway, test it using **realistic data sets** and **edge cases**. Ensure each possible path behaves as expected - and none are silently skipped or broken.
Every XOR gateway introduces a **decision point**. Each outgoing sequence flow represents a **distinct outcome** - make sure those outcomes are meaningful and necessary.
Include a **default path** in the gateway to catch any scenario where none of the defined conditions match. This is especially important when the decision logic depends on external or dynamic data.
Your conditions should be **simple, explicit, and named clearly**. Avoid nesting complex expressions directly in the gateway when possible - move logic to a service task if needed.
Business rules change. Processes evolve. If your gateway logic doesn't keep up, the process will drift out of sync with how the business actually works.
## Configuring an Exclusive Gateway node

To configure this node effectively, it's essential to set up both the **input** and **output** sequences within the gateway process.


### General configuration
* **Node name**: Give your node a meaningful name.
* **Can go back**: Enabling this option allows users to revisit this step after completing it.
When a step has "Can Go Back" set to false, all preceding steps become inaccessible.
* [**Stage** ](../../platform-deep-dive/core-extensions/task-management/using-stages): Assign a stage to the node.

### Gateway decisions
* **Language**: When configuring conditions, you can use JavaScript, Python, MVEL, or Groovy expressions that evaluate to either **true** or **false**.
* **Conditions**: In the **Gateway Decisions** tab, you can see that the conditions (**if, else if, else**) are already built-in and you can **select** the destination node when the condition is **true**.
The order of expressions matters; the first **true** evaluation stops execution, and the token moves to the selected node.

After the exclusive portion of the process, where one path is chosen over another, you'll need to either end each path (as in the example below) or reunite them into a single process (as in the example above) using a new exclusive gateway without any specific configuration.

## JavaScript examples
### Getting input from a Switch UI element
Let's consider the following example: we want to create a process that displays 2 screens and one modal. The gateway will direct the token down a path based on whether a switch element (in our case, VAT) is toggled to true or false.

If, during the second screen, the VAT switch is toggled on, the token will follow the second path, displaying a modal.

After interacting with the modal, the token will return to the main path, and the process will continue its primary flow.

**Example configuration**:
* **Language**: JavaScript
* **Expression**:
```javascript theme={"system"}
input.application.company.vat == true // you can use the same method to access a value for other supported scripts in our platform: MVEL, Python and Groovy
```
Essentially, you are accessing a specific value or property within a structured data object. The format is usually `input.{{key from where you want to access a value}}`. In simpler terms, it's a way to verify if a particular property within your input data structure (`input.application.company.vat` key attached to Switch UI element) is set to the value true. If it is, the condition is met and returns true; otherwise, it returns false.
The `application.company.vat` key corresponds to the switch UI element.

### Getting input from multiple UI elements
Consider another scenario in which the process relies on user-provided information, such as age and membership status, to determine eligibility for a discount. This decision-making process utilizes multiple conditions, and depending on the input, it may either conclude or continue with other flows.

**Configuration example**:

In our case, the expressions fields will be populated with the `input.application.client.age` and `input.application.client.membership` keys, which correspond to the user input collected on the initial screen.
Here's how we've configured the rules for our discount eligibility process:
1. Users under 18 with standard membership are not eligible (redirected to not\_eligible\_modal):
```
input.application.client.age < 18 && input.application.client.membership == "standard"
```
2. Users 18 or older with standard membership are not eligible due to membership level (redirected to not\_eligible\_membership):
```
input.application.client.age >= 18 && input.application.client.membership == "standard"
```
3. Users 18 or older with gold membership qualify for a discount (redirected to discount\_applied):
```
input.application.client.age >= 18 && input.application.client.membership == "gold"
```
4. Users 18 or older with platinum membership also qualify for a discount (redirected to discount\_applied):
```
input.application.client.age >= 18 && input.application.client.membership == "platinum"
```
5. Any other combinations are sent to needsValidation for further review.
Each rule uses the logical AND operator (&&) to ensure both conditions must be true for the rule to apply. The rules are evaluated in sequence, and the process follows the path of the first matching rule.
The process is visualized as follows:
# Message catch boundary events
Source: https://docs.flowx.ai/5.1/docs/building-blocks/node/message-events/message-catch-boundary-event
Boundary events are integral components linked to user tasks within a process flow. Specifically, Message Catch Boundary Events are triggered by incoming messages and can be configured as either interrupting or non-interrupting based on your requirements.
**Why is it important?** It empowers processes to actively listen for and capture designated messages during the execution of associated user tasks.
When an event is received, it progresses through the sequence from the intermediate **node**. Multiple intermediate boundary events can exist on the same user task, but only one can be activated at a time.

Message Catch Boundary Events can be categorized by their behavior, resulting in two main classifications:
* [**Interrupting**](#message-catch-interrupting-event)
* [**Non-interrupting**](#message-catch-non-interrupting-event)
## Message catch interrupting event

In the case of an Interrupting Message Catch Boundary Event triggered by a received message, it immediately interrupts the ongoing task. The associated task concludes, and the **process flow** advances based on the received message.
* **Use Cases:**
* Suitable for scenarios where the receipt of a specific message requires an immediate interruption of the current activity.
* Often used when the received message signifies a critical event that demands prompt attention.
* **Example:**
* A user task is interrupted as soon as a high-priority message is received, and the process flow moves forward to handle the critical event.
## Message catch non-interrupting event

Contrastingly, a Non-Interrupting Message Catch Boundary Event continues to listen for messages during the execution of the associated task without immediate interruption. The task persists in its execution even upon receiving messages. Multiple non-interrupting events can be activated concurrently while the task is still active, allowing the task to continue until its natural completion.
* **Use Cases:**
* Appropriate for scenarios where multiple messages need to be captured during the execution of a user task without disrupting its flow.
* Useful when the received messages are important but do not require an immediate interruption of the ongoing activity.
* **Example:**
* A user task continues its execution while simultaneously capturing and processing non-critical messages.
## Compatibility matrix for Message Events
**Message Events** can be used in various contexts within BPMN processes. The following table outlines their compatibility with the following nodes:
| **Node Type** | **Message Catch Event - Interrupting** | **Message Catch Event - Non-Interrupting** |
| ----------------------------- | -------------------------------------- | ------------------------------------------ |
| **User Task** | Yes | Yes |
| **Service Task** | Yes | Yes |
| **Send Message Task** | No | No |
| **Receive Message Task** | Yes | Yes |
| **Start Embedded Subprocess** | Yes | Yes |
| **Call Activity** | Yes | Yes |
## Configuring a message catch interrupting/non-interrupting event
#### General config
* **Correlate with Throwing Events** - the dropdown lists all throw events from accessible process definitions
Establishes correlation between the catch event and the corresponding throw event. Selection of the relevant throw event triggers the catch event upon message propagation.
* **Correlation Key** - process key used to correlate received messages with specific process instances
The correlation key associates incoming messages with specific process instances. Upon receiving a message with a matching correlation key, the catch event is triggered.
* **Receive Data (Process Key)** - the catch event can receive and store data associated with the message in a process variable with the specified process key
This received data becomes available within the process instance, facilitating further processing or decision-making.
## Illustrating boundary events (interrupting and non-interrupting)

**Business Scenario:**
A customer initiates the account opening process. Identity verification occurs, and after successful verification, a message is thrown to signal that the account is ready for activation.
Simultaneously, the account activation process begins. If there are issues during activation, they are handled through the interruption process. The overall process ensures a streamlined account opening experience while handling potential interruptions during activation, and also addresses exceptions through the third lane.
# Message catch start event
Source: https://docs.flowx.ai/5.1/docs/building-blocks/node/message-events/message-catch-start-event
Message Catch Start Event node represents the starting point for a process instance based on the receipt of a specific message. When this event is triggered by receiving the designated message, it initiates the execution of the associated process.
**Why it is important?** The Message Catch Start Event is important because it allows a process to be triggered and initiated based on the reception of a specific message.
## Configuring a message catch start event
A Message Catch Start Event is a special event in a process that initiates the start of a process instance upon receiving a specific message. It acts as the trigger for the process, waiting for the designated message to arrive. Once the message is received, the process instance is created and begins its execution, following the defined process flow from that point onwards. The Message Catch Start Event serves as the entry point for the process, enabling it to start based on the occurrence of the expected message.
It is mandatory that in order to use this type of node together with task management plugin, to have a service account defined in your identity solution. For more information, check our documentation in how to create service accounts using Keycloak, [**here**](../../../../setup-guides/access-management/configuring-an-iam-solution#process-engine-service-account).

#### General config
* **Can go back?** - setting this to true will allow users to return to this step after completing it, when encountering a step with `canGoBack` false, all steps found behind it will become unavailable
* **Correlate with catch events** - the dropdown contains all catch messages from the process definitions accessible to the user
* **Correlation key** - is a process key that uniquely identifies the instance to which the message is sent
* **Send data** - allows the user to define a JSON structure with the data to be sent along with the message
* **Stage** - assign a stage to the node, if needed

## Interprocess communication with throw and message catch start events
### Throw process

#### Configuring the throw intermediate event
##### General config
* **Can go back?** - Setting this to true allows users to return to this step after completion. When encountering a step with canGoBack set to false, all steps found behind it become unavailable.
* **Correlate with catch events** - Should match the configuration in the message catch start event.
* **Correlation key** - A process key that uniquely identifies the instance to which the message is sent.
* **Send data** - Define a JSON structure with the data to be sent along with the message. In our example, we will send a test object:
```json theme={"system"}
{"test": "docs"}
```
* **Stage** - Assign a stage to the node if needed.

### Start with catch process

#### Configuring the message catch start event
Remember, it's mandatory to have a service account defined in your identity solution to have the necessary rights to start a process using the message catch start event. Refer to our documentation on how to create service accounts using Keycloak, [**here**](../../../../setup-guides/access-management/configuring-an-iam-solution#process-engine-service-account).

After running the throw process, the process containing the start catch message event will be triggered. The data is also sent:

# Message Events
Source: https://docs.flowx.ai/5.1/docs/building-blocks/node/message-events/message-events
Message events serve as a means to incorporate messaging capabilities into business process modeling. These events are specifically designed to capture the interaction between different process participants by referencing messages.

By leveraging message events, processes can pause their execution until the expected messages are received, enabling effective coordination and communication between various system components.
## Intermediate events
| Trigger | Description | Marker |
| ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| Message | A Message Intermediate Event serves to send or receive messages. A filled marker denotes a "throw" event, while an unfilled marker indicates a "catch" event. This either advances the process or alters the flow for exception handling. Identifying the Participant is done by connecting the Event to a Participant through a Message Flow. | Throw  Catch  |
## Boundary events
Boundary Events involve handling by first consuming the event occurrence. Message Catch Boundary Events, triggered by incoming messages, can be configured as either interrupting or non-interrupting.
| Trigger | Description | Marker |
| ------- | ------------------------------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------: |
| Message | **Non-interrupting Message Catch Event**: The event can be triggered at any time while the associated task is being performed. | Non-interrupting  |
| Trigger | Description | Marker |
| ------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------: |
| Message | **Interrupting Message Catch Event**: The event can be triggered at any time while the associated task is being performed, interrupting the task. | Interrupting  |
## Intermediate vs boundary
**Intermediate Events**
* Intermediate events temporarily halt the process instance, awaiting a message.
**Boundary Interrupting Events**
* These events can only be triggered while the token is active within the parent node.

* Upon activation, the parent node concludes, and the token progresses based on the boundary flow.

**Boundary Non-Interrupting Events**
* Similar to interrupting events, non-interrupting events can only be triggered while the token is active in the parent node.
* Upon triggering, the parent node remains active, and a new token is generated to execute the boundary flow concurrently.
FlowX.AI works with the following message events nodes:
* [**Message catch start event**](./message-catch-start-event)
* [**Message intermediate events**](./message-intermediate/)
* [**Message catch boundary event**](./message-catch-boundary-event)
## Message events correlation
Messages are not sent directly to process instances. Instead, message correlation is achieved through message subscriptions, which consist of the message name and the correlation key (also referred to as the correlation value).
A correlation key is a key that can have the same value across multiple instances, and it is used to match instances based on their shared value. It is not important what the attribute's name is (even though we map based on this attribute), but rather the value itself when performing the matching between instances.
For example, in an onboarding process for a user, you hold a unique personal identification number (SSN), and someone else needs a portion of your process, specifically the value of your input (SSN).
The communication works as follows: you receive a message on a Kafka topic - `${kafka.topic.naming.prefix}.core.message.event.process${kafka.topic.naming.suffix}`. The engine listens here and writes the response.
## Message events configuration
* `attachedTo`: a property that applies to boundary events
* `messageName`: a unique name at the database level, should be the same for throw and catch events
* `correlationKey`: a process variable used to uniquely identify the instance to which the message is sent
* `data`: allows defining the JSON message body mapping as output and input
### Data example
```json theme={"system"}
{
"document":{
"documentId": "${document.id}",
"documentUrl": "${document.url}"
}
}
```
# Intermediate message events in business processes
Source: https://docs.flowx.ai/5.1/docs/building-blocks/node/message-events/message-intermediate/example-intermediate-message-events
Business processes often involve dynamic communication and coordination between different stages or departments. Intermediate Message Events play an important role in orchestrating information exchange, ensuring effective synchronization, and enhancing the overall efficiency of these processes.
* [Throw and catch on sequence - credit card request process example](#throw-and-catch-on-sequence---credit-card-request-process-example)
* [Throw and catch - interprocess communication](#interprocess-communication-with-throw-and-catch-events)
## Throw and catch on sequence - Credit card request process example
### Business scenario
In the following example, we'll explore a credit card request process that encompasses the initiation of a customer's request, verification based on income rules, approval or rejection pathways, and communication between the client and back office.

#### Activities
##### Default swimlane (client)
* **Start Event:** Marks the commencement of the process.
* **User Task 1:** Customer Requests New Credit Card - Involves the customer submitting a request for a new credit card.
* **Exclusive Gateway:** The process diverges based on the verification result (dependent on income rules).
* **Path A (Positive Verification):**
* **User Task 2:** Approve Credit Card Application - The bank approves the credit card application.
* **End Event:** Denotes the conclusion of the process for approved applications.
* **Path B (Negative Verification):**
* **Parallel Gateway Open:** Creates two parallel zones.
* **First Parallel Zone:**
* **User Task 3:** Reject Credit Card Application - The bank rejects the credit card application.
* **Message Throw Intermediate Event:** Signals the rejection, throwing a message to notify the back office department.
* **End Event:** Signifies the end of the process for rejected applications.
* **Second Parallel Zone:**
* **User Task 3:** Reject Credit Card Application - The bank rejects the credit card application.
* **Message Catch Intermediate Event:** The back office department is notified about the rejection.
* **Send Message Task**: A notification is sent via email to the user about the rejection.
* **End Event:** Signifies the end of the process for rejected applications.
##### Backoffice swimlane
* **Message Catch Intermediate Event:** The back office department awaits a message to proceed with credit card issuance.
* **Send Message Task:** Send Rejection Letter - Involves sending a rejection letter to the customer.
### Sequence flow
```mermaid theme={"system"}
graph TD
subgraph Default Swimlane
StartEvent[Start Process]
UserTask1[User Task 1: Customer Requests New Credit Card]
Gateway1{Exclusive Gateway}
UserTask2[User Task 2: Approve Credit Card Application]
endA[End Event: End approved scenario]
ParallelGateway{Parallel Gateway}
UserTask3A[User Task 3: Reject Credit Card Application]
MessageThrow[Message Throw Intermediate Event: Throwing a message to notify the back office department.]
Gateway2{Close Parallel}
endC[End Event: Signifies the end of the process for rejected applications.]
end
subgraph Backoffice Swimlane
MessageCatch
SendEmailTask
end
StartEvent -->|Start Process| UserTask1
UserTask1 -->|Income Verification| Gateway1
Gateway1 -->|Positive Verification| UserTask2
UserTask2 -->|Approved| endA
Gateway1 -->|Negative Verification| ParallelGateway
ParallelGateway -->|First Parallel Zone| UserTask3A
UserTask3A -->|Credit Card Rejected| MessageThrow
MessageThrow --> Gateway2 -->|Second Parallel Zone| MessageCatch
MessageCatch --> SendEmailTask
SendEmailTask --> Gateway2
Gateway2 -->|End| endC
```
### Message flows
A message flow connects the Message Throw Intermediate Event to the Message Catch Intermediate Event, symbolizing the communication of credit card approval from the credit card approval task to the back office department.
In summary, when a customer initiates a new credit card request, the bank verifies the information. If declined, a message is thrown to notify the back office department. The Message Catch Intermediate Event in the back office awaits this message to proceed with issuing and sending the rejection letter to the customer.
### Configuring the BPMN process
To implement the illustrated BPMN process for the credit card request, follow these configuration steps:
**FlowX.AI Designer**: Open FlowX.AI Designer.
**Draw BPMN Diagram**: Import the provided BPMN diagram into FlowX.AI Designer or recreate it by drawing the necessary elements.
**Customize Swimlanes**: Set up the "Default" and "Backoffice" swimlanes to represent different departments or stakeholders involved in the process. This helps visually organize and assign tasks to specific areas.
**Define User Tasks**: Specify the details for each user task. Configure User Task 1, User Task 2, and User Task 3 with appropriate screens.
* **User Task 1** - *customer\_request\_new\_credit\_card*
We will use the value from `application.income` key added on the slider UI element to create an MVEL business rule in the next step.

* **User Task 2** - *approve\_credit\_card\_request*

In this screen, we configured a modal to display the approval.
* **User Task 3** - *reject\_credit\_card\_request*

**Configure Gateways**: Adjust the conditions for the Exclusive Gateway based on your business rules. Define the conditions for positive and negative verifications, guiding the process down the appropriate paths.
In our example, we used an MVEL rule to determine eligibility based on the income of the user. We used the `application.income` key configured in the first user task to create the rule.

Also, add Parallel gateways to open/close parallel paths.

**Set Message Events**: Configure the Message Throw and Message Catch Intermediate Events in the "Default" and "Backoffice" swimlanes, respectively. Ensure that the Message Catch Intermediate Event in the "Backoffice" swimlane is set up to wait for the specific message thrown by the Message Throw event. This facilitates communication between different stages of the process.
**Define End Events**: Customize the End Events for approved and rejected applications in the "Default" swimlane. Also, set an end event in the "Backoffice" swimlane to indicate the completion of the back-office tasks.
**Configure Send Message Task**: Set up the Send Message Task in the "Backoffice" swimlane to send a rejection letter as a notification to the user.

Define the content of the rejection letter, the method of notification, and any additional details required for a seamless user experience. More details on how to configure a notification can be found in the following section:
[**Sending a notification**](../../../../platform-deep-dive/core-extensions/content-management/notifications-plugin/sending-a-notification)
**Validate and Test**: Validate the BPMN diagram for correctness and completeness. Test the process flow by simulating different scenarios, such as positive and negative verifications.
### Configuring intermediate message events
Configuring message events is a crucial step in orchestrating effective communication and synchronization within a business process. Whether you are initiating a message throw or awaiting a specific message with a catch, the configuration process ensures information exchange between different components of the process.
In this section, we explore the essential steps and parameters involved in setting up message events to optimize your BPMN processes.
### Message throw intermediate event
A Message Throw Intermediate Event is an event in a process where a message is sent to trigger communication or action with another part of the process (can be correlated with a catch event). It represents the act of throwing a message to initiate a specific task or notification. The event creates a connection between the sending and receiving components, allowing information or instructions to be transmitted. Once the message is thrown, the process continues its flow while expecting a response or further actions from the receiving component.

#### General Configuration
* **Can go back?** - Setting this to true allows users to return to this step after completing it. When encountering a step with `canGoBack` false, all steps found behind it will become unavailable.
* **Correlate with catch message events** - The dropdown contains all catch messages from the process definitions accessible to the user, in our example: `throwcatchsequenceloan`
It is imperative to define the message for the catch event first. This ensures its availability in the dropdown menu when configuring the throw intermediate event.
* **Correlation key** - This is a process key that uniquely identifies the instance to which the message is sent. In our example, we utilized the `processInstanceId` as the identifier, dynamically generated at runtime. This key is crucial for establishing a clear and distinct connection between the sender and recipient in the messaging process.
A correlation key is a key that can have the same value across multiple instances, and it is used to match instances based on their shared value. It is not important what the attribute's name is (even though we map based on this attribute), but rather the value itself when performing the matching between instances.
* **The Send data field** - This feature empowers you to define a JSON structure containing the data to be transmitted alongside the message. In our illustrative example, we utilized dynamic data originating from user input, specifically bound to a slider UI element.
```json theme={"system"}
{"value": "${application.income}"}
```
* **Stage** - Assign a stage to the node.
In the end, this is what we have:

### Message catch intermediate event
A Message Catch Intermediate Event is a type of event in a process that waits for a specific message before continuing with the process flow. It enables the process to synchronize and control the flow based on the arrival of specific messages, ensuring proper coordination between process instances.

#### General Configuration
* **Can go back?** - Setting this to true allows users to return to this step after completing it. When encountering a step with `canGoBack` false, all steps found behind it will become unavailable.
* **Correlate with throwing events** - The dropdown contains all catch messages from the process definitions accessible to the user (must be the same as the one assigned in Message throw intermediate event)
* **Correlation key** - Process key used to establish a correlation between the received message and a specific process instance (must be the same as the one assigned in Message throw intermediate event).
* **Receive data** - The process key that will be used to store the data received from the throw event along with the message.
* **Stage** - Assign a stage to the node.

### Testing the final result
After configuring the BPMN process and setting up all the nodes, it is crucial to thoroughly test the process to ensure its accuracy and effectiveness.
We will test the path where the user gets rejected.

In the end, the user will receive this notification via email:

## Interprocess communication with throw and catch events
Facilitate communication between different processes by using message intermediate events.
### Business scenario
Consider a Bank Loan Approval process where the parent process initiates a loan application. During the execution, it throws a message to a subprocess responsible for additional verification.
#### Activities
**Parent Process:**
* **Start Event:** A customer initiates a loan application.
* **Start Subprocess:** Initiates a subprocess for additional verification.
* **User Task:** Basic verification steps are performed in the parent process.
* **Throw Message:** After the basic verification, a message is thrown to indicate that the loan application is ready for detailed verification.
* **End Event:** The parent process concludes.
**Subprocess:**
* **Start Event:** The subprocess is triggered by the message thrown from the parent process.
* **Catch Message:** The subprocess catches the message, indicating that the loan application is ready for detailed verification.
* *(Perform Detailed Verification and Analysis)*
* **End Event:** The subprocess concludes.
### Sequence flow
```mermaid theme={"system"}
graph TD
subgraph Parent Process
a[Start]
b[Start Subprocess]
c[Throw message to another process]
d[User Task]
e[End]
end
subgraph Subprocess
f[Start]
g[Catch event in subprocess]
h[End]
end
a --> b --> c --> d --> e
f --> g --> h
c --> g
```
### Message flows
* The parent subprocess triggers the subprocess run node, initiating the child process.
* Within the child process, a message catch event waits for and processes the message thrown by the parent subprocess.
### Configuring the parent process (throw event)

\*\*Open **FlowX.AI Designer** and create a new process.
**Add a User Task for user input**.
* Within the designer interface, add a "User Task" element to collect user input. Configure the user task to capture the necessary information that will be sent along with the message.

**Integrate a [**Call activity**](../../../node/call-subprocess-tasks/call-activity-node.mdx) node**.
* Add a "Subprocess Run Node" and configure it:
* **Start Async** - Enable this option. When subprocesses are initiated in sync mode, they notify the parent process upon completion. The parent process then manages the reception of process data from the child and resumes its flow accordingly

* Add and configure the "Start Subprocess" action:
* **Parameters**:
* **Subprocess name** - Specify the name of the process containing the catch message event.
* **Branch** - Choose the desired branch from the dropdown menu.
* **Version** - Indicate the type of version to be utilized within the subprocess.

For a more comprehensive guide on configuring the "Start Subprocess" action, refer to the following section:
[Start Subprocess action](../../../../building-blocks/actions/start-subprocess-action)
**Insert a Throw Event for Message Initiation**.
* Add a "Throw Event" to the canvas, indicating the initiation of a message.
* Configure the throw message intermediate event node:
* **Correlate with catch message events** - The dropdown contains all catch messages from the process definitions accessible to the user, in our example: `throwcatchDocs`
* **Correlation key** - This is a process key that uniquely identifies the instance to which the message is sent. In our example, we utilized the `processInstanceId` as the identifier, dynamically generated at runtime. This key is crucial for establishing a clear and distinct connection between the sender and recipient in the messaging process.
* **The Send data field** - This feature empowers you to define a JSON structure containing the data to be transmitted alongside the message. In our illustrative example, we utilized dynamic data originating from user input, specifically bound to some slider UI elements.
```json theme={"system"}
{
"client_details": {
"clientIncome": ${application.income},
"loanAmount": ${application.loan.amount},
"loanTerm": ${application.loan.term}
}
}
```

### Configuring the subprocess (catch event)

Configure the node:
* **Correlate with throwing events** - Utilize the same correlation settings added for the associated throw message event.
* **Correlation Key** - Set the correlation key to the parent process instance ID, identified as `parentProcessInstanceId`.
* **Receive data** - Specify the process key that will store the data received from the throw event along with the corresponding message.

* Integrate and Fine-Tune a Service Task for Additional Verification.
* Incorporate a service task to execute the additional verification process. Tailor the configuration to align with your preferred method of conducting supplementary checks.
### Throw with multiple catch events
Download the example
# Message catch intermediate event
Source: https://docs.flowx.ai/5.1/docs/building-blocks/node/message-events/message-intermediate/message-catch-intermediate-event
A Message Catch Intermediate Event is a type of event in a process that waits for a specific message before continuing with the process flow.

**Why it is important?** It enables the process to synchronize and control the flow based on the arrival of specific messages, ensuring proper coordination between process instances.
Similar to the message catch boundary event, the message catch intermediate event is important because it facilitates the communication and coordination between process instances through messages. By incorporating this event, the process can effectively synchronize and control the flow based on the arrival of specific messages.
Message Catch Intermediate Event can be used as a standalone node, this means that it will block a process until it receives an event.
## Configuring a message catch intermediate event
Imagine a process where multiple tasks are executed in sequence, but the execution of a particular task depends on the arrival of a certain message. By incorporating a message catch intermediate event after the preceding task, the process will pause until the expected message is received. This ensures that the subsequent task is not executed prematurely and allows for the synchronization of events within the process.

#### General config
* **Can go back?** - setting this to true will allow users to return to this step after completing it, when encountering a step with `canGoBack` false, all steps found behind it will become unavailable
* **Correlate with throwing message events** - the dropdown contains all catch messages from the process definitions accessible to the user
* **Correlation key** - process key used to establish a correlation between the received message and a specific process instance
* **Receive data** - the process key that will be used to store the data received along with the message
* **Stage** - assign a stage to the node

# Message intermediate events overview
Source: https://docs.flowx.ai/5.1/docs/building-blocks/node/message-events/message-intermediate/message-intermediate
An intermediate event is an occurrence situated between a start and an end event in a process or system. It is represented by a circle with a double line. This event can either catch or throw information, and the directional flow is indicated by connecting objects, determining whether the event is catching or throwing information.

### Message throw intermediate event
This event throws a message and continues with the process flow.
It enables the sending of a message to a unique destination.
### Message catch intermediate event
This event waits for a message to be caught before continuing with the process flow.
# Message throw intermediate event
Source: https://docs.flowx.ai/5.1/docs/building-blocks/node/message-events/message-intermediate/message-throw-intermediate-event
Using a Throw intermediate event is like throwing a message to tell someone about something. After throwing the message, the process keeps going, and other parts of the process can listen to that message.

**Why it is important?** The Message Throw Intermediate Event is important because it allows different parts of a process to communicate and share information with each other.
## Configuring a message throw intermediate event
A Message throw intermediate event is an event in a process where a message is sent to trigger a communication or action with another part of the process (can be correlated with a catch event). It represents the act of throwing a message to initiate a specific task or notification. The event creates a connection between the sending and receiving components, allowing information or instructions to be transmitted. Once the message is thrown, the process continues its flow while expecting a response or further actions from the receiving component.

#### General config
* **Can go back?** - setting this to true will allow users to return to this step after completing it, when encountering a step with `canGoBack` false, all steps found behind it will become unavailable
* **Correlate with catch events** - the dropdown contains all catch messages from the process definitions accessible to the user
* **Correlation key** - is a process key that uniquely identifies the instance to which the message is sent
* **The data field** - allows the user to define a JSON structure with the data to be sent along with the message
* **Stage** - assign a stage to the node

# Send message/receive message tasks
Source: https://docs.flowx.ai/5.1/docs/building-blocks/node/message-send-received-task-node
Send message task and Receive message task nodes are used to handle the interaction between a running process and external systems. This is done using Kafka.
## Send message task
This node is used to configure messages that should be sent to external systems.

### Configuring a send message task
Node configuration is done by accessing the **Node Config** tab. You have the following configuration options for a send message task:
#### General configuration
Inside the **General Config** tab, you have the following properties:
* **Node Name** - the name of the node
* **Can Go Back** - switching this option to true will allow users to return to this step after completing it
When encountering a step with `canGoBack` switched to false, all steps found behind it will become unavailable.
* [**Swimlane**](../../platform-deep-dive/user-roles-management/swimlanes) - choose a swimlane (if there are multiple swimlanes on the process) to ensure only certain user roles have access to certain process nodes; if there are no multiple swimlanes, the value is **Default**
* [**Stage**](../../platform-deep-dive/core-extensions/task-management/using-stages) - assign a stage to the node

To configure a send message task, we first need to add a new node and then configure an **action** (**Kafka Send Action** type):
1. Open **Process Designer** and start configuring a process.
2. Add a **send message task** node.
3. Select the **send message task** node and open the **Node Configuration**.
4. Add an **action** , the type of the action set to **Kafka Send Action**.
5. A few action parameters will need to be filled in depending on the selected action type.

Multiple options are available for this type of action and can be configured via the FlowX.AI Designer. To configure and [add an action to a node](../../flowx-designer/managing-a-project-flow/adding-an-action-to-a-node), use the **Actions** tab at the node level, which has the following configuration options:
* [Action Edit](#action-edit)
* [Back in steps (for Manual actions)](#back-in-steps)
* [Parameters](#parameters)
* [Data to send (for Manual actions)](#data-to-send)
#### Action Edit
* **Name** - used internally to make a distinction between different [actions](../actions/actions) on nodes in the process. We recommend defining an action naming standard to easily find the process actions
* **Order** - if multiple actions are defined on the same node, set the running order using this option
* **Timer Expression** - it can be used if a delay is required on that action. The format used for this is [ISO 8601 duration format](./timer-events/timer-expressions#iso-8601) (for example, a delay of 30 seconds will be set up as `PT30S`)
* **Action Type** - should be set to **Kafka Send Action** for actions used to send messages to external systems
* **Trigger Type** (options are Automatic/Manual) - choose if this action should be triggered automatically (when the process flow reaches this step) or manually (triggered by the user); in most use cases, this will be set to automatic
* **Required Type** (options are Mandatory/Optional) - automatic actions can only be defined as mandatory. Manual actions can be defined as mandatory or optional.
* **Repeatable** - should be checked if the action can be triggered multiple times
* **Autorun Children** - when this is switched on, the child actions (the ones defined as mandatory and automatic) will run immediately after the execution of the parent action is finalized
#### Back in steps
* **Allow BACK on this action** - back in the process is a functionality that allows you to go back in a business process and redo a series of previous actions in the process, or for more details, check [**Moving a Token Backwards in a Process**](../../flowx-designer/managing-a-project-flow/moving-a-token-backwards-in-a-process) section

#### Data to Send
* **Keys** - are used when data is sent from the frontend via an action to validate the data (you can find more information in the [User Task Configuration](./user-task-node) section)
You can configure **Data to Send** option only when the action **trigger type** is **Manual**.

For more information about Kafka, check the following sections:
### Example of a send message task usage
Send a message to a CRM integration to request a search in the local database:
#### Action Edit
* **Name** - pick a name that makes it easy to figure out what this action does, for example, `sendRequestToSearchClient`
* **Order** - 1
* **Timer Expression** - this remains empty if we want the action to be triggered as soon as the token reaches this node
* **Action Type** - Kafka Send Action
* **Trigger Type** - *Automatic* - to trigger this action automatically
* **Required Type** - *Mandatory* - to make sure this action will be run before advancing to the next node
* **Repeatable** - false, it only needs to run once
#### Parameters
Parameters can be added either using the **Custom** option (where you configure everything on the spot) or by using **From Integration** and import parameters already defined in an integration.
More details about **Integrations Management** you can find [here](../../platform-deep-dive/core-extensions/integration-management/integration-management-overview).
##### Custom
* **Topics** - `ai.flowx.in.crm.search.v1` the Kafka topic on which the CRM listens for requests
* **Message** - `{ "clientType": "${application.client.clientType}", "personalNumber": "${personalNumber.client.personalNumber}" }` - the message payload will have two keys, `clientType` and `personalNumber`, both with values from the process instance
* **Headers** - `{"processInstanceId": ${processInstanceId}}`



## Receive Message Task
This type of node is used when we need to wait for a reply from an external system.

The reply from the external system will be saved in the process instance values, on a specified key. If the message needs to be processed at a later time, a timeout can be set using the [ISO 8601](./timer-events/timer-expressions) format.
For example, let's think about a CRM microservice that waits to receive requests to look for a user in a database. It will send back the response when a topic is configured to listen for the response.

### Configuring a Receive Message Task
The values you need to configure for this node are the following:
* **Topic Name** - the topic name where the [process engine](../../platform-deep-dive/core-components/flowx-engine) listens for the response (this should be added to the platform and match the topic naming rule for the engine to listen to it) - `ai.flowx.out.crm.search.v1`
A naming pattern must be defined on the process engine to use the defined topics. It is important to know that all the events that start with a configured pattern will be consumed by the Engine. For example, `KAFKA_TOPIC_PATTERN` is the topic name pattern that the Engine listens to for incoming Kafka events.
* **Key Name** - will hold the result received from the external system; if the key already exists in the process values, it will be overwritten - `crmResponse`
For more information about Kafka configuration, click [here](../../../setup-guides/flowx-engine-setup-guide/engine-setup#configuring-kafka).

#### From integration
After defining one integration (inside [Integration Management](../../platform-deep-dive/core-extensions/integration-management/)), you can open a compatible node and start using already defined integrations.
* **Topics** - topics defined in your integration
* **Message** - the **Message Data Model** from your integration
* **Headers** - all integrations have `processInstanceId` as a default header parameter; add any other relevant parameters

# Process nodes (BPMN)
Source: https://docs.flowx.ai/5.1/docs/building-blocks/node/node
A Business Process Model and Notation (BPMN) node is a visual representation of a point in your process. Nodes are added at specific process points to denote the entrance or transition of a record within the process.
For a comprehensive understanding of BPMN (Business Process Model and Notation), start with the following section:
[**Intro to BPMN**](../../platform-overview/frameworks-and-standards/business-process-industry-standards/intro-to-bpmn)
The FlowX.AI platform supports various node types, each requiring distinct configurations to fulfill its role in your business flow. Understanding these node types is essential for building effective process workflows.
## Types of BPMN nodes
The following sections explore each type of BPMN node available in FlowX.AI:
### Start and End nodes
* **Start Node**: Defines the beginning of a process flow and how a process instance is initiated.
* **Message Start Event**: Starts a process instance when a specific message is received.
* **Timer Start Event**: Initiates a process instance based on a specified time or schedule.
* **End Node**: Marks where the process finishes.
A process definition may have multiple start nodes (only if they are in different swimlanes, only one start node per swimlane) and end nodes based on the flow outcomes.

### Activity nodes
* **User Task**: Represents user interactions and displays UI components.
* **Service Task**: Executes tasks using various services to accomplish specific functions.
* **Start Embedded Subprocess**: Initiates subprocesses within a parent process, providing encapsulated functionality and enhanced process management.
* **Call Activity**: Provides advanced options for starting **subprocesses** with enhanced control.
* **Send Message Task**: Sends messages to external systems, integrations, and plugins.
* **Receive Message Task**: Receives messages from external systems, integrations, and plugins.

### Intermediate events
* **Message Throw Event**: Throws a message and continues with the process flow.
* **Message Catch Event - Interrupting**: Waits for a message before continuing with the process flow.
* **Message Catch Event - Non-Interrupting**: Waits for a message before continuing with the process flow.
* **Timer Event - Interrupting**: Triggers based on a specific time duration, date, or cycle. Can also be used as a boundary event.
* **Timer Event - Non-Interrupting**: Triggers based on a specific time duration, date, or cycle. Can also be used as a boundary event.

#### Boundary events
Boundary events attach to the boundary of specific nodes (e.g., User Task, Service Task, Subprocess, or Call Activity) and are triggered when predefined conditions occur. These events can interrupt the ongoing activity or allow it to continue while starting a parallel flow. They include:
* **Message Catch Event - Interrupting**: Waits for and responds to a specific incoming message during a task.
* **Message Catch Event - Non-Interrupting**: Waits for and responds to a specific incoming message during a task.
* **Timer Event - Interrupting**: Activates based on elapsed time, a specific date, or a recurring cycle, useful for timeouts or deadlines.
* **Timer Event - Non-Interrupting**: Activates based on elapsed time, a specific date, or a recurring cycle, useful for timeouts or deadlines.
* **Error Event - Interrupting**: This event catches errors during a task or subprocess and redirects the process flow to handle them appropriately.

### Compatibility matrix
Boundary events can attach to the following node types:
* **User Task**: All boundary event types supported
* **Service Task**: Supports Message Catch Event - Interrupting, Timer Event - Interrupting, and Error Event - Interrupting boundary events.
* **Send Message/Receive Message Tasks**: Supports Message Catch Event - Interrupting, Timer Event - Interrupting, and Error Event - Interrupting boundary events.
* **Start Embedded Subprocess**: Supports Message Catch Event - Interrupting, Timer Event - Interrupting, and Error Event - Interrupting boundary events.
* **Call Activity**: Supports Message Catch Event - Interrupting/Non-Interrupting, Timer Event - Interrupting/Non-Interrupting, and Error Event - Interrupting boundary events.
Boundary events are a critical element for creating resilient and adaptive processes, enabling efficient error handling, timeout management, and real-time interactions.
## Next steps
Now that you understand the different types of BPMN nodes available in FlowX.AI, you can start building your own processes. Each node type offers specific configuration options and capabilities that you'll explore as you design your workflows.
Start with simple processes using Start nodes, User Tasks, and End nodes before incorporating more complex elements like boundary events and subprocesses.
For hands-on guidance on creating and configuring nodes in your processes, see:
[Managing a process flow](../../flowx-designer/managing-a-project-flow/adding-a-new-node)
For comprehensive insights into BPMN and its various node types, explore our course at FlowX Academy:
* What's BPMN (Business Process Model Notation) and how does it work?
* How is BPMN used in FlowX?
# Parallel gateway
Source: https://docs.flowx.ai/5.1/docs/building-blocks/node/parallel-gateway
When you have multiple operations that can be executed concurrently, the Parallel Gateway becomes a valuable tool. This type of node creates a parallel section within the process, particularly useful for tasks that can run independently without waiting for each other. It's essential to close each parallel section with another Parallel Gateway node.
## Configuring parallel paths

This node requires no special configuration and can initiate two or more parallel paths. It's important to note that the closing Parallel node, which is required to conclude the parallel section, will wait for all branches to complete before advancing to the next node.

### Configuration example
Let's consider a scenario involving a Paid Time Off (PTO) request. We have two distinct flows: one for the HR department and another for the manager. Initially, two tokens are generated—one for each parallel path. A third token is created when both parallel paths converge at the closing parallel gateway.
In the HR flow, in our example, the request is automatically approved.

Now, we await the second flow, which requires user input.

After the tokens from the parallel paths have completed their execution, a third token initiates from the closing parallel gateway.
# Start/end nodes
Source: https://docs.flowx.ai/5.1/docs/building-blocks/node/start-end-node
Let's go through all the options for configuring start and end nodes for a process definition.
## Start node
The start node represents the beginning of a process and it is mandatory to add one when creating a process.

A process can have one or more start nodes. If you defined multiple start nodes, each should have a start condition value configured. When starting a new process instance the desired start condition should be used.

### Configuring a start node
Node configuration is done by accessing the **Node Config** tab. You have the following configuration options for a **start node**:
* [General Config](#general-config)
* [Start condition](#start-condition)
#### General Config
* **Node name** - the name of the node
* **Can go back** - switching this option to true will allow users to return to this step after completing it
When encountering a step with `canGoBack` switched to false, all steps found behind it will become unavailable.
* [**Swimlane**](../../platform-deep-dive/user-roles-management/swimlanes) - choose a swimlane (if there are multiple swimlanes on the process) to make sure only certain user roles have access to certain process nodes- if there are no multiple swimlanes, the value is **Default**
* [**Stage**](../../platform-deep-dive/core-extensions/task-management/using-stages)- assign a stage to the node
#### Start condition
The start condition should be set as a string value. This string value will need to be set on the payload for the start process request on the `startCondition` key.

To test the start condition, we can send a start request via REST:
```
POST {{processUrl}}/api/process/{{processName}}/start
{
"startCondition": "PF"
}
```
#### Error handling on start condition
If a request is made to start a process with a start condition that does not match any start node, an error will be generated. Let's take the previous example and assume we send an incorrect value for the start condition:
```
POST {{processUrl}}/api/process/{{processName}}/start
{
"startCondition": "PJ"
}
```
A response with the error code `bad request` and title `Start node for process definition not found`will be sent in this case:
```json theme={"system"}
{
"entityName": "ai.flowx.process.definition.domain.NodeDefinition",
"defaultMessage": "Start node for process definition not found.",
"errorKey": "error.validation.process_instance.start_node_for_process_def_missing",
"type": "https://www.jhipster.tech/problem/problem-with-message",
"title": "Start node for process definition not found.",
"status": 400,
"message": "error.validation.process_instance.start_node_for_process_def_missing",
"params": "ai.flowx.process.definition.domain.NodeDefinition"
}
```
## End node

An end node is used to mark where the process finishes. When the process reaches this node, the process is considered completed and its status will be set to `Finished`.
### Configuring an end node
Multiple end nodes can be used to show different end states. The configuration is similar to the start node.

# Service Task node
Source: https://docs.flowx.ai/5.1/docs/building-blocks/node/task-node
A service task node refers to a task that utilizes various services, such as Web services, automated applications, or other similar services, to accomplish a particular task.

This type of node finds application in multiple scenarios, including:
* Executing a [**business rule**](../actions/business-rule-action/) on the process instance data
* Initiating a [**subprocess**](../actions/start-subprocess-action)
* Transferring data from a subprocess to the parent process
* Transmitting data to frontend applications
## Configuring task nodes
One or more actions can be configured on a task node. The actions are executed in the configured order.
Node configuration is done by accessing the **Node Config** tab. You have the following configuration options for a task node:
#### General Config
* **Node name**: The name of the node.
* **Can go back**: Allows users to return to a previous step after completing current step.

#### Data stream topics
* **From Workflow**: Select a workflow from the dropdown list.

* **Custom**: The topic name where the [process engine](../../platform-deep-dive/core-components/flowx-engine) listens for the response (this should be added to the platform and match the topic naming rule for the engine to listen to it) - available for UPDATES topics (Kafka receive events)
* **Key Name**: Will hold the result received from the external system, if the key already exists in the process values, it will be overwritten
#### Task Management
* **Update task management**: Force the Task Management Plugin to update the information after this node. Update the Base URL, title, stage, priority, or business filters using business rules.
#### Data Search
* **Update data search**: Send updates to the Data Search service after this node, allowing you retrieve data from various process instances.

## Configuring task nodes actions
Multiple options are available when configuring an action on a task node. To configure and add an action to a node, use the **Actions** tab at the node level, which has the following configuration options:
* [Action Edit](#action-edit)
* [Parameters](#parameters)
#### Action Edit
Depending on the type of the [**action**](../actions/actions), different properties are available, let's take a [**business rule**](../actions/business-rule-action/business-rule-action) as an example.
1. **Name**: Used internally to differentiate between different actions on nodes in the process. We recommend defining an action naming standard to be able to quickly find the process actions.
2. **Action type**: Defines the appropriate action type
3. **Trigger**:
* **Manual**: manually (triggered by the user)
* **If switched off**: triggered automatically (when the process flow reaches this step)
4. **Execution**:
* **Optional**: the action is optional
* **If switched off**: the action is mandatory
5. **Navigation**:
* **Allow back to this action**: When turned on, the action can be executed again when the token returned from a downstream node (can be switched on only if the trigger type is **Manual**).

#### Parameters
Depending on the type of the [**action**](../actions/actions), different properties are available. We refer to a **Business rule** as an example
1. **Business Rules** - business rules can be attached to a node by using actions with action rules on them, these can be specified using [DMN rules](../actions/business-rule-action/dmn-business-rule-action), [MVEL](../../platform-overview/frameworks-and-standards/business-process-industry-standards/intro-to-mvel) expressions, or scripts written in Javascript, Python, or Groovy.
### Business Rule action
A [business rule](../actions/business-rule-action/business-rule-action) is a Task action that allows a script to run. For now, the following script languages are supported:
* [**MVEL**](../../platform-overview/frameworks-and-standards/business-process-industry-standards/intro-to-mvel)
* **JavaScript**
* **Python**
* **Groovy**
For more details about node actions, check the following section:
# Timer boundary event
Source: https://docs.flowx.ai/5.1/docs/building-blocks/node/timer-events/timer-boundary-event
A Timer Boundary Event in Business Process Model and Notation (BPMN) is a specialized event attached to a specific task or subprocess within a process. It activates when a predefined time condition—such as a duration, deadline, or specific date—is met while the associated task or subprocess is still in progress.
This event is used to integrate time-related triggers into workflows, allowing processes to respond automatically to time-sensitive requirements. It is particularly useful for enforcing deadlines, scheduling periodic actions, or sending notifications, ensuring that time-critical steps are seamlessly incorporated into the overall process design.ary Events are utilized to incorporate time-related conditions into processes, enabling actions to be taken at specified time intervals, deadlines, or specific dates. This capability is especially valuable for scenarios where time-sensitive actions or notifications need to be integrated seamlessly within process flows.
### Compatibility matrix for Timer Events
**Timer Events** can be applied to various contexts within BPMN processes. The table below outlines their compatibility with different node types:
| **Node Type** | **Timer Event - Interrupting** | **Timer Event - Non-Interrupting** |
| ----------------------------- | ------------------------------ | ---------------------------------- |
| **User Task** | Yes | Yes |
| **Service Task** | Yes | Yes |
| **Send Message Task** | Yes | Yes |
| **Receive Message Task** | Yes | Yes |
| **Start Embedded Subprocess** | No | No |
| **Call Activity** | Yes | Yes |
## Timer boundary event - interrupting
A Timer Boundary Event is an event attached to a specific activity (task or subprocess) that is triggered when a specified time duration or date is reached. It can interrupt the ongoing activity and initiate a transition.

### Configuration
For Timer Boundary Events - Interrupting, the following values can be configured:
| Field | Validations | Accepted Values |
| ---------- | ----------- | -------------------------------- |
| Definition | Mandatory | ISO 8601 formats (date/duration) |
| | | Process param |

### General rules
* When the token enters the parent activity, a scheduler is set, and it waits for the timer event to be triggered.
* When the timer is triggered, the ongoing activity is terminated, and the process continues with the defined transition.
## Timer boundary event - non-interrupting
A Timer Boundary Event is an event attached to a specific activity (task or subprocess) that is triggered when a specified time duration or date is reached. It can trigger independently of the ongoing activity and initiate a parallel path.

### Configuration
For Timer Boundary Events - Non-Interrupting, the following values can be configured:
| Field | Validations | Accepted Values |
| ---------- | ----------- | -------------------------------- |
| Definition | Mandatory | ISO 8601 formats (date/duration) |
| | | Process param |
### General rules
* When a token arrives at a node with a Timer Boundary Event - Non-Interrupting associated:
* A trigger is scheduled, but the current token execution remains unaffected.
* When the token enters the parent activity, a scheduler is set, and it waits for the timer event to be triggered.
* If the timer is a cycle, it is rescheduled for the specified number of repetitions.
* The scheduler is canceled if the token leaves the activity before it is triggered.
# Timer events
Source: https://docs.flowx.ai/5.1/docs/building-blocks/node/timer-events/timer-events
Timer event nodes are a powerful feature in BPMN that allow you to introduce time-based behavior into your processes. These nodes enable you to trigger specific actions or events at predefined time intervals, durations, or cycles. With timer event nodes, you can design processes that respond to time-related conditions, ensuring smoother workflow execution and enhanced automation.
There are three primary types of timer event nodes:
* **Timer Start Event (interrupting/non-interrupting)**: This node initiates a process instance at a scheduled time, either interrupting or non-interrupting ongoing processes. It allows you to set a specific date, duration, or cycle for the process to start. You can configure it to trigger a process instance just once or repeatedly.
* **Timer Intermediate Event** (interrupting): This node introduces time-based triggers within a process. It's used to pause the process execution until a specified time duration or date is reached. Once triggered, the process continues its execution.
* **Timer Boundary Event (interrupting/non-interrupting)**: Attached to a task or subprocess, this node monitors the passage of time while the task is being executed. When the predefined time condition is met, the boundary event triggers an associated action, interrupting or non-interrupting the ongoing task or subprocess.

## Timers
Timers introduce the ability to trigger events at specific time intervals. They can be configured in three different ways: as a date, a duration, or a cycle. These configurations can use static values or dynamic/computed values.
* **Date**: Events triggered on a specific date and time.
* Format: ISO 8601 (e.g., `2019-10-01T12:00:00Z` or `2019-10-02T08:09:40+02:00`)
* **Time Duration**: Events triggered after a specified duration.
* Format: ISO 8601 duration expression (`P(n)Y(n)M(n)DT(n)H(n)M(n)S`)
* P: Duration designator
* Y: Years
* M: Months
* D: Days
* T: Time designator
* H: Hours
* M: Minutes
* S: Seconds
Examples:
* `PT15S` - 15 seconds
* `PT1H30M` - 1 hour and 30 minutes
* `P14D` - 14 days
* `P3Y6M4DT12H30M5S` - 3 years, 6 months, 4 days, 12 hours, 30 minutes, and 5 seconds

* **Time Cycle** (available for Timer Start Event): Events triggered at repeating intervals.
* Option 1: ISO 8601 repeating intervals format (`R`)
* Examples:
* `R5/2023-08-29T15:30:00Z/PT2H`: Every 2 hours seconds, up to five times, starting with 29 August, 15:30 UTC time
* `R/P1D`: Every day, infinitely

* Option 2: Using cron expressions
* Example: `0 0 9-17 * * MON-FRI`: Every hour on the hour from 9 a.m. to 5 p.m. UTC, Monday to Friday
Important: Only Spring cron expressions are permissible for configuration. Refer to the [**official documentation**](https://docs.spring.io/spring-framework/4.0/docs/current/javadoc-api/org/springframework/scheduling/support/CronExpression.html) for detailed information on configuring Spring Cron expressions.
Scheduled timer events are clearly indicated within the process definition list of an application at Runtime, as illustrated in the following example:

More information about timer expressions you can find in the below section:
[Timer expressions](./timer-expressions)
## Configuration
For each node type, the following timer types can be configured:
| Node Type | Date | Duration | Cycle |
| ------------------------ | ---- | -------- | ----- |
| Timer Start Event | Yes | No | Yes |
| Timer Intermediate Event | Yes | Yes | No |
| Timer Boundary Event | Yes | Yes | No |
A process definition version should have a single Timer Start Event per swmilane.
For comprehensive details on each timer event node in this section, please refer to the corresponding documentation:
# Timer expressions
Source: https://docs.flowx.ai/5.1/docs/building-blocks/node/timer-events/timer-expressions
When working with FlowX.AI components, there are multiple scenarios in which timer expressions are needed.
There are two timer expressions formats supported:
* [**Cron expressions**](#cron-expressions) - used to define the expiry date on processes
* [**ISO 8601**](#iso-8601) - used to define the duration of a response timeout or for a timer expression
### Cron expressions
A cron expression is a string made up of **six mandatory subexpressions (fields) that each specifies an aspect of the schedule** (for example, `* * * * * *`). These fields, separated by white space, can contain any of the allowed values with various combinations of the allowed characters for that field.
A field may be an asterisk (`*`), which always stands for “first-last”. For the day-of-the-month or day-of-the-week fields, a question mark (`?`) may be used instead of an asterisk.
Important: Only Spring cron expressions are permissible for configuration. Refer to the [**official documentation**](https://docs.spring.io/spring-framework/reference/integration/scheduling.html#scheduling-cron-expression) for detailed information on configuring Spring Cron expressions.
Subexpressions:
1. Seconds
2. Minutes
3. Hours
4. Day-of-Month
5. Month
6. Day-of-Week
7. Year (optional field)
An example of a complete cron-expression is the string `0 0 12 ? * FRI` - which means **every Friday at 12:00:00 PM**.
More details:
[Scheduling cron expressions](https://docs.spring.io/spring-framework/docs/current/reference/html/integration.html#scheduling-cron-expression)
#### Cron Expressions are used in the following example:
* [**Process definition**](../../../building-blocks/process/process-definition) - **Expiry time** - a user can set up a `expiryTime` function on a process, for example, a delay of 30s will be set up like:

### ISO 8601
ISO 8601 is an international standard covering the worldwide exchange and communication of date and time-related data. It can be used to standardize the following: dates, time of delay, time intervals, recurring time intervals, etc.
More details:
[ISO 8601 date format](https://www.digi.com/resources/documentation/digidocs/90001488-13/reference/r_iso_8601_date_format.htm)
[ISO 8601 duration format](https://www.digi.com/resources/documentation/digidocs//90001488-13/reference/r_iso_8601_duration_format.htm)
#### ISO 8601 format is used in the following examples:
* **Node config** - **Response Timeout** - can be triggered if, for example, a topic that you define and add in the **Data stream topics** tab does not respect the pattern
ISO 8601 dates and times:
| Format accepted | Value ranges |
| -------------------- | -------------------------------------------- |
| Year (Y) | YYYY, four-digit, abbreviatted to two-digit |
| Month (M) | MM, 01 to 12 |
| Week (W) | WW, 01 to 53 |
| Day (D) | D, day of the week, 1 to 7 |
| Hour (h) | hh, 00 to 23, 24:00:00 as the end time |
| Minute (m) | mm, 00 to 59 |
| Second (s) | ss, 00 to 59 |
| Decimal fraction (f) | Fractions of seconds, any degree of accuracy |

* [**Actions**](../../actions/actions) - **Timer expression** - it can be used if a delay is required on that action

# Timer Intermediate Event (interrupting)
Source: https://docs.flowx.ai/5.1/docs/building-blocks/node/timer-events/timer-intermediate-event
A Timer Intermediate Event (interrupting) is an event that is triggered based on a specified time duration or date. It is placed within the flow of a process and serves as a point of interruption and continuation.

## Configuring a timer intermediate event (interrupting)
| Field | Validations | Accepted Values |
| ---------- | ----------- | -------------------------------- |
| Definition | Mandatory | ISO 8601 formats (date/duration) |
| | | Process param |

### Timer type:
#### Date
* event triggered on a specific date-time
* ISO 8601 format (example: `2019-10-01T12:00:00Z` - UTC time, `2019-10-02T08:09:40+02:00`- UTC plus two hours zone offset)

#### Duration
Event triggered after x duration after the token reached the timer node (or parent node) (example: `PT6S`).
* Definition:
* ISO
* Cron
* Process param
## General Rules
* A Timer Intermediate Event is triggered based on its duration or date definition.
* When the token enters a Timer Intermediate Event, a scheduler is set, and it waits for the timer event to be triggered.
* After the timer is triggered, the process instance continues.
# Timer start event (interrupting)
Source: https://docs.flowx.ai/5.1/docs/building-blocks/node/timer-events/timer-start-event
A Timer Start Event initiates a process instance based on a specified time or schedule.

Please note that a process definition version can accommodate only one **Timer Start Event**.
## Configuration
The Timer Start Event supports two timer types:
| Timer Type | Description |
| ---------- | ------------------------------------------------------------------------------------- |
| Date | Specifies an exact date and time for triggering the event (ISO 8601 format) |
| Cycle | Specifies a repeating interval using ISO 8601 repeating intervals or cron expressions |
The Start Timer Event supports either ISO 8601 formats or Spring cron expressions for defining timer values.
Starting a process via registered timers requires sending a process start message to Kafka, necessitating a service account and authentication. For detailed guidance, refer to:
[**Service Accounts**](../../../../setup-guides/access-management/configuring-an-iam-solution#scheduler-service-account)
## Timer type details
### Date
Specifies an exact date and time for triggering the event. You can use ISO 8601 date format for accurate date-time representation.
When configuring a Date timer, you can set:
* **Date**: Select a specific date (format: yyyy-mm-dd) using the date picker
* **Time**: Set the specific time when the timer should trigger

### Cycle
Specifies a repeating interval for triggering the event. For the Cycle timer definition, you can use either:
#### ISO 8601 repeating intervals
For standardized time intervals (e.g., "R5/PT10M" for repeating 5 times with 10 minutes between each)

When configuring a Cycle timer (ISO 8601 repeating intervals) you can set:
* **Repeat Every**: The interval between triggers (e.g., "2 hours")
* **# of repeats**: How many times the timer should trigger (e.g., "3")
* **Infinite**: Option to make the timer repeat indefinitely
* **Start Time**: When the timer should begin (format: yyyy-mm-dd)
#### Cron expressions
For more complex scheduling patterns (e.g., "0 0 12 \* \* MON-FRI" for 12pm every weekday)

## Activate/deactivate start timer events
All timers can be activated/deactivated in the Runtime section under "Scheduled Processes":

If a project contains multiple versions with Start Timer Event nodes, a scheduler will be generated only for the ones included in the version set in the active policy.

## Usage examples
### Date timer example: Employee Onboarding Reminder
In this scenario, the Timer Start Event triggers an employee onboarding process at a specific date and time.

* Start Event (Timer Start Event) - New Hire Start Date
* Timer Definition: 2023-09-01T09:00:00Z (ISO 8601 format) → This means the process will initiate automatically at the specified date and time.
* This event serves as the trigger for the entire process.
* Transition → Employee Onboarding Notification

* Employee Onboarding Notification
* Notify new employee about onboarding requirements by sending an email notification with a template called "Important Onboarding Information"
* Actions: The HR team or automated system sends out necessary email information/documents, and instructions to the new employee.
* After the notification is sent, the process transitions to the Complete Onboarding node.

* Complete Onboarding
* Employee onboarding completed
* At this point, the employee's onboarding process is considered complete.
* Actions: The employee may have completed required tasks, paperwork, or orientation sessions.
### General rules
* Schedulers are generated only for builds that are part of the active policy.
* If you change the active policy, processes with Timer Start Event nodes might appear or disappear from the scheduled processes list if they aren't part of the active build.
* You can view scheduled processes in the Runtime section under "Scheduled Processes" (available since version 4.6.0).
* When a build in the active policy is updated with new Timer Start Event settings:
* The scheduler is updated based on the new settings.
* The scheduler state (active or suspended) remains the same as before.
# User task node
Source: https://docs.flowx.ai/5.1/docs/building-blocks/node/user-task-node
This node represents an interaction with the user. It is used to display a piece of UI (defined in the UI Designer or a custom Angular component. You can also define actions available for the users to interact with the process.
## Configuring a user task node

User task nodes allow you to define and configure UI templates and possible [actions](../actions/actions) for a certain template config node (ex: [button components](../ui-designer/ui-component-types/buttons)).
#### General Config
* **Node name** - the name of the node
* **Can go back** - setting this to true will allow users to return to this step after completing it. When encountering a step with `canGoBack` false, all steps found behind it will become unavailable.
* [**Stage**](../../platform-deep-dive/core-extensions/task-management/using-stages)- assign a stage to the node

When encountering a step with `canGoBack` switched to false, all steps found behind it will become unavailable.
#### Data stream topics
* **Topic Name** - the topic name where the process engine listens for the response (this should be added to the platform and match the topic naming rule for the engine to listen to it) - available for UPDATES topics (Kafka receive events)
A naming pattern must be defined on the [process engine configuration](../../../setup-guides/flowx-engine-setup-guide/engine-setup#configuring-kafka) to use the defined topics. It is important to know that all the events that start with a configured pattern will be consumed by the Engine. For example, `KAFKA_TOPIC_PATTERN` is the topic name pattern where the Engine listens for incoming Kafka events.
* **Key Name** - will hold the result received from the external system, if the key already exists in the process values, it will be overwritten
#### Task Management
* **Update task management** - force [Task Management](../../platform-deep-dive/core-extensions/task-management/task-management-overview) plugin to update information about this process after this node

## Configuring the UI
The **FlowX.AI Designer** includes an intuitive [UI Designer](../ui-designer/ui-designer) (drag-and-drop editor) for creating diverse UI templates. You can use various elements from basic [buttons](../ui-designer/ui-component-types/buttons), indicators, and [forms](../ui-designer/ui-component-types/form-elements/), but also predefined [collections](../ui-designer/ui-component-types/collection/collection) or [prototypes](../ui-designer/ui-component-types/collection/collection-prototype).
### Accessing the UI Designer
To access the **UI Designer**, follow the next steps:
1. Open **FlowX.AI Designer** and from the **Processes** tab select **Definitions**.
2. Select a **process** from the process definitions list.
3. Click the **Edit** **process** button.
4. Select a **user task** **node** from the Process Designer then click the **brush** icon to open the **UI Designer**.

### Predefined components
UI can be defined using the available components provided by FlowX.AI, using the UI Designer available at node level.
Predefined components can be split in 3 categories:
These elements are used to group different types of components, each having a different purpose:
* [**Card**](../ui-designer/ui-component-types/root-components/card) - used to group and configure the layout for multiple **form elements.**
* [**Container**](../ui-designer/ui-component-types/root-components/container) - used to group and configure the layout for multiple **components** of any type.
* [**Custom**](../ui-designer/ui-component-types/root-components/custom) - these are Angular components developed in the container application and passed to the SDK at runtime, identified here by the component name
More details in the following section:
The root component can hold a hierarchical component structure.
Available children for **Card** and **Container** are:
* **Container** - used to group and align its children
* **Form** - used to group and align form field elements (**inputs**, **radios**, **checkboxes**, etc)
* **Image** - allows you to configure an image in the document
* **Text** - a simple text can be configured via this component, basic configuration is available
* **Hint** - multiple types of hints can be configured via this component
* **Link** - used to configure a hyperlink that opens in a new tab
* **Button** - Multiple options are available for configuration, the most important part being the possibility to add actions
* **File Upload** - A specific type of button that allows you to select a file
More details in the following section:
This type of elements are used to allow the user to input data, and can be added only in a **Form** Component. They have have multiple properties that can be managed.
1. [**Input**](../ui-designer/ui-component-types/form-elements/input-form-field) - FlowX.AI form element that allows you to generate an input form filed
2. [**Select**](../ui-designer/ui-component-types/form-elements/select-form-field) - to add a dropdown
3. [**Checkbox**](../ui-designer/ui-component-types/form-elements/checkbox-form-field) - the user can select zero or more input from a set of options
4. [**Radio**](../ui-designer/ui-component-types/form-elements/radio-form-field) - the user is required to select one and only one input from a set of options
5. [**Datepicker**](../ui-designer/ui-component-types/form-elements/datepicker-form-field) - to select a date from a calendar picker
6. [**Switch**](../ui-designer/ui-component-types/form-elements/switch-form-field) - allows the user to toggle an option on or off
More details in the following section:
### Custom components
These are components developed in the web application and referenced here by component identifier. This will dictate where the component is displayed in the component hierarchy and what actions are available for the component.
To add a custom component in the template config tree, we need to know its unique identifier and the data it should receive from the process model.
More details in the following section:
# Data mappers
Source: https://docs.flowx.ai/5.1/docs/building-blocks/process/data-mappers
Visually map data transfers between components while maintaining full backward compatibility.
## Overview
Use Data Mappers to define how data flows between components. Add JavaScript transformations for complex scenarios.
### Key concepts
Send data to another component to trigger execution
* Parent processes
* Integration flows
* Business rules
Receive input from a source component to execute
* Subprocesses
* Workflows
* Business rules
### Parameters & variables
Configure parameters and variables on the **Data Model** tab at process level.
**Input Parameters**: Define the structure your component expects to receive for successful execution.
**Input Variables**: Send actual data from source to destination component for execution.

**Output Parameters**: Define the structure your component returns to the source component after execution.
**Output Variables**: Return actual data from destination to source component after execution.

#### Parameter types by origin
Established before the mapping action (e.g., input of a subprocess or workflow). These typically belong to **destination components** with fixed requirements.
Defined during the mapping process. Associated with **source components** that specify where destination component data comes from.
## Prerequisites
Plan your Data Model carefully before implementing Data Mappers. Proper setup ensures success.
### Data Model hierarchy
Understand the data model hierarchy to implement Data Mappers effectively:
**Organization Level**: Define reusable data structures (e.g., "customer", "client type") that you can share across all processes and workflows within your project.
**Enterprise Level**: Create organization-wide standardized data types that you can reuse across multiple projects by including the library as a dependency.
**Process Level**: Define process-specific data structures while leveraging reusable components from project and library levels.
### Setup requirements
**Critical**: Define your project data model before creating processes. This enables:
* Reusability across processes and workflows
* Consistent data structures
* Improved error prevention
* Enhanced mapping experience
Add meaningful example values to your data model attributes. This helps you:
* Visualize attribute meaning and expected values
* Test without separate mock data
* Improve your configuration experience
Design data structures that can be shared across multiple components:
* Customer information structures
* Common business entities
* Standardized response formats
## Configuration
### Setting up process parameters
* Open the process you want to configure
* Navigate to the **Data Model**
* Select the **Input parameters** tab and click "Define parameters"

Define parameters for each start node separately when you have multiple start nodes. Select nodes from the dropdown.

* Define the schema based on the process's Data Model
* Mark fields as optional if your component can function without those parameters. The optional flag indicates your component can operate without these parameters throughout its entire operation, not just during mapping.
* **Note**: This centralizes input definition at the subprocess level, replacing the previous "data to send" configuration on the parent process

* Navigate to the **Data Model**
* Select the **Output parameters** tab
* Define the schema based on the process's Data Model

* View all start or end nodes when your subprocess has multiple nodes
* Use this for scenarios with exclusive gateways
* Configure parameters independently for each node
**Process Start Prompts**: When you start a process with defined input parameters, the system generates input prompts based on required parameters to help with testing and validation.
## Mapping scenarios
### Call activity mapping
#### Synchronous call activity
```yaml Prerequisites theme={"system"}
- Parent process with defined Data Model
- Child process with input/output parameters on Data Model
- Project-level data model for reusable structures
```
```yaml Configuration Steps theme={"system"}
1. Define call-activity type node
2. Select subprocess to be called
3. Choose Data Mapper implementation (default)
4. Configure input/output mapping
5. Test mapping with example values
6. Save configuration
```
* In a process, define a **call-activity** type node
* Select the subprocess to be called
* **Data Mapping is now the default option**
* Toggle to "Switch to legacy mapping" if needed for backward compatibility
The new Data Mapping functionality is now the default option, while legacy mapping remains accessible via a toggle for backward compatibility.

Existing actions that were configured before this update automatically retain legacy mapping—there is no need for you to modify them unless you want to switch to the new Data Mapping.

* View the subprocess's input parameters
* Click the "key icon" next to the parameter

* **Source Component**: Current process (parent)
* **Destination Component**: Subprocess input parameters
* **Mapping Options**:
* **Individual Mapping**: Map each attribute individually using interpolation syntax: `${variableName}`
* **Auto-populate Mapping**: Select the data model types from dropdown for automatic mapping of all attributes
* **Quick Mapping**: If source and destination have the same data type, use dropdown for automatic mapping of all attributes
**Auto-populate Feature**: Instead of manually typing variable paths, select your data model types from the dropdown and the system will automatically populate all the mappings for you.


* **Display Options**: You can view variables as schema or JSON format for better visualization
* **Variable Format**: When mapping manually, use interpolation syntax `${variableName}` - this format differs from process keys
* **Testing**: Click the "test" button to visualize the JSON payload using example values from your data model

* Select the **Output** tab
* View subprocess's output parameters
* Select attributes in parent process data model for storing output
* Map subprocess output parameters (source) to parent process parameters (destination)

**JavaScript Transformation**:
To access JavaScript transformations, click the **function icon** next to the variable you want to transform.
* **Use JavaScript functions** for data transformation and combination
* **Syntax Requirements**: All computed values must use `return` statements
* **Example**: `return ${userVerification.status} + " on " + ${userVerification.verificationDate}`

**Data Reference Syntax**:
* **Dynamic values**: Use `${variableName}` syntax to reference dynamic values (same as used for variable mapping)
* **Example**: `return ${approverName} + " approved on " + ${date}`
**Testing and Persistence**:
* **Testing**: Use test button to see transformed output with example values
* **Value Persistence**: Previous values are saved until you click "confirmation" and "save"
* **Error Handling**: JavaScript errors trigger when functions encounter issues (e.g., reading property from undefined object)
**Type Handling**:
* System sends configured data even with type mismatches (e.g., string to number)
* Always validate your transformations before saving
Save the mapping configuration for both input and output
#### Asynchronous call activity
For async nodes, output cannot be mapped as the parent process doesn't wait for completion.
* Define **call-activity** node or **Start Subprocess** action on User Task
* Select subprocess to be called
* Check the **Run async** toggle
* Choose Data Mapper implementation
* Map input parameters from parent process (source) to subprocess (destination)
* Save input mapping configuration
## Testing and validation
### Testing methodology
* Leverage example values from your data model for testing
* No need for separate mock data
* Values automatically populate in test scenarios
* **Auto-populate benefit**: Example values help visualize attribute meaning and expected data
* Click "test" button to visualize JSON payload
* See exactly what data will be sent to destination component
* Verify transformations work as expected
* **Display formats**: View results as schema or JSON for better understanding
* Verify interpolation syntax `${variableName}` is correctly formatted
* Test both manual mappings and auto-populated ones
* Ensure data type compatibility between source and destination
The interpolation format `${variableName}` used in Data Mappers differs from process key formats. Pay attention to this when manually entering variable paths.
* Use information from previous sessions in testing
* Validate real-world scenarios
* Ensure data flows correctly end-to-end
* When testing data coming from subprocesses, you need to check for the UUID instance of the subprocess and copy paste it in the instance field of the test data, as shown in the demo below:
### JavaScript transformation testing
* All computed values must include `return` statements
* Use clear parameter notation (e.g., `userVerification.status`)
* Functions must handle potential undefined values
* System sends data even with type mismatches
* JavaScript errors trigger for undefined object property access
* Test transformations thoroughly before deployment
* Previous values are saved during configuration
* Only lost upon clicking "confirmation" and "save"
* Allows iterative testing and refinement
## Managing parameter changes
Different types of parameter changes require different handling - some propagate automatically while others need manual updates.
### Automatic propagation
These changes propagate automatically to input/output parameters and mappings:
**Automatic removal**: When you delete an attribute from the data model, it disappears from input/output parameters and mappings
**Automatic update**: When you rename an attribute in the data model, the change reflects in input/output parameters and mappings
### Manual intervention required
**Manual addition**: When you add new attributes to the data model, you must manually:
1. Add them to input/output parameters
2. Configure them in the data mapper
### Data Model propagation timing
Propagation speed varies by data model type:
When you don't alter data type structure (e.g., adding attributes or changing types), updates propagate as follows:
* **Project data model**: Immediately
* **Library data model**: After the dependency build is updated
### Best practices for parameter changes
Always test your mappings after any data model changes to ensure they function correctly.
## Use cases
Configure data mappers for these scenarios:
Mappings can be configured whether the subprocess is triggered from:
* **Call Activity node**: Direct subprocess invocation within process flow
* **User Task node**: Subprocess triggered by user interaction
Both scenarios support full input and output parameter mapping capabilities.
Data mappers handle different subprocess execution patterns:
* **Synchronous execution**: Parent process waits for completion, enabling both input and output mapping
* **Asynchronous execution**: Parent process continues without waiting, supporting input mapping only
* **Single instance**: One subprocess instance per trigger
* **Multiple instances**: Multiple subprocess instances from the same trigger
When integrating a pre-defined reusable UI template into a User Task node:
* Map data from parent process to template input parameters
* Configure template output to flow back to parent process
* Enable consistent UI behavior across multiple processes
## Real-world examples
### Example 1: Monthly income collection
**Scenario**: A subprocess collects monthly income information from users and passes it back to the parent process.
* **UI Behavior**: Modal appears asking user to select currency and enter income amount
* **Data Collection**: User enters monthly income value
* **Requirement**: Pass collected data back to parent process
**In the subprocess**:
* Add `monthlyIncome` variable to the data model
* Navigate to **Output Parameters** tab
* Define `monthlyIncome` as an output parameter
**In the parent process**:
* Initially no input parameters needed (not sending data to subprocess)
* Focus on receiving output data
* Open the **call activity** node in parent process
* Navigate to **Input and Output Parameters** section
* **Output mapping**: Connect subprocess output to parent process variable
**Variable format**: Use `${monthlyIncome}` (interpolation syntax)
**Auto-mapping shortcut**: Select data model types from dropdown to automatically populate mappings instead of manual entry.
* **Subprocess variable**: `monthlyIncome`
* **Parent process variable**: `incomePerMonth` (renamed for clarity)
* **Mapping**: `${monthlyIncome}` → `incomePerMonth`
* **Result**: Two distinct data models successfully connected
### Example 2: Time-off approval with JavaScript transformation
**Scenario**: A colleague submits a time-off request, requiring approval with enhanced data transformation.
* **Input data**: Start/end dates, requester information
* **UI Behavior**: Modal shows request details with approve/deny options
* **Output requirement**: Return approval status + approver name
* **Parent process sends**:
* Approver name
* Request details (start date, end date)
* **Subprocess receives**: Input parameters for display
**Configuration**: Parent process output parameters → Subprocess input parameters
**Goal**: Combine approval decision with approver identity
* Click the **function icon** next to the output variable
* **Script example**:
```javascript theme={"system"}
return ${approverName} + " approved on " + new Date().toISOString()
```
**Dynamic value syntax**:
* Use `${variableName}` to reference dynamic values: `${approverName}`
Always include `return` statements in JavaScript transformations.
* Click **test** button to preview transformed output
* Verify JavaScript logic with example data
* **Result**: Enriched data flows back to parent process
**Key Takeaway**: Data Mappers enable not just data transfer, but also data enrichment and transformation through JavaScript, making them powerful tools for complex business workflows.
## Best practices
Establish project and library data models before creating processes for maximum reusability
Include meaningful example values in data models to improve testing and configuration experience
Design data structures that can be shared across multiple components and processes
Validate mappings and transformations with various data scenarios before deployment
Note any dependencies between mapped parameters and transformation logic
Use quick mapping for components with identical data types to speed up configuration
## FAQs
**It depends on the change type**:
* **Deleted attributes**: Automatically removed from mappings
* **Renamed attributes**: Automatically updated in mappings
* **New attributes**: You must manually add and configure them
Always test your mappings after making parameter changes to ensure they still function correctly.
When you start a subprocess using Data Mappers:
* **No need to configure "Append Data to Parent Process" action** in the subprocess anymore
* For **synchronous subprocesses**: Output automatically flows back to parent process
* For **asynchronous subprocesses**: You can configure input mapping, and the subprocess can append data back to the parent process asynchronously
You can define input and output parameters for each end node separately:
* Navigate to **Data Model** → **Input/Output Parameters**
* Select the specific node from the dropdown
* Configure parameters independently for each end node
Use this for processes with exclusive gateways where different entry points need different data structures.
**Known limitation**: When you send a currency variable with amount and code as input, the system doesn't transmit the code because inputs don't collect the code from currency fields.
**Solutions**:
* Set the code as optional in the output parameters, OR
* Gather the code separately using a segmented button or other input method
Handle this properly to avoid mapping errors.
## Current limitations
Current limitations to be aware of:
* **Array to Object Mapping**: Cannot map array → object for scenarios when you edit or add an item in a collection *(estimated fix: 5.X Feature)*
* **Currency Code Transmission**: When mapping currency variables as input, only the amount is sent - the currency code is not transmitted
* **Workaround Required**: Either make code optional in output parameters or collect currency code through separate input methods
## Related documentation
Learn about call activity nodes and subprocess execution
Discover workflow automation and external system integration
Understand process data structure and management
# Process data model
Source: https://docs.flowx.ai/5.1/docs/building-blocks/process/data-model
The Data Model is a centralized configuration feature that enables efficient management of key-value attributes inside process definitions. It supports multiple attribute types, such as strings, numbers, booleans, objects, arrays, and enums, offering users the ability to define, update, delete, and apply data attributes seamlessly.

## Overview
The Data Model serves as the foundation for managing structured information throughout your process definitions. It provides a centralized approach to define, organize, and maintain the data attributes that drive your business processes and user interfaces.
### Attribute types
The Data Model supports the following attribute types:
* STRING
* NUMBER
* CURRENCY
* BOOLEAN
* OBJECT
* ARRAY
* ARRAY OF STRINGS
* ARRAY OF NUMBERS
* ARRAY OF BOOLEANS
* ARRAY OF OBJECTS
* ARRAY OF ENUMS
* ENUM
* DATE
#### Currency attribute
Currencies are managed using an object structure that ensures accurate representation and localization.

* **Currency Object Structure**:
* Includes `amount` (numerical value) and `code` (ISO 4217 currency code, e.g., USD, EUR).
* Example:
```json theme={"system"}
{
"amount": 12000.78,
"code": "USD"
}
```
* **Regional Formatting**:
* Currency values adapt to regional conventions for grouping, decimals, and symbol placement. For instance:
* **en-US (United States)**: `$12,000.78` (symbol before the value, comma for grouping, dot for decimals).
* **ro-RO (Romania)**: `12.000,78 RON` (dot for grouping, comma for decimals, code appended).
* **Fallback Behavior**: If the `code` is null, the system defaults to the locale's predefined currency settings.
* **UI Integration**:
* Currency input fields dynamically format values based on locale settings and save the `amount` and `code` into the data store.
* Sliders and other components follow the same behavior, formatting values and labels according to the locale.
Check this section for more details about l10n & i18n
#### Date attribute
Dates are represented in ISO 8601 format and dynamically formatted based on locale and application settings.

* **Locale-Specific Date Formats**: FlowX.AI dynamically applies regional date formatting rules based on the locale. For instance:
* **en-US (United States)**: `MM/DD/YYYY` → `09/28/2024`
* **fr-FR (France)**: `DD/MM/YYYY` → `28/09/2024`
* **Customizable Formats**: You can choose from predefined formats (e.g., short, medium, long, full) or define custom formats at both application and UI Designer levels.
* **Timezone Handling**:
* **Standard Date**: Adjusts to the current timezone.
* **Date Agnostic**: Ignores time zones, using GMT for consistent representation.
* **ISO 8601 Compliance**: Ensures compatibility with international standards.
Check this section for more details about l10n & i18n
#### Number attribute
The **Number** attribute type supports two subtypes: **integers** and **floating point numbers**, providing flexibility to represent whole numbers or decimal values as required.

* **Subtypes**
* **Integer**: Represents whole numbers without any fractional or decimal part.
* Example: `1, 42, 1000`
* **Floating Point**: Represents numbers with a decimal point, enabling precise storage and representation of fractional values.
* Example: `3.14, 0.01, -123.456`
* **Locale-Specific Formatting**:
* Numbers adapt to regional conventions for decimal separators and digit grouping. For example:
* **en-US (United States)**: `1,234.56` (comma for grouping, dot for decimals)
* **de-DE (Germany)**: `1.234,56` (dot for grouping, comma for decimals)
* **fr-FR (France)**: `1 234,56` (space for grouping, comma for decimals)
* **Precision Settings**:
* **Minimum Decimals**: Ensures a minimum number of decimal places are displayed, adding trailing zeros if necessary.
* **Maximum Decimals**: Limits the number of decimal places stored, rounding values to the defined precision.

These settings can be overriden at the application level or in the **UI Designer** for specific components.
* **Validation**:
* Enforce range constraints (e.g., minimum and maximum values).
* Input fields automatically apply formatting masks to prevent invalid data entry.
Check this section for more details about l10n & i18n
## Creating and managing a data model
In the Data Model, you can add new key-pair values, allowing seamless integration with the UI Designer. This functionality enables quick shortcuts for adding new keys without switching between menus.
**Key Naming Conventions**:
* Keys in the data model are case-sensitive. This means 'customerName' and 'CustomerName' would be treated as two distinct attributes.
* It's recommended to follow a consistent naming convention (such as camelCase) throughout your data model to avoid confusion.
* Special characters and spaces in keys should be avoided.
Example:
### Validation rules
You can define validation rules for your data model attributes to ensure data integrity throughout your processes:
* **Required Fields**: Mark attributes that must have values before a process can proceed
* **Range Validation**: Set minimum and maximum values for numeric attributes
* **Pattern Matching**: Define regular expression patterns for string validation
* **Custom Validation**: Implement custom validation logic using business rules
Validation rules can be defined at the data model level and enforced throughout UI components, business rules, and integration points, ensuring consistent data quality.
## Data model reference
The "View References" feature allows you to see where specific attributes are used within the data model. This includes:
* **Process Keys**: Lists all process keys linked to an attribute.
* **UI Elements**: Displays references such as the element label, node name, and UI Element key.

## Sensitive data
Protect sensitive information by flagging specific keys in the data model. This ensures data is hidden from process details and browser console outputs.
## Reporting
The **Use in Reporting** tag allows you to designate keys for use in the reporting plugin, enabling efficient tracking and analysis.

Learn more about how to use Data Model attributes in the Reporting plugin.
## Integration with other platform features
The Data Model serves as the backbone for numerous platform features, enabling seamless data flow between different components of your FlowX.AI application.
### Integration with UI Designer
The Data Model directly integrates with the UI Designer, allowing you to:
* Bind UI components to data model attributes
* Create dynamic UI layouts based on data model values
* Implement validation and formatting rules consistently across interfaces
### Integration with workflows
When designing workflows in the Integration Designer, you can leverage the Data Model to:
* Pass data from processes to workflows using the Start Integration Workflow action
* Map data between your process and external systems
* Transform and validate data during integration flows
Learn more about integrating Data Model with workflows
### Decision model integration
Data model attributes can be used as inputs for business rules, enabling:
* Complex business rule implementation using structured data
* Consistent data handling across decision points
## Best practices
### Structuring your data model
* **Use hierarchical structures**: Organize related data in nested objects to improve maintainability
* **Consistent naming**: Adopt a consistent naming convention for all attributes
* **Documentation**: Add clear descriptions for complex attributes to improve team understanding
* **Modularization**: Group related attributes into logical objects rather than using flat structures
### Version control and migration
When evolving your data model across versions:
* **Backwards compatibility**: Ensure changes don't break existing processes
* **Migration strategy**: Plan for how existing process instances will handle schema changes
* **Documentation**: Maintain clear documentation of data model changes between versions
## Troubleshooting
### Common issues
* **Missing data**: Ensure all required attributes are defined in your data model before referencing them
* **Type mismatches**: Verify that attributes are assigned the correct data type
* **Validation errors**: Check validation rules when data appears to be rejected
### Debugging tips
* Use the data model reference feature to track attribute usage
* Examine process instance data to verify attribute values
* Review UI component bindings to ensure proper data mapping
## Summary
The Data Model is a powerful feature that enables structured data management across your FlowX.AI applications. By following best practices for design, validation, and integration, you can build robust process applications with consistent data handling throughout all stages of your business processes.
# Navigation areas
Source: https://docs.flowx.ai/5.1/docs/building-blocks/process/navigation-areas
Navigation areas play a pivotal role in user interface design. They enhance the user experience by providing a structured, organized, and efficient way for users to interact with and explore various features and solutions.
Sequential workflow navigation with progress tracking. Maximum 2 levels supported.
Multi-section navigation. Must be root component on mobile platforms.
Full-screen content display with wizard or single-page form options.
Temporary overlay for focused tasks. Use sparingly on mobile.
Layout container with headers/footers. Web-only feature.
Subprocess hierarchy management and design organization.
In the navigation panel, the navigation hierarchy should be displayed beneath platform tabs, which include options for both web and mobile platforms. The default tab selected upon opening should be the web platform.
## User task requirements
**Critical Configuration Requirements**: All user tasks in your process must be included within navigation areas structure. It is a **misconfiguration** to have user tasks that are not associated with the navigation areas hierarchy.
**Key Requirements:**
* Every user task must be assigned to a navigation area
* User tasks cannot be left empty - they must contain UI elements
* All user tasks must be organized within the proper navigation hierarchy
Failing to follow these requirements will result in runtime errors and poor user experience.

## Platform-specific capabilities
### Web platform capabilities
* **Zone**: Used for organizing parts of screen with headers and footers
* **Zone/Page**: Supports wizard navigation and single-page form layouts
* **Tab Bar**: Optional placement and full navigation hierarchy support
* **Stepper**: Maximum 2 levels supported
* **Modal**: Full functionality with flexible usage patterns
* **Parent Process Area**: Complete subprocess design support
### Mobile platform capabilities
* **Tab Bar**: Must be positioned as first root navigation to define the entire application navigation structure
* **Stepper**: Maximum 2 levels supported
* **Modal**: Limited usage recommended (see recommendations below)
* **Parent Process Area**: Basic subprocess design support
* **Zone**: Not supported
* **Page**: Basic functionality only
### Platform support matrix
| Navigation Area | Web | Mobile | Platform-specific notes |
| ----------------------- | --- | ------ | -------------------------------------------------------------- |
| **Zone** | ✅ | ❌ | Web only - used for organizing parts of screen |
| **Tab Bar** | ✅ | ✅ | Mobile: must be first root navigation for entire app structure |
| **Page** | ✅ | ✅ | Web: wizard navigation/single-page form support |
| **Stepper** | ✅ | ✅ | Maximum 2 levels across all platforms |
| **Modal** | ✅ | ✅ | Mobile: specific usage recommendations apply |
| **Parent Process Area** | ✅ | ✅ | Subprocess design and hierarchy management |
## Getting started
This section covers the essential tasks for working with navigation areas: creating, configuring, and managing them in FlowX.AI Designer.
### Creating navigation areas
To create a new navigation area, follow these steps:
Open **FlowX.AI Designer** and either open an existing process definition or create a new one.
Toggle the navigation areas menu by clicking on **Navigation view**.
Select **Create New Area** to begin configuring your navigation structure.
Navigation configurations made on one platform (for example, Web) are not automatically duplicated to the other platform by default. You must copy or recreate them.

### Managing navigation areas
Once you've created a navigation area, you can manage it through the breadcrumbs menu, which provides these options:
Use **Area Settings** to configure the following properties:
* **Name** - a name for the navigation area element that is visible in the **Navigation menu**
This does not represent the label for your navigation area (for example, for a step element) that would be visible in the process at runtime. To set the label for your element, use the UI Designer to edit it.
To do that, trigger the **Navigation View** menu, then navigate to your element and click on the breadcrumbs. Afterward, click "UI Designer."
* **Alternative Flows** - There might be cases when you want to include or exclude process nodes based on some information that is available as a start condition.

Use UI Designer to configure the following:
* **Settings**:
* **Generic**: Properties available cross-platform (Web, Android and iOS), available for all platforms
* **Platform-specific configuration and styling**: For components across Web, iOS, and Android.

The "Copy Navigation Areas" feature allows you to replicate navigation hierarchies and elements between different platforms.
The Copy/Paste Navigation Areas feature facilitates the duplication of navigation configurations within the same process definition and environment. It does not support copying across different process definitions or environments.

To delete a navigation area:
1. Access the **Navigation view** menu within the FlowX.AI Designer.
2. Choose the intended navigation area, then click on the breadcrumbs menu located on the right.
3. Select **Delete Area**.
**Important**: Deleting the navigation area will also remove any associated child areas. Additionally, any user tasks contained within will be unassigned and relocated to the User Tasks section within the **Navigation view**.
**Action Required**: After deleting a navigation area, you must reassign any unassigned user tasks to proper navigation areas. Leaving user tasks unassigned is a misconfiguration that will cause runtime issues.
## Navigation area types
Choose the right navigation area type based on your user interface needs and platform requirements.
### Quick reference
| Type | Use Case | Web Support | Mobile Support | Key Features |
| ------------------ | -------------------- | ----------- | -------------- | ------------------------------ |
| **Stepper** | Sequential workflows | ✅ | ✅ | Progress tracking, 2-level max |
| **Tab Bar** | Section switching | ✅ | ✅ (root only) | Parallel content access |
| **Page** | Full-screen content | ✅ | ✅ | Wizard/single-page modes |
| **Modal** | Focused tasks | ✅ | ✅ | Temporary overlays |
| **Zone** | Layout structure | ✅ | ❌ | Headers/footers (web only) |
| **Parent Process** | Subprocess design | ✅ | ✅ | Hierarchy management |
### Available navigation types
You can create the following types of navigation areas:

### Stepper
Sequential workflow navigation that breaks down complex processes into logical, numbered steps.
**Key Features:**
* Progress tracking with visual indicators
* Return to previously visited steps
* Maximum 2 levels of nesting supported
**Stepper Recommendation**: FlowX supports a maximum of **2 levels** of stepper navigation across all platforms. Design your processes with this limit in mind to avoid navigation complexity. If you need more levels, consider breaking complex flows into separate processes.
If you need more levels, consider breaking complex flows into separate processes.

You can also define a stepper in step structure with the possibility to track progress and also returning to a previously visited step (as you can see in the navigation areas in the example above).
#### Stepper in step example

#### Steps
Steps are individual elements within a stepper, simplifying complex processes.

### Tab Bar
Multi-section navigation component that allows users to switch between different areas of content.

**Key Features:**
* Parallel zone support within user tasks
* Quick switching between sections
* Support for nested tab structures
The navigation Tab Bar offers specialized support for **parallel zones** within the same **user task**. This feature allows users to navigate effortlessly between different sections or functionalities.
Users can access multiple tabs within the tab bar, enabling quick switching between various views or tasks.

When setting up a tab bar zone in your BPMN diagram, ensure that you always initiate a parallel zone using **Parallel Gateway** nodes. This involves using one Parallel Gateway node to open the zone and another to close it, as demonstrated in the example above. This approach ensures clarity and consistency in your diagram structure, facilitating better understanding.
**Mobile Requirements**: On mobile devices, tab bars must be positioned as the **root component** in navigation and remain consistently visible, prioritizing ease of navigation.

#### Tabs
Tabs are clickable navigation elements within the Tab Bar that allow users to switch between different sections or functionalities within an application.

Each tab could contain a user task or multiple user tasks that can be rendered in parallel.
You can also use [**Start embedded subprocess**](../node/call-subprocess-tasks/start-embedded-subprocess) nodes to render defined subprocesses as a tab. Check the [**Start embedded subprocess**](../node/call-subprocess-tasks/start-embedded-subprocess) for more details.
#### Tab bars inside tabs
In addition to regular tab bars, you have the option to implement nested tab bars, allowing for the display of another set of tabs when accessing a specific tab.

To achieve this configuration, you'll need to create an additional parallel zone inside the previously created one for the main tab bar. This section should encompass the child tabs of the primary tab bar in your diagram. Once these child tabs are defined, close the parallel zone accordingly.

### Page
Full-screen content display that can contain multiple user tasks in parallel or sequential presentation.

A page could contain multiple user tasks displayed either in parallel (single page application) or one by one (wizard style).

#### Navigation type (only for Web)
This property is available starting with **v4.1.0** platform release.
You have the possibility to add step-by-step or wizard-style navigation within a page (applicable when a page contains more than one User Task). This means users can navigate through the application in a guided manner, accessing each step within the designated area and page.

* **Single page form** (default): The Web Renderer will display all User Tasks within the same page (in parallel).

For optimal navigation, we suggest utilizing cards to guide users through the content.
To maintain a clean UI while displaying user tasks on a single page, use cards as the root UI elements and apply accordions to them. This allows you to collapse each card after it is validated by an action.

Child areas will be rendered on the same page.
* **Wizard**: For the Wizard option, the Web Renderer will display one user task at a time, allowing navigation using custom Next and Back buttons.

Child areas will be presented sequentially. It's crucial to configure actions properly to ensure smooth user navigation.
### Modal
Temporary overlay that interrupts the main flow to present focused tasks or information.

Modals offer temporary control over user interaction within a process, typically appearing as pop-ups or overlays. They guide users through specific tasks before returning to the main functionality of the application or website.
To enable user interaction with a modal, you can configure it to be dismissable in two ways:
* Dismiss on backdrop click
* Display dismiss confirmation alert
Here's how to configure these options:
1. Navigate to your configured modal and access the UI Designer.

2. In the UI Designer navigation panel, select the **Settings** tab, then choose **Generic**.
3. Check the box labeled "dismissable." If you also want to display a dismiss confirmation alert, configure the:
* Title
* Message
* Confirm button label
* Cancel button label

By configuring these options, you can customize the behavior of your modals to enhance user experience and guide them effectively through tasks.

### Zone
Web-only container for organizing layout with headers, footers, and structured content areas.
A Zone serves as a container designed to govern UI navigation by grouping specific elements together. Its optimal application is in scenarios involving processes featuring both a header and footer.
#### Navigation type (only for Web)
You have the possibility to add step-by-step or wizard-style navigation within a specific zone (applicable when a zone contains more than one User Task). This means users can navigate through the application in a guided manner, accessing each step within the designated area and page.
* **Single page form** (default): The Web Renderer will display all User Tasks within the same zone.

For optimal navigation, we suggest utilizing cards to guide users through the content.
Child areas will be rendered on the same page.
* **Wizard**: For the Wizard option, the Web Renderer will display one user task at a time, allowing navigation using custom Next and Back buttons.

Child areas will be presented sequentially. It's crucial to configure actions properly to ensure smooth user navigation.
Zones with headers and footers are exclusively accessible in web configurations. They are not supported as navigation areas for mobile development.

#### How to Create a Header/Footer Zone
To establish a header/footer zone, follow these steps:
1. Begin by opening a new parallel zone and ensure to close it where you want the header/footer zone to end.

2. Introduce two new user tasks nodes within your process, designated to function as the header, respectively as footer.
3. Connect the first parallel gateway node to both of them.

4. Now connect the header and footer user tasks to the closing Parallel Gateway.

3. In the navigation areas menu, incorporate a new zone labeled "Header Zone" and a new zone "Footer Zone".
4. Position the header at the top of your navigation structure or at the top within your primary navigation element and the footer at the bottom.
5. Assign the user tasks to the "Header Zone" and to the "Footer Zone".
When working with containers directly within navigation zones, you have the flexibility to set the sticky/static property directly on your specific navigation zone using the UI Designer, without having to add specific user tasks. However, determining the best practice depends on the specific use case you're aiming to implement.
For instance, if you're looking to incorporate footers containing actions or buttons such as "Cancel application" or "Continue," it's advisable to include user tasks, allowing you to configure node actions effectively.
On the other hand, if your goal is to integrate static headers and footers featuring branding assets and external URLs, it's simpler to directly add them to the navigation areas. In this scenario, you can effortlessly incorporate images or text with external URLs on your containers styling.

6. Proceed to customize the user tasks UI according to your preferences.

#### Styling options
To customize the appearance of headers and footers, you need to utilize containers as the root UI elements for **user tasks** or navigation areas.

You have two styling options available for these containers:

* **Static**: This style remains fixed and does not scroll along with the page content.
* **Sticky**: When the sticky property is enabled, the container maintains its position even during scrolling.
* **Layout**: You have the option to specify minimum distances between the container and its parent element while scrolling. At runtime, sticky containers will keep their position on scroll relative to top/ bottom/ right/ left margin of the parent element

In mobile configurations, the right and left properties for sticky layout are ignored by the mobile renderer.

### Parent Process Area
Specialized container for managing subprocess design within parent process hierarchies.
**Use Cases:**
* Subprocess organization
* Hierarchy validation
* Design restriction enforcement
## Warnings
If you do not assign a user task to a navigation area, the platform will display a warning indicating that there are user tasks not included in the navigation structure (applies to all platforms).

## Best practices and recommendations
### User task configuration requirements
**Mandatory User Task Organization**: Every user task in your process definition must be properly organized within navigation areas:
* **Complete coverage**: All user tasks must be assigned to navigation areas - unassigned user tasks indicate a misconfiguration
* **Non-empty user tasks**: User tasks must contain UI elements and cannot be left empty
* **Proper hierarchy**: Organize user tasks within the appropriate navigation area hierarchy based on your process flow
These requirements are essential for proper process execution and user experience.
### Mobile platform recommendations
* **Modal usage**: FlowX strongly recommends the use of modals only when you need to temporarily interrupt the normal (root) flow of the app, to present a focused task or message to the user, requiring the user to interact with it before returning to the main flow.
* **Important**: If finishing a task in a modal leads to navigating to another screen, and not just dismissing the modal, then the modal should be a root navigation area.
* **Tab bar implementation**: On mobile, tab bars must be positioned as first root navigation to define the entire application navigation structure and remain consistently visible.
### Cross-platform guidelines
* **Stepper complexity**: Maximum 2 levels supported across all platforms. Break complex flows into separate processes if more levels are needed.
* **Design approach**: Start with mobile constraints first, then enhance for web. Keep navigation structures simple and flat with clear visual indicators.
* **Web-specific features**: Leverage zones with headers and footers for comprehensive layouts. Use wizard navigation for complex processes and take advantage of larger screen real estate.
## Advanced features
### Demo and learning resources
For more information, you can also check the following demo on our Academy website:
### Alternative flows
There might be cases when you want to include or exclude process nodes based on some information that is available at start.

For example, in case of a bank onboarding process, you might want a few extra BPMN nodes in the process in case the person trying to onboard is a minor.
For these cases, we have added the possibility of defining **alternative flows**.
For each navigation area or node, you can choose to set if they are only available in certain cases. In the example below, we will create two alternative flows in which we will include two different steppers and one modal without being part of an alternative flow.

When starting a process, you must mention for the which flow the process will be initiated using the "navigationFlow" parameter and the name of the alternative flow:
```json theme={"system"}
{"navigationFlow": "First Flow"}
```

If a node is not assigned to an alternative flow, this means the node will be included in all possible flows.
A node could also be a part of multiple flow names.
When configuring alternative flows in the main process, remember that they will also be applied in any embedded subprocesses with identical names.
# Permission-based expressions
Source: https://docs.flowx.ai/5.1/docs/building-blocks/process/permission-based-expressions
Control UI element visibility and interaction based on user roles, usernames, and process data for granular access control.
Control what users see and edit within the same process instance based on their roles, usernames, or process data. One process definition automatically adapts to different users, providing role-specific interfaces and access control.
## Overview
Permission-based expressions enable you to:
* **Customize UI per role**: Different roles see different UI elements within the same process
* **Enable read-only access**: Users view and navigate process instances without making changes
* **Support concurrent work**: Multiple users with different permissions work on the same instance
* **Adapt dynamically**: UI changes in real-time based on user permissions and process data
**Use case examples**: A loan application where applicants see only input fields, reviewers see approval buttons, and managers see all data but in read-only mode. One process definition serves all roles.
## Prerequisites
Before configuring permission-based expressions:
* Process definition created with swimlanes configured
* User roles defined in the platform
* **Allow multiple executors** enabled at the swimlane level (in process Settings → Permissions tab)
* Understanding of your access control requirements
## Permission capabilities
### Partial editing
Tailor UI element access for specific users, roles, or usernames within the same swimlane:
* **Role-based control**: Different roles see different UI elements
* **Username-specific access**: Individual users get customized interfaces
* **Data-driven permissions**: Process data determines what users can access
### Read-only access
Enable users to view and navigate process instances without modification:
* Users can navigate through user tasks and view data
* All input fields and buttons are non-interactive
* Hide and disable conditions continue to apply
* Navigation between tasks remains available
**Configuration required**: Enable "Allow Read-Only Process Configuration" in process General settings, then assign **View** permission to appropriate roles at the swimlane level.
### Multiple executors
Multiple users with different roles work concurrently on the same process instance within a swimlane:
* Different permission levels (Execute, Self-assign, View) assigned to different roles
* Each user sees their role-specific interface
* Changes are synchronized across all active users
* Essential for collaborative workflows with varied responsibilities
## How permissions work
Permission-based expressions combine three key elements to control UI behavior:
### 1. Swimlane role configuration
Configure base permissions at the swimlane level:
* Assign roles (Execute, Self-assign, View) to user groups
* Enable **Allow multiple executors** to activate permission-based expressions
* Set minimum access level for each role
### 2. UI element conditions
Apply conditions to individual UI components to control visibility and interaction:
**Hide condition**
* Completely removes the UI element from the interface
* Available for all component types
* Element doesn't occupy any space in the layout
**Disable condition**
* Shows the element but prevents user interaction
* Available for forms, form elements, and buttons
* Element appears grayed out or visually disabled
### 3. Condition precedence
When both hide and disable conditions exist on the same element, **disable takes precedence**. The element will be shown in a disabled state rather than hidden.
## Configuring permission-based expressions
Follow these steps to set up permission-based UI control for your process:
Navigate to **Process Settings → Permissions** tab and enable **Allow multiple executors** for your swimlane.

Configure role permissions (Execute, Self-assign, View) for each role that will access this swimlane.
Navigate to the **UI Designer** tab and select the component you want to configure with permission-based visibility or interaction controls.
In the component properties panel, expand the **Permissions** section.

Click the **+** button next to your desired condition type:
* **Hide Condition**: Available for all component types
* **Disable Condition**: Available for forms, form elements, and buttons
Define the permission logic using these parameters:
**Type**: Who the condition applies to
* **USERNAME**: Target specific usernames
* **ROLE**: Target users with specific roles
**Operator**: How to evaluate the condition
* **IN**: Condition applies when user matches the value
* **NOT\_IN**: Condition applies when user does NOT match the value
**Value Type**: Where permission data comes from
* **SWIMLANE\_OWNER**: Current swimlane owner (automatic, no value needed)
* **PROCESS\_DATA**: Reference data stored in the process instance
* **CONFIGURATION\_SWIMLANE\_ROLE**: Use roles configured at swimlane level
**Value**: The actual permission data (depends on Value Type)
* **PROCESS\_DATA**: Process data keypath (e.g., `${app.client.userList}`)
* **CONFIGURATION\_SWIMLANE\_ROLE**: Array of role names (e.g., `["ROLE_1", "ROLE_2"]`)
* **SWIMLANE\_OWNER**: Not applicable (determined automatically)
Use `CONFIGURATION_SWIMLANE_ROLE` for static role-based permissions. Use `PROCESS_DATA` for dynamic, context-dependent permissions determined during process execution.
Click **Save** to apply your permission-based expression. Test the behavior by accessing the process with different user roles.
## Common expression patterns
Use these examples as templates for typical permission scenarios:
### Role-based access control
Hide or disable elements for specific roles configured at the swimlane level:
```javascript theme={"system"}
{
"type": "ROLE",
"operator": "IN",
"valueType": "CONFIGURATION_SWIMLANE_ROLE",
"value": ["ROLE_MANAGER", "ROLE_SUPERVISOR"]
}
```
**Use case**: Show approval buttons only to managers and supervisors.
### Dynamic username lists
Control access based on usernames stored in process data:
```javascript theme={"system"}
{
"type": "USERNAME",
"operator": "IN",
"valueType": "PROCESS_DATA",
"value": ["${app.client.authorizedUsers}"]
}
```
**Use case**: Display sensitive data only to users listed in an authorized users array populated during process execution.
When using `PROCESS_DATA`, ensure data is mapped to the keypath **before** users reach the user task. Arrays must contain username or role strings.
### Swimlane owner restrictions
Limit access to the current swimlane owner only:
```javascript theme={"system"}
{
"type": "USERNAME",
"operator": "IN",
"valueType": "SWIMLANE_OWNER"
}
```
**Use case**: Allow only the task owner to edit specific fields, while other team members can view but not modify.
### Exclusion patterns
Hide elements from specific users or roles using `NOT_IN`:
```javascript theme={"system"}
{
"type": "ROLE",
"operator": "NOT_IN",
"valueType": "CONFIGURATION_SWIMLANE_ROLE",
"value": ["ROLE_EXTERNAL_USER", "ROLE_VIEWER"]
}
```
**Use case**: Hide internal notes or administrative actions from external users and read-only viewers.
## Advanced: Cross-swimlane references
### Limitation
`SWIMLANE_OWNER` references only the owner of the **current swimlane**. You cannot directly reference owners from other swimlanes in the same process.
### Workaround: Store owners in process data
To reference users from other swimlanes, explicitly store their information in process data during swimlane transitions:
```javascript Store swimlane owners during process execution theme={"system"}
// Map during swimlane transitions or process start
{
"swimlaneOwners": {
"frontOffice": "john.doe@company.com",
"backOffice": "jane.smith@company.com",
"supervisor": "manager@company.com"
}
}
```
```javascript Reference stored swimlane owner theme={"system"}
// Use in permission expression on any swimlane
{
"type": "USERNAME",
"operator": "IN",
"valueType": "PROCESS_DATA",
"value": ["${app.swimlaneOwners.frontOffice}"]
}
```
Cross-swimlane owner references require explicit data mapping. Design your process to capture user information during swimlane transitions or use business rules to populate owner data.
**Implementation approach**:
1. Add a Business Rule node at the start of each swimlane
2. Capture the current user's username
3. Store it in your process data structure (e.g., `swimlaneOwners.{swimlaneName}`)
4. Reference this stored data in permission expressions on other swimlanes
## Best practices
Follow these guidelines for effective permission-based expressions:
**Design principles**:
* **Start simple**: Begin with role-based permissions before adding complex data-driven logic
* **Test thoroughly**: Validate permission behavior with all user roles before deployment
* **Document your logic**: Add comments in your process explaining complex permission patterns
* **Minimize conditions**: Too many conditions can make UI behavior unpredictable and hard to maintain
* **Use consistent naming**: Follow a standard naming convention for roles and process data keys
* **Plan for edge cases**: Consider what happens when process data is missing or null
* **Performance consideration**: Complex permission expressions on many components can impact rendering performance
**Common pitfalls to avoid**:
* Don't create circular dependencies between hide and disable conditions
* Don't forget to test with users who have no assigned roles
* Don't rely on process data that might not be populated yet
* Don't use permission expressions as a substitute for proper swimlane role configuration
## Related resources
Set up user roles and permissions at the platform level
Learn about swimlane configuration and role assignment
Design user interfaces with permission-aware components
Complete guide to process definition configuration
# Process Designer
Source: https://docs.flowx.ai/5.1/docs/building-blocks/process/process
The Process Designer workspace is tailored for creating and editing business processes, featuring a menu with all the essential elements needed to design a process.

The Process Designer provides a visual, BPMN 2.0-compliant environment where you can create, edit, and manage business process workflows. Whether you're building simple linear flows or complex branching processes with multiple decision points, the designer gives you the tools to model your business logic effectively.
## Process Designer interface
When you open a process definition, you'll see the following essential elements:
The name of your process definition appears at the top, providing a clear identifier for the workflow. Click on the name to access process-level settings including permissions, expiry time, platform configuration, and task management options.
The left panel contains the node palette with all available BPMN elements you can drag and drop onto the canvas. Nodes are organized by category: events, tasks, gateways, and subprocesses.
Hover over any node in the palette to see a tooltip with its name and primary use case.
The Navigation section allows you to configure how users navigate through your process on web and mobile platforms. You can create steppers, modals, and other navigation structures that organize user tasks.

Changes to your process are automatically saved as you work, eliminating the need to manually save. The autosave indicator shows when your last change was saved, ensuring your work is never lost.
Autosave works on draft versions. To make changes permanent and available to other environments, you need to commit your project version.
The main canvas area is where you design your process flow by adding nodes, connecting them with sequences, and organizing them into swimlanes. The canvas supports zoom, pan, and offers visual feedback for validation warnings.
The warning indicator displays misconfigurations that could prevent your process from executing correctly. Warnings are platform-specific and help ensure your navigation structure and UI configuration align with your selected platforms (Web, Mobile, or Omnichannel).

Address all warnings before publishing your process to production to avoid runtime errors.
When you select a node, the right panel displays its configuration options. Here you can set node properties, add actions, configure UI elements for user tasks, and define business rules.
We have designed FlowX.AI components to closely resemble their BPMN counterparts for ease of use.
Comprehensive guide to all available node types
Learn BPMN fundamentals through FlowX Academy
## Working with the canvas
The Process Designer canvas provides several features to help you efficiently create and manage process flows:
### Canvas navigation
* **Zoom**: Use the mouse wheel or zoom controls to zoom in and out of your process
* **Pan**: Click and drag on empty canvas space to move around large processes
### Adding and connecting nodes
Drag a node from the left palette onto the canvas, or click a node type to add it to the center of your current view.
Click on a node to select it, then click the arrow icon that appears. Click on the target node to create a sequence flow connection.
You can also create connections by dragging from the arrow icon on the source node to the target node.
Select the node and use the right panel to configure its properties, actions, and behavior.
### Organizing your process
**Swimlanes**: Organize nodes by roles or departments using swimlanes. This helps visualize which parts of the process are handled by which teams and enables role-based access control.
**Layout best practices**:
* Arrange your process flow from left to right for better readability
* Use vertical spacing to separate parallel branches
* Group related nodes close together
* Keep crossing sequence flows to a minimum
* Use subprocesses to encapsulate complex logic
## Validating your process
Before publishing a process, ensure it meets all requirements:
### Validation rules
The Process Designer automatically validates your process and displays warnings for:
* **Missing required nodes**: Processes must have at least one START and one END node
* **Disconnected nodes**: All nodes must be reachable through sequence flows
* **Missing configurations**: User tasks without assigned navigation areas or UI elements
* **Platform mismatches**: UI configurations that don't align with selected platforms (Web/Mobile/Omnichannel)
* **Permission issues**: Swimlanes without proper role assignments
* **Invalid expressions**: Business rules or conditions with syntax errors
Click on any warning to navigate directly to the problematic node or configuration.
### Testing your process
Before deploying to production:
1. **Start a test instance**: Use the test function to start a process instance in your development environment
2. **Monitor execution**: Watch how tokens move through your process and verify all paths work correctly
3. **Check data flow**: Ensure data is properly captured and passed between nodes
4. **Test all branches**: Verify that gateways route correctly based on different conditions
5. **Validate integrations**: Confirm external system connections work as expected
### Common validation errors
**Cause**: The process hasn't been set as published or doesn't exist in the target environment.
**Solution**: Ensure your process is part of a committed project version and deployed to the environment.
**Cause**: Missing or misconfigured START node.
**Solution**: Add a START node and ensure it has proper permissions configured if multiple start nodes exist.
**Cause**: Multiple START nodes defined without start conditions to differentiate them.
**Solution**: Add start conditions to each START node or remove extra START nodes.
**Cause**: A user task node hasn't been assigned to any navigation area.
**Solution**: Open the Navigation view and assign the user task to an appropriate navigation area.
## Collaboration and versioning
### Working with multiple users
Multiple team members can work on processes simultaneously:
* **Concurrent editing**: Multiple users can view and edit processes within the same draft version
* **Real-time updates**: Changes made by other users appear automatically when you refresh
* **Conflict prevention**: The system prevents conflicting changes through optimistic locking
* **Change tracking**: The audit log records who made what changes and when
When working with multiple users on the same process, communicate about major structural changes to avoid conflicts.
### Version management
Processes are versioned as part of projects:
* **Draft versions**: Work-in-progress changes that can be edited
* **Committed versions**: Finalized snapshots that are immutable
* **Version comparison**: Compare different versions to see what changed
* **Audit trail**: Track all changes with timestamps and user information
Learn about project versioning
View change history
## Best practices
**Follow these guidelines for maintainable, performant processes**:
**Design principles**:
* Start simple with START and END nodes, then add complexity incrementally
* Use clear, descriptive names for nodes and actions that explain their purpose
* Document complex business logic in node descriptions
* Create subprocesses for reusable logic or to simplify complex flows
* Limit process complexity - if a process has more than 20-30 nodes, consider breaking it into subprocesses
**Performance optimization**:
* Minimize the number of nodes in frequently executed paths
* Use parallel gateways judiciously - each branch creates additional tokens
* Avoid deeply nested subprocesses when possible
* Consider using timer events instead of polling for external events
**Naming conventions**:
* Use a consistent format like `[Department]_[Function]_[Action]` for process names
* Name nodes to describe what they do, not what they are (e.g., "Validate Customer Data" instead of "Task Node 1")
* Use uppercase for process-level constants and lowercase with underscores for data keys
**Testing strategy**:
* Test all decision branches with different input data
* Verify error handling paths work correctly
* Test with realistic data volumes for collection iterations
* Validate all integration points before deployment
## Troubleshooting
**Symptoms**: Changes aren't being saved or the autosave indicator shows an error.
**Solutions**:
* Check your network connection
* Verify you have edit permissions for the project
* Ensure the project is in draft status (committed versions can't be edited)
* Try refreshing the page and re-applying your changes
* Check if another user has locked the resource
**Symptoms**: Unable to create sequence flows between nodes.
**Solutions**:
* Verify you're connecting compatible node types (e.g., END nodes can't have outgoing sequences)
* Check if a sequence already exists between the nodes
* Ensure nodes are in the same process (not trying to connect across subprocess boundaries)
* Try zooming in - connection points might be difficult to target at small zoom levels
**Symptoms**: Runtime errors when trying to start process instances.
**Solutions**:
* Review and resolve all validation warnings
* Verify the process is published and included in an active build
* Check that users have appropriate permissions (execute role)
* Ensure all required integrations are configured and accessible
* Review the exceptions log for detailed error messages
**Symptoms**: Configured UI components don't appear when running the process.
**Solutions**:
* Verify user tasks are assigned to navigation areas
* Check that UI elements are configured for the correct platform (Web/Mobile)
* Ensure actions are set to "Manual" if they should be triggered by user interaction
* Validate that the process platform setting matches your deployment (Web Only, Mobile Only, or Omnichannel)
* Check hide/disable expressions aren't preventing element display
Learn how to monitor and debug running process instances
In the following sections, we will provide more details on how to use the Process Designer and its components.
## Process definition
The process is the core building block of the platform. Think of it as a representation of your business use case, for example making a request for a new credit card, placing an online food order, registering your new car or creating an online fundraiser supporting your cause.

A process is nothing more than a series of steps that need to be followed in order to get to the desired outcome: getting a new credit card, gathering online donations from friends or having your lunch brought to you. These steps involve a series of actions, whether automated or handled by a human, that allows you to complete your chosen business objective.
## Process instance
Once the desired processes are defined in the platform, they are ready to be used. Each time a process needs to be used, for example, each time a customer wants to request a new credit card, a new instance of the specified process definition is started in the platform. Think of the process definition as a blueprint for a house, and of the process instance as each house of that type that is being built.


From this point on, the platform takes care of following the process flow, handling the necessary actions, storing and interpreting the resulting data.
# Process definition
Source: https://docs.flowx.ai/5.1/docs/building-blocks/process/process-definition
The core of the platform is the process definition, which is the blueprint of the business process made up of nodes that are linked by sequences.

## What is a process definition?
A process definition is the blueprint for your business processes. It defines the complete workflow logic—including nodes, sequences, decision points, user interactions, and integrations—that makes up your business process.
A process definition is like an architectural blueprint. The definition specifies how to build the structure, while process instances are the actual buildings constructed from that blueprint.
### Key characteristics of process definitions
Once defined and published, process definitions can be instantiated, executed, and monitored in real-time
Processes are versioned as part of projects, enabling safe evolution and rollback capabilities
Configure processes for Web Only, Mobile Only, or Omnichannel deployment
Control who can view, execute, and modify processes using swimlanes and permissions
### Understand definitions and instances
Process definitions and process instances serve different purposes:
| Aspect | Process Definition | Process Instance |
| ----------------- | ------------------------------ | ------------------------------------------- |
| **Nature** | Blueprint/template | Actual execution |
| **When created** | Design time | Runtime |
| **Quantity** | One per process type | Many per definition |
| **Changeability** | Can be versioned and updated | Immutable once started |
| **Contains** | Node configurations, rules, UI | Current state, runtime data, token position |
Learn about running process instances
Troubleshoot process execution errors
## Manage the process lifecycle
The process lifecycle consists of seven stages, from initial design through deployment and optimization:
Create your process definition using the Process Designer, adding nodes, configuring actions, and building the UI.
Set process-level settings including permissions, platforms, expiry time, and integrations with Task Manager or reporting.
Address any configuration warnings and test the process with sample data to ensure it works as expected.
Save your changes as part of a committed project version, making them available for deployment.
Committed versions are immutable. To make further changes, create a new draft version.
Include the process in a project build and deploy it to your target environments (development, staging, production).
Process instances are created from the definition when users or systems trigger the process.
Track process performance, identify bottlenecks, and iterate with new versions to improve efficiency.
Step-by-step guide to creating your first process
## Work with core components
Process definitions consist of six integrated workspaces and tools that work together to create business applications:

### 1. Process Designer
The visual BPMN 2.0 workspace where you create and edit process logic using a drag-and-drop interface.

**Key features**:
* **Node palette**: Access all BPMN node types (User Tasks, Service Tasks, Gateways, Events, etc.)
* **Swimlanes**: Organize process steps by role or department for access control
* **Canvas controls**: Zoom, pan, and navigate large process diagrams
* **Sequence flows**: Connect nodes to define the execution path
* **Visual feedback**: Real-time validation warnings and configuration status
Complete guide to the Process Designer workspace
### 2. UI Designer
The visual workspace where you design user interfaces for process interactions without code.

**Key features**:
* **Component library**: Pre-built UI components (Forms, Inputs, Buttons, Tables, Cards, etc.)
* **Drag-and-drop design**: Build interfaces by dragging components onto the canvas
* **Live preview**: See how your UI will appear to users in real-time
* **Platform-specific design**: Configure separate UIs for Web, iOS, and Android
* **Data binding**: Connect UI elements directly to process data
* **Theme support**: Apply consistent styling across your application
Learn about UI component configuration
### 3. Data Model
Define the structure and schema for all data that flows through your process.

**Key features**:
* **Type definitions**: Create reusable data structures with typed fields
* **Visual relationships**: See how data objects connect and reference each other
* **Input parameters**: Define what data the process expects to receive
* **Output parameters**: Specify what data the process returns
* **Example values**: Include sample data for testing and development
* **Validation rules**: Ensure data integrity with type checking
Comprehensive data modeling guide
### 4. Settings
Configure process-level settings including naming, permissions, integrations, and platform options.

**Configuration tabs**:
* **Process Name**: Set the unique identifier with naming constraints
* **General**: Platform selection, reporting, task management, expiry time
* **Permissions**: Configure swimlane roles and access control
* **Task management**: Integration with Task Manager plugin
* **Data Search**: Define searchable and filterable process data keys
**Access settings**: Click the settings icon in the left sidebar or use the top navigation menu.
### 5. Start a process for testing
Click the **Start Process** button in the top-right corner to test your process directly from the designer.
**Capabilities**:
* Automatically generates input forms based on your defined input parameters
* Validates required data before the process starts
* Creates a test process instance in your current environment
* Helps you test and debug during development
When you have input parameters defined, the Start Process function will automatically generate input fields for required data, making it easy to test your process with sample values.
Learn more about starting and testing processes
### 6. Access additional operations
Click the contextual menu (three-dot icon ⋮ in the top-right corner) to access essential process operations:

**Two contextual menus for process management:**
This menu is available when you're **inside** a process definition, actively editing it. There's also a separate contextual menu available from the **Processes list view** (before opening a process) that provides operations like Export, Duplicate, Copy to another project, and See used resources.
Learn about the Processes list contextual menu for export, duplicate, and copy operations
Clear cached process definition data to force a refresh from the database.
**When to use**:
* After making significant changes that aren't reflecting in the UI
* When experiencing unexpected behavior or outdated data display
* To troubleshoot synchronization issues
This only clears the cache for the current process definition in your browser session.
View comprehensive change history for the process definition.
**Information tracked**:
* Timestamp of each change
* User who made the change
* Application version
* Subject and event type
* Subject identifier
* Status of the change
**Features**:
* Filterable entries for easy tracking
* Complete audit trail for compliance
* Version comparison capabilities
Access the version history of the process definition to see all changes over time.


**Capabilities**:
* Compare different versions side-by-side
* See what changed between versions
* Track evolution of the process definition
* Identify when specific changes were introduced
This shows the version history within the project versioning system, allowing you to see how the process evolved across committed versions.
Remove the process definition from the project.

**Use with caution**: Deleting a process definition is a significant action that should only be performed when:
* The process is no longer needed
* You've verified that no other processes reference this one as a subprocess
* You have appropriate backup or version control
**Impact**:
* The process definition is removed from the current wip version (you cannot delete a process definition that is part of a committed version)
* References from other processes may break
* Historical data of process instances is not affected
* Can be recovered from previous committed versions if needed
## Define your data model
The data model defines the structure of all data in your process. It acts as the schema for process variables, letting you organize and manage data throughout the process lifecycle.
Access the data model directly from the process definition interface to add new key-value pairs without switching menus.
### Why define a data model?
Defining your data model provides several benefits:
* **Type safety**: Prevent errors during process execution by defining data types
* **Auto-completion**: Get intelligent suggestions in UI Designer based on defined keys
* **Validation**: Ensure data consistency across nodes and actions
* **Documentation**: Use the data model as living documentation of your process data structure
* **Reusability**: Reference data structures across multiple nodes and actions
* **Testing**: Include example values to test without creating mock data
**Best practice**: Define your data model structure at the project level before building processes. This enables reusability across processes and improves consistency.
For comprehensive information on working with the Data Model, including advanced features like input/output parameters and data mappers:
### Configure input and output parameters
Define the data contract for your process by specifying what data it receives (inputs) and what data it returns (outputs). These parameters are essential for subprocesses, workflows, and process testing.
#### Access parameter configuration
To configure parameters, navigate to the **Data Model** tab.
**Input parameters**
Input parameters define the data structure your process expects when it starts or when called as a subprocess:
* Enable process start validation
* Generate automatic input prompts for testing
* Support Call Activity nodes and subprocess integration
**Output parameters**
Output parameters define the data structure your process returns after execution:
* Return data to parent processes
* Enable synchronous subprocess communication
* Replace manual "Append Data to Parent Process" actions

#### How to configure parameters
To configure input or output parameters:
1. Navigate to **Data Model** → **Input/Output Parameters**.
2. Click **Define parameters**.
3. Configure the schema:
* Add the parameter name and data type.
* Mark parameters as required or optional.
* Add descriptions and example values.
4. If you have multiple start or end nodes, select the specific node from the dropdown.
**Required parameters**: Missing required parameters will cause process start failures. Only mark parameters as optional if your process can truly function without them.
**Best practice**: Define parameter schemas based on your project-level data model for consistency and reusability.
#### Key features
* **Automatic validation** of required parameters
* **Type checking** ensures data integrity
* **Change propagation**: Deleted/renamed attributes automatically update in mappings
* **Multiple nodes support**: Different parameters for different start/end points
Complete guide to mapping data between components
Using parameters with subprocess calls
## Organize processes with swimlanes
Swimlanes provide a visual and functional way to organize process nodes by participants or roles. You can structure your process by dividing it into horizontal lanes, with each lane representing different actors, departments, or responsibility areas.
Swimlanes serve two purposes: they provide visual organization in the process designer and enforce role-based access control at runtime.
### Benefits of using swimlanes
Use swimlanes to:
* **Improve visual clarity**: Show which team or role is responsible for each process step
* **Control access**: Restrict who can execute, view, or self-assign tasks in each lane
* **Ensure compliance**: Enforce separation of duties by distributing tasks across different roles
* **Optimize processes**: Identify bottlenecks by seeing which roles handle the most tasks
### Add swimlanes
To add swimlanes to your process definition:
1. Access the **FlowX.AI Designer**
2. Open an existing process definition or create a new one
Identify the default swimlane and select it to display the contextual menu.

With the contextual menu, you can easily perform various actions: add or remove swimlanes, reorder them, or configure their settings.
1. Choose the desired location for the new swimlane (above or below existing lanes)
2. Click the **add swimlane icon** to create the new swimlane
3. Give the swimlane a descriptive name (e.g., "Front Office", "Approver", "Back Office")
After creating a swimlane, configure which roles can access it in the **Permissions** section of process settings.

For more details about access management, check the following sections:
## Configure process settings
The Settings panel provides configuration options organized across five tabs. To access settings, click the settings icon in the left sidebar.
### Set your process name
Configure the unique identifier for your process definition in the **Process Name** tab.
* **Process definition name**: The unique name for your process
Name can only contain letters, numbers and the following special characters: `[ ] ( ) . _ -`
**Best practices for naming**:
* Use descriptive names that clearly identify the process purpose.
* Follow a consistent naming convention across your organization.
* Use underscores or hyphens instead of spaces.
* Keep names concise but meaningful (for example, `Customer_Onboarding` or `Loan_Application`).
### Configure general settings
Use the **General** tab to configure platform settings, reporting options, process data, and expiry time.

#### Select your deployment platform
Choose the deployment target for your process. This setting affects configuration options in Navigation Areas, UI Designer, and Misconfigurations.
**Available platforms**:
* **Web Only**: Use this option when your navigation areas are defined exclusively for web. The process is optimized for web usage and doesn't provide the same functionality on mobile devices.
* **Mobile Only**: Use this option when your navigation areas are defined only for mobile. The process leverages mobile-specific features and provides an optimal mobile experience.
* **Omnichannel**: Use this option when your process has navigation areas defined for both web and mobile platforms. This ensures users have a consistent experience regardless of their platform.
This setting is available starting with **v4.1.0** platform release.
Navigation Areas, UI Designer and misconfigurations will be affected by this setting.
By default, new processes are set to **Web Only**. This ensures that they are initially optimized for web-based usage, providing a starting point for most users and scenarios.
#### Enable read-only access
Allow users to view and navigate through your process definition without modifying data or triggering actions.

When you enable this setting, you unlock additional customization capabilities in Process Designer and UI Designer, letting you configure read-only access at the process level.
**When to use read-only access**:
* **Supervision and oversight**: Let supervisors review process instances without making changes.
* **Audit and compliance**: Let auditors view process data and history without risk of modification.
* **Information sharing**: Let stakeholders view process status without granting edit permissions.
* **Training and demo**: Show process flows and data to trainees without allowing changes.
**How to configure read-only access**:
1. Enable "Allow Read-Only Process Configuration" in the General settings tab.
2. Configure read-only permissions at the swimlane level in the Permissions tab.
3. Use permission-based expressions in UI Designer to control element visibility and interaction.
4. Enable or disable the toggle at the node level to configure read-only access for specific nodes.
Read-only access allows users to navigate through process screens and see the full context without the ability to modify data or execute actions. This is useful for oversight, auditing, and information sharing scenarios.
**Important**: Read-only configuration must be set at the process level first, then configured per swimlane in the Permissions tab. Hide and disable conditions configured in UI Designer still apply to read-only users.
Learn how to configure granular read-only access control
#### Enable reporting
Toggle **Use process in reporting** to include the process in reporting via the Reporting plugin.
#### Configure general data
Use general data to display notifications, warnings, or informational content immediately when a process starts.
**When to use general data**
General data is useful for:
* **Supervision messages**: Display important notices about account supervision or approval requirements.
* **Document generation status**: Show immediate feedback about document processing.
* **Process-level notifications**: Present critical information that needs to be visible from the start.
* **Banner messages**: Display persistent notifications at the top of the process interface.
General data is not intended for Server-Sent Events (SSE) updates. It provides data immediately available in the process start response, ensuring notifications appear before any real-time updates occur.
**Example configuration**
```json theme={"system"}
{
"notifications": [
{
"identifier": "Supervision",
"show": "true",
"componentIdentifier": "MESSAGE",
"displayOptions": {
"flowxProps": {
"text": "Account opening requires supervision. The client's account and products will be active after receiving necessary approvals.",
"messageType": "warning"
}
}
}
]
}
```
When you configure general data notifications, ensure the message field contains the actual text to display. Set the `messageType` property to `success`, `warning`, `error`, or `info` to apply the correct styling.
#### Set expiry time
You can configure an expiry time expression on a process definition to specify when the process expires.
| **Example** | **Expression** | **Explanation** |
| ------------------------- | ---------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| Daily Expiry at Midnight | `0 0 0 * * ?` | Sets the process to expire at 00:00 (midnight) every day. The `?` is used in the day-of-week field to ignore its value. |
| Hourly Expiry on Weekdays | `0 0 9-17 * * MON-FRI` | Sets the process to expire at the start of each hour between 9 AM and 5 PM on weekdays (Monday to Friday). |
| Expiry After a Duration | `PT3M22S` | Sets the process to expire after a duration of 3 minutes and 22 seconds from the start, using **ISO 8601 format**. |
FlowX.AI supports Spring cron expressions. They **must always include six fields**: `seconds`, `minutes`, `hours`, `day of month`, `month`, and `day of week`.\
This differs from traditional UNIX cron, which uses only five fields. Be sure to include the `seconds` field in Spring cron expressions to avoid errors.
The cron expression format should include seconds (0), minutes (0), hours (0), and then wildcards for the day, month, and day of the week fields. The `?` sign in the day-of-week field is used when the day-of-month field is already specified (or ignored in this case).
You can use both ISO 8601 duration format (`PT3M22S`) and cron expressions (`0 0 0 * * ?`, `0 0 9-17 * * MON-FRI`) to define `expiryTime` expressions for process definitions.
For more information about **Cron Expressions** and **ISO 8601** formatting, check the following section:
[Timer Expressions](../node/timer-events/timer-expressions)

### Set permissions
Use the **Permissions** tab to configure role-based access control for each swimlane in your process.

After you define roles in your identity provider solution (for example, Keycloak), they become available for configuring swimlane access in the process definition settings.
#### Configure swimlane permissions
Choose the swimlane you want to configure from the dropdown menu.
1. Click **Add Role** to assign permissions
2. Select the role from the dropdown
3. Choose permission types: **Execute**, **Self Assign**, **View**
Toggle **Allow Multiple Swimlane-Executors** to enable multiple users with different roles to work concurrently on the same process instance within the same swimlane.
When enabled, permissions can be configured at UI Element level in User Tasks from the selected swimlane, allowing granular control over who can see and interact with specific UI components.
#### Default permissions
When you create a new swimlane, it comes with two default permissions:
* **Execute**: Allows users to perform actions in the swimlane
* **Self-assign**: Enables users to assign tasks to themselves
Additional permissions can be added manually based on your requirements.
### Integrate with Task Manager
Use the **Task Management** tab to configure integration with the Task Manager plugin for task tracking and management.

#### Available configuration options
**Use process in task management**
Toggle this option to enable integration with the Task Manager system.
When you enable this option, the process becomes available for managing tasks within Task Management. This allows data, tasks, and status updates to flow between the process and Task Manager.
**Container App URL**
The Container App URL is the endpoint that directs users to the specific application instance where your process runs.
The URL serves as a reference point for accessing and managing tasks directly from Task Manager. It follows this format:
```
{baseURL}/appId/buildId/processes/resourceId/instance
```
You can:
* Define the URL dynamically using configuration parameters (for example, `${genericParameter}`).
* Set the URL at the process data level using business rules.
**Example URL**:
```
https://demo-angular.devmain.flowxai.dev/
```
**Keys to send to Task Manager**
Specify the data fields (keys) from your process that are sent to Task Manager for indexing and display. Configure these keys on a separate interface.
**Important considerations**:
* Keys must exist in the process data model
* Keys need re-indexing if their type or structure is updated
* Only enable Task Manager integration if you need task-level tracking
* This adds overhead, so use selectively for business-critical processes
Learn more about Task Manager configuration
Localize Task Management in 34+ languages
### Configure data search
Use the **Data Search** tab to configure which process data keys are indexed for searching and filtering process instances.

#### Index search keys
The **Search Key Indexing** section lets you define which process data fields are searchable. These indexed keys enable efficient searching and filtering of process instances in the Active Process view.
**How to configure search keys**:
1. Click the **+** button to add a new search key.
2. Enter the key path (for example, `application.client.firstName`).
3. Save your changes to apply the indexing configuration.
**Key path format requirements**:
* Use dot notation to access nested fields: `parent.child.fieldName`.
* Keys must match your data model structure exactly.
* Matching is case-sensitive.
**Example key paths**:
* `application.client.firstName`
* `application.client.lastName`
* `application.status`
* `application.dateOfBirth`
**Process Data Keys**: These are paths or fields in the process definition that store relevant data. For example, `application.client.firstName` corresponds to a field capturing the first name within the client object.
**Re-indexing required**: After updating the data model structure, re-index the keys in the Search indexing tab to ensure accurate searching and filtering. Indexing can take several minutes for environments with many process instances.
**Performance consideration**: Only index keys you actually need for searching. Excessive indexing can impact performance. Focus on fields commonly used for filtering and searching process instances.
## Apply best practices
Follow these guidelines to create well-structured, maintainable process definitions.
### Follow configuration standards
Apply these best practices when configuring your process definitions:
**Platform selection**:
* Choose **Web Only** for desktop-focused applications with complex interactions.
* Choose **Mobile Only** for mobile-first experiences optimized for touch.
* Choose **Omnichannel** only when you need both platforms. Maintain separate processes when platform requirements diverge significantly.
**Naming and organization**:
* Use descriptive, consistent names that clearly identify the process purpose.
* Follow a naming convention like `[Department]_[Function]_[Action]` (for example, `HR_Onboarding_NewEmployee`).
* Avoid special characters beyond the allowed set: `[ ] ( ) . _ -`.
* Keep process names under 50 characters for better readability in lists.
**Data model design**:
* Define your data model structure before building process flows.
* Use meaningful key names that describe the data they contain.
* Organize related data under common parent keys (for example, `customer.firstName` and `customer.lastName`).
* Include example values in the data model to help with development and testing.
* Avoid deeply nested structures—limit nesting to 3-4 levels for better performance.
### Configure swimlanes effectively
**Swimlane best practices**:
* Create swimlanes that mirror your organizational structure or process ownership.
* Assign clear, descriptive names to swimlanes (for example, "Front Office", "Back Office", or "Supervisor").
* Configure appropriate permissions for each swimlane (execute, view, self-assign).
* Enable **Allow multiple executors** when multiple users with different roles need concurrent access.
* Limit the number of swimlanes—too many can make processes difficult to visualize. Aim for 3-5 maximum.
Learn advanced permission configuration for granular access control
### Optimize performance
**Settings that affect performance**:
* **Expiry time**: Set appropriate expiry times to prevent stale process instances from accumulating.
* **Task management integration**: Only enable when needed—it adds overhead for task tracking.
* **Reporting integration**: Enable selectively for business-critical processes that require analytics.
* **Search indexing**: Index only the keys you need for searching—excessive indexing affects performance.
* **General data**: Keep general data lightweight—it loads on every process start.
**Data model optimization**:
* Don't store large binary data in the process data model.
* Use references to external systems for large files or documents.
* Clean up temporary data that's no longer needed as the process progresses.
### Follow security best practices
Apply these security best practices:
* **Never include sensitive data** in process names or descriptions.
* **Use role-based permissions properly**: Don't grant execute permissions to roles that shouldn't start processes.
* **Configure swimlane permissions carefully** to ensure data privacy.
* **Enable Task Manager integration only** for processes where users need task-level visibility.
* **Use environment-specific configuration parameters** for sensitive values like API endpoints.
* **Set appropriate expiry times** to ensure processes don't remain active indefinitely.
* **Review permission-based expressions** to ensure UI elements hide sensitive data from unauthorized users.
### Configuration checklist
Before deploying a process definition, verify:
* [ ] Process name is descriptive and follows naming conventions
* [ ] Platform selection (Web/Mobile/Omnichannel) matches your deployment target
* [ ] Data model is defined with clear, meaningful key names
* [ ] Swimlanes are configured with appropriate roles
* [ ] Execute permissions are assigned to correct user roles
* [ ] Self-assign permissions are configured where needed
* [ ] Permission-based expressions are tested with different user roles
* [ ] Task Manager integration enabled only if required
* [ ] Application URL configured correctly for Task Manager
* [ ] Keys to send to Task Manager are defined
* [ ] Reporting integration enabled only if needed
* [ ] Search indexing configured for relevant keys
* [ ] Expiry time expression set appropriately (if needed)
* [ ] General data configured for initial notifications (if needed)
* [ ] Audit log reviewed for recent changes
## Manage process versions
Process definitions are versioned as part of projects, providing robust change management.
### Understanding versioning
Process definitions in FlowX.AI are versioned at the **project level**, not individually. This ensures all related resources stay synchronized.
**Version types**:
* **Draft versions**: Work-in-progress changes that you can edit freely.
* **Committed versions**: Finalized snapshots that become immutable.
* **Branches**: Parallel development paths for different features or environments.
* **Version comparison**: Tools to compare settings and configurations across versions.
### Make changes to process definitions
Process definitions can only be edited when part of a draft project version. If you need to modify a committed process:
1. Create a new draft version of your project
2. Make your changes to the process definition
3. Test thoroughly
4. Commit the project version
When you commit a project version:
* The process definition becomes immutable
* It's available for inclusion in builds
* All settings are frozen at that point in time
Create a build from the committed version and deploy it to your target environments. The deployed process definition becomes active and can create process instances.
Detailed guide to project versioning
Learn about building and deploying processes
### Understand the impact on running instances
Changes to a process definition don't affect running process instances. Running instances continue using the version of the process definition that was active when they started.
**What this means**:
* You can safely deploy new process definition versions without affecting active users.
* Long-running processes complete using their original definition.
* New process instances use the latest deployed version.
* To apply changes to running instances, you need to migrate them (typically not recommended).
## Troubleshoot common issues
This section covers common issues when configuring process definitions and how to resolve them.
**Symptoms**: You can't commit project version or get errors when trying to save changes.
**Common causes and solutions**:
* **Validation errors**: Review process designer warnings and fix all configuration issues.
* **Missing required nodes**: Ensure your process has at least one start node and one end node.
* **Invalid expressions**: Check all business rules, cron expressions, and permission expressions for syntax errors.
* **Permission issues**: Verify you have commit permissions for the project.
* **Uncommitted dependencies**: Ensure all referenced subprocesses and workflows are also committed.
Check the validation warnings panel in the Process Designer before you try to commit.
**Symptoms**: Users get errors when trying to start a new process instance.
**Common causes and solutions**:
* **Process not published**: Verify the process is part of an active build deployed to the environment.
* **Missing permissions**: Check that user roles have execute permission on the process start node.
* **Invalid start node configuration**: Review the start node settings and start conditions.
* **Multiple start nodes without conditions**: If you have multiple start nodes, ensure each has a unique start condition.
* **Environment mismatch**: Confirm the process is deployed to the correct environment.
**Symptoms**: The process doesn't appear in Task Manager or tasks aren't created.
**Common causes and solutions**:
* **Integration not enabled**: Enable "Use process in task management" in the General settings tab.
* **Application URL misconfigured**: Verify the application URL format is correct and uses valid parameters.
* **Keys not configured**: Define which keys should be sent to Task Manager.
* **Indexing issues**: Keys may need re-indexing after data model changes.
* **Task Manager service unavailable**: Check platform status to ensure the Task Manager service is running.
**Symptoms**: You can't find process instances using search, or filters return incorrect results.
**Common causes and solutions**:
* **Keys not indexed**: Add the required keys to the Data Search configuration.
* **Data model changes not re-indexed**: After changing the data model structure, re-index search keys.
* **Incorrect key paths**: Verify the key paths match your actual data model structure and check for typos.
* **Case sensitivity**: Search is case-sensitive—ensure queries match the actual data casing.
* **Indexing delay**: Recent process instances may not be immediately searchable—allow time for indexing.
Re-indexing can take several minutes for environments with many process instances.
**Symptoms**: Processes expire too early, too late, or not at all.
**Common causes and solutions**:
* **Cron expression errors**: Verify your cron expression includes all six required fields (seconds, minutes, hours, day, month, day of week).
* **Time zone issues**: Cron expressions use server time zone—account for time zone differences.
* **ISO 8601 format errors**: Check the duration format is correct (for example, `PT3M22S` for 3 minutes 22 seconds).
* **Expiry not enabled**: Confirm the expiry time expression is configured in settings.
* **Process already expired**: Processes past expiry time may not be startable.
**Symptoms**: Navigation areas or UI elements don't appear on expected platforms.
**Common causes and solutions**:
* **Incorrect platform setting**: Verify "Available Platforms" matches your navigation area configuration.
* **Web Only with mobile navigation**: If set to Web Only, mobile navigation areas aren't available.
* **Platform mismatch with deployment**: Ensure the deployed build targets the correct platform (web renderer or mobile renderer).
* **Navigation areas not configured**: Check that navigation areas exist for the selected platform.
* **UI Designer platform mismatch**: Verify UI elements are configured for the same platform as the process.
**Symptoms**: Users can't access the process, see unexpected UI elements, or can't perform actions.
**Common causes and solutions**:
* **Missing role assignments**: Verify users have required roles in your identity provider (for example, Keycloak).
* **Swimlane permissions not configured**: Check that appropriate permissions (execute, view, self-assign) are set.
* **Permission expressions incorrect**: Review permission-based expressions for syntax errors.
* **Multiple executors not enabled**: If you need multiple users in the same swimlane, enable "Allow multiple executors".
* **Cross-swimlane reference issues**: When referencing users from other swimlanes, store them in process data.
### Get help with other issues
If you continue experiencing issues:
1. Check the **audit log** to see recent changes that might have caused problems.
2. Review **process validation warnings** in the Process Designer.
3. Test with a **simple process** to isolate whether the issue is process-specific or environmental.
4. Check **Platform Status** to ensure all FlowX services are healthy.
5. Review **logs** in your FlowX.AI deployment for detailed error messages.
Check the health of FlowX services
## Related resources
Learn about the canvas and design interface
Complete guide to all node types
Managing process data structures
Creating reusable process components
Configuring user navigation
Advanced swimlane configuration
# Project data model
Source: https://docs.flowx.ai/5.1/docs/building-blocks/process/project-data-model
Define reusable data types at the project level to ensure consistency across processes
## What is a project data model?

The Project Data Model (PDM) lets you define reusable data types at the project level. These data types propagate to the process data models, ensuring data consistency across yensuring data consistency across your FlowX.AI applications, including in Reusable Business Rules, Persistence Layer schemas, and other components.
With PDM, you create a centralized data structure that serves as the foundation for all processes within your project. This ensures that core data types like Customer, Product, or Document maintain consistent definitions throughout your application.

## Key concepts
FlowX.AI supports several data model layers, each serving different purposes:
| Data Model Layer | Description |
| ------------------------ | ------------------------------------------------------------------------------------------------------------- |
| Process Data Model | Can leverage data types defined in the Project Data Model or Library Data Model. |
| Project Data Model (PDM) | Defines data types that can be reused across processes and other resources within the project |
| Library Data Model | Defined within a library. Allows data types to be reused across multiple projects, promoting standardization. |

A **data type** defines the structure of a particular set of data. For example, a `Customer` data type might contain attributes like `name`, `email`, and `address`.
An **attribute** is an individual property of a data type that specifies its data structure.
Data types and attributes can be categorized based on their usage:
* **Used/Unused**: A data type or attribute is considered "used" when it's incorporated into the structure of another data type.
* **Referenced/Unreferenced**: Refers to data types or attributes from the Project Data Model being used within a Process Data Model or a UI Template.

## Benefits of project data model
Ensures data structure consistency across multiple processes and resources
Define once, use many times across processes, business rules, and other components
Reduces development time by eliminating duplicate definitions
Centralized management of data structures
Promotes the use of common data structures across projects
## How to use the project data model
### Access the project data model
Open FlowX.AI Designer.
Select the project where you want to configure the Project Data Model.
Select "Project Data Model" from the project menu.

### Define a project data model
In the Project Data Model view, click "+" to add a new data type.

Provide a name for the data type.
Add attributes to the data type:
* Specify attribute name
* Select attribute type (string, number, boolean, object, array, enum)

### Manage data types
#### Add a data type
1. Click the "+" button in the Data Types panel.
2. Enter the name and properties of the data type.
3. Add attributes as needed.
4. Save changes.
### Edit a data type
Select the data type in the Project Data Model.
Click the three dots menu next to the data type and select "Settings".
Edit the data type as needed and click "Save".
Changes to data types propagate to all processes referencing them. If a process is using this data type, it will automatically get the updated structure.
However, changes do NOT propagate to UI Designer paths, which will need to be adjusted manually.
### Remove a data type
Select the data type to remove.
You can either delete an entire object or just a single attribute.

Click the remove button.
You can delete the data type even if it's in use. The system will show you a warning message indicating which processes reference the data type.
If the data type is in use by processes, you will receive a warning message showing which processes reference it. You can still proceed with the deletion, but this may affect the referenced processes.

### Working with referenced data types
When a data type from the Project Data Model is used in a Process Data Model:
1. The Process Data Model will display the referenced data type.
2. The referenced data type cannot be modified at the process level.
3. Changes to the data type in the Project Data Model will propagate to all referencing processes.
## Common scenarios
Navigate to the Project Data Model.
Make changes to an existing key or attribute.
The changes automatically propagate to all processes using that key.
Referenced components in processes will be updated to reflect the changes, but UI Designer paths require manual adjustment.
Navigate to the Project Data Model.
Attempt to remove a key or object.
System checks if the key is in use by any process.
A warning modal shows references but allows deletion.
Navigate to the Project Data Model.
Change the type of an attribute (e.g., from string to boolean).
System will prompt for confirmation as this might break processes.
**Incompatible change**: References will be broken and removed from UI templates.
**Compatible change**: No changes to references are required.
### Use the Project Data Model in processes
1. Navigate to a process within your project.
2. Open the Process Data Model.
3. Project data types are available for selection.
4. Select the desired project data type to use in your process.
5. The data type is added to your Process Data Model, maintaining reference to the Project Data Model.
### Work with libraries

#### Integrate Library Data Models
1. Navigate to your project dependencies.
2. Add a library as a dependency. The library must have a build created.

3. Library data types become available in your Project Data Model.
Library data types are not visible by default! You must select the library source in the filter to display them.
To filter by library types you can use the "Filter by source" feature.

4. You can now use the library data types in your data model.

#### Handle duplicate types from libraries
When multiple libraries contain data types with the same name:
1. Both types will be visible in the Project Data Model with visual indicators.
2. Namespacing functionality will prevent technical issues.

## Configure reporting and sensitive data settings
1. Go to the Project Data Model.
2. Click the "3 dots menu" in the upper right corner of the side panel.
3. Choose "show details".

4. Update the sensitive/reporting settings as needed.

These settings apply to all instances of the attribute across processes.
## Project Data Model after version commitment
After committing a project version:
1. The Project Data Model becomes read-only.
2. You can still view the diagram and monitor usage.
3. This read-only configuration is available for any configuration on committed versions and applies also to resource data models.

3. To make changes to the data model, you will require a new project version.

## Search and filter
The Project Data Model interface provides tools to help you find and work with your data types:
1. Navigate to the Project Data Model.
2. By default, only project-level types are displayed.
3. Use filters to view library types as well.
4. Use the search function to find specific types by name.
## Update library dependencies
When updating library dependencies:
1. Navigate to the dependencies section.
2. Select the new library version.
3. The system will inform you of any breaking changes to data types.
4. You can decide whether to proceed with the update.
5. If you proceed, changes will propagate to processes according to compatibility rules.
## Real-world example: Insurance claims processing
This example demonstrates how an insurance company uses project data model for their claims processing system.
The insurance company created these data types in their Project Data Model:

1. **Customer**
* `customerId`: string
* `firstName`: string
* `lastName`: string
* `dateOfBirth`: date
* `contactInformation`: ContactInfo (reference)
* `policyNumbers`: array of string
* `customerSince`: date
* `riskProfile`: RiskProfile (reference)
* *Settings*: Sensitive data = True, Used in reporting = True
2. **ContactInfo**
* `email`: string
* `phone`: string
* `address`: Address (reference)
* *Settings*: Sensitive data = True, Used in reporting = False
3. **Claim**
* `claimId`: string
* `policyNumber`: string (reference to Policy)
* `claimType`: enum \["Auto", "Property", "Medical", "Liability"]
* `incidentDate`: date
* `reportedDate`: date
* `status`: enum \["New", "Under Review", "Pending Documents", "Approved", "Denied", "Closed"]
* `estimatedAmount`: number
* `approvedAmount`: number
* `documents`: array of Document (reference)
* *Settings*: Sensitive data = False, Used in reporting = True
4. **Document**
* `documentId`: string
* `documentType`: string
* `fileName`: string
* `fileUrl`: string
* `uploadDate`: date
* *Settings*: Sensitive data = False, Used in reporting = False
The company created multiple processes using the PDM:
**Root**: ClaimProcess

**Data Structure**:
* **ClaimProcess** (Process-specific type)
* `claim`: Claim (reference from PDM)
* `assignedAdjuster`: string
* `vehicleInfo`: AutoClaimDetails (reference)
* `processingStage`: enum \["Initial Review", "Damage Assessment", "Liability Determination", "Settlement Negotiation", "Payment Processing"]
* **AutoClaimDetails** (Process-specific type)
* `vehicleMake`: string
* `vehicleModel`: string
* `vehicleYear`: number
* `vin`: string
* `accidentLocation`: Address (reference from PDM)
* `damageDescription`: string
**Root**: RenewalProcess

**Data Structure**:
* **RenewalProcess** (Process-specific type)
* `customer`: Customer (reference from PDM)
* `renewalDate`: date
* `premiumChange`: number
* `renewalStatus`: enum \["Pending Review", "Offer Generated", "Offer Sent", "Accepted", "Declined", "Expired"]
1. A configurator adds a new attribute `loyaltyTier` to the Customer data type in the PDM.
2. This attribute is an enum \["Bronze", "Silver", "Gold", "Platinum"].
3. The new attribute automatically propagates to all processes using the Customer data type.
4. The Policy Renewal Process now has access to the customer's loyalty tier without any process-level changes.
1. A configurator tries to remove the `contactInformation` attribute from the Customer data type.
2. The system displays a warning that the attribute is in use by multiple processes.
3. The configurator is prevented from making the change until the references are resolved.
1. The company uses a "Common Insurance Standards" library with standardized data types.
2. After setting the library as a dependency, they can use the library's "Vehicle" data type in their PDM.
3. When the library updates, the configurator can choose to adopt the changes.
This example shows how the Project Data Model:
* **Ensures data consistency**: Core entities like Customer and Policy maintain consistent structures across all processes and resources.
* **Promotes reusability**: Common data types are defined once and reused in in multiple processes, business rules, and other resources.
* **Simplifies changes**: Updates to data types are propagated automatically to all processes.
* **Enforces governance**: Sensitive data is marked at the project level for consistent handling.
* **Allows flexibility**: Process-specific data can extend the PDM while maintaining core data integrity.
## Best practices
**Plan before implementation**: Design your Project Data Model before creating processes to ensure consistency.
**Always provide example values**: Example values will be used in data mapping and other operations.
**Use descriptive names**: Choose clear, descriptive names for data types and attributes.
**Document your model**: Add descriptions to data types and attributes for better understanding and for AI agents.
**Consider reusability**: Design data types with reusability in mind across processes and resources.
**Review impact of changes**: Before modifying data types, check their usage across processes.
**Use libraries for cross-project standards**: For data types needed across multiple projects, define them in libraries.
**Maintain regularly**: Periodically review and clean up unused data types.
## Limitations
Custom Data Types from the Project or Library Data Model level cannot be modified at the resource level.
Removing or changing Data Types in use may break resources using it.
Project Data Model becomes read-only after version commitment. This is available for any configuration on commited versions; it applies also for resources data models.
Library builds with breaking changes to Data Types require usage review.
Data Types defined at the Project or Library level can be referenced in the data models of Processes, Reusable Functions, and Reusable UI Templates.
## Troubleshooting
You're trying to edit a data type from the PDM within a process, but the fields are read-only.
Make changes at the project level instead:
1. Navigate to the Project Data Model
2. Locate and edit the data type
3. Save changes
4. The changes will propagate to all processes
You're trying to delete a data type, but receive an error that it's in use.
Either:
* Remove all references to the data type first
* Create a new version of your project to make the change
After changing a data type (e.g., from string to number), references are broken in processes.
Review affected processes and update references manually:
1. Check the warning message that lists affected processes
2. Open each process
3. Update UI templates or other components that referenced the changed attribute
When updating a library dependency, you receive warnings about breaking changes to data types.
Carefully review the changes and their impact before proceeding:
1. Check which data types are affected
2. Review how these types are used in your processes
3. Decide whether to proceed with the update or maintain the current version
# Subprocess management
Source: https://docs.flowx.ai/5.1/docs/building-blocks/process/subprocess
Learn how to configure, start, and execute subprocesses efficiently within your process flow.
Subprocesses are smaller process flows triggered by actions in the main process. They can inherit some process parameter values from the parent process and communicate with front-end apps using the same connection details as their parent process.
## Overview
Subprocesses can be started in two modes:
* **Asynchronous**: Execute alongside the parent process without delaying it.
* **Synchronous**: The parent process waits until subprocesses are finished before advancing.
## Configuring & starting subprocesses
Design subprocesses within the FlowX.AI Designer, mirroring the main process structure.
* Within user tasks or task nodes.
* Custom node type in the main process.
* Using the corresponding node.
### Parameter inheritance
Available for **Start Subprocess** action and **Call Activity** node.
By default, subprocesses inherit all parent process parameter values. Configure inheritance by:
* **Copy from Current State**: Select keys to copy.
* **Exclude from Current State**: Specify keys to ignore.
Sub-processes can also have an [**Append Params to Parent Process**](../actions/append-params-to-parent-process) action configured inside their process definitions which will append their results to the parent process parameter values.
## Executing subprocesses
Define subprocess execution mode:
* **Asynchronous/Synchronous**: Set the `startedAsync` parameter accordingly.
In synchronous mode, subprocesses notify completion to the parent process. The parent process then resumes its flow and handles subprocess data.
## Additional resources
For detailed guidance on configuring and running subprocesses:
# UI Designer best practices
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/best-practices
Best practices for creating effective user interfaces using FlowX.AI UI Designer, based on established design principles and platform capabilities.
## UI Designer best practices in FlowX.AI
When designing user interfaces with FlowX.AI UI Designer, following established best practices ensures consistent, usable, and effective user experiences.
## Design principles
Based on FlowX.AI documentation for creating user interfaces:
**Use consistent styling across all screens** for a cohesive user experience.
Leverage platform-specific overrides strategically while maintaining visual consistency.
**Group related inputs within logical sections or cards**.
Use Cards and Containers to organize content and create visual hierarchy.
**Implement proper validation** to prevent errors and guide users.
Use available validators: required, custom, and conditional validation.
**Provide clear feedback** on actions with success and error messages.
Use UI actions to handle user interactions appropriately.
## Component usage guidelines
### Form elements best practices
**Configuration**:
* Use clear, descriptive labels
* Implement appropriate validation (required, custom)
* Configure hide/disable expressions for dynamic behavior
* Add helper text for complex requirements
**Available Properties**:
* Label and placeholder text
* Validation rules (required, custom)
* Hide and disable expressions
* Platform-specific overrides
**Select Component**:
* Use for dropdown menus and single selections
* Configure options with proper labels and values
* Implement CHANGE event handlers for dependent fields
* Use disabled options feature for conditional availability
**Radio Buttons**:
* Best for 2-4 exclusive options
* Use when all options need to be visible
**Checkboxes**:
* Use for multiple selections or single yes/no choices
* Configure CHANGE events for dynamic interactions
**Buttons**:
* Use descriptive labels that indicate the action
* Configure appropriate UI actions (Process Actions, Data Operations)
* Consider platform-specific button styles
**File Upload**:
* Clearly indicate accepted file types
* Provide appropriate feedback during upload process
* Consider platform limitations for mobile devices
### Layout best practices
**When to Use**: Simple, sequential content flow
**Configuration**:
* **Direction**: Choose Horizontal for row layout, Vertical for column layout
* **Justify**: Control main axis alignment (Start, Center, End, Space Between, etc.)
* **Align**: Control cross axis alignment (Start, Center, End, Stretch)
* **Gap**: Set appropriate spacing between elements
* **Wrap**: Enable for responsive behavior when needed
**Best For**:
* Form layouts
* Content that flows in one direction
* Mobile-first designs
**When to Use**: Complex, multi-dimensional layouts
**Benefits**:
* Better control over 2D layouts
* Responsive design capabilities
* Suitable for dashboard-style interfaces
**Considerations**:
* More complex to configure than linear layouts
* Test across platforms for consistent behavior
## Platform-specific best practices
### Web Platform
**Navigation Types**:
* Use **Single Page Form** for displaying all User Tasks on the same page
* Use **Wizard** navigation for step-by-step processes
* Configure actions properly for smooth navigation flow
**Web-Specific Features**:
* Utilize zones with headers and footers (web-only feature)
* Implement proper navigation hierarchy
* Use cards to guide users through content on single-page forms
**Screen Real Estate**:
* Take advantage of larger screen sizes
* Use appropriate justify and align settings for content distribution
* Consider horizontal layouts for better space utilization
### Mobile Platforms (iOS & Android)
**Mobile-Specific Properties**:
* Configure **Screen Title** for navigation bar display (Card component when used as root)
* Set **Scrollable** property appropriately (iOS-specific)
* Use platform overrides for shorter titles and mobile-optimized content
**Limitations**:
* Zones with headers and footers are not supported
* Navigation features are more limited compared to web
**Content Strategy**:
* Use shorter titles and labels for mobile displays
* Consider touch interaction patterns
* Ensure content fits within mobile screen constraints
* Test with realistic content lengths
## Dynamic behavior best practices
### Hide and Disable Expressions
**Purpose**: Control element visibility based on conditions
**Implementation**:
* Use JavaScript expressions that evaluate to true/false
* Reference process data store keys for dynamic evaluations
* Configure in Settings → Platform → Overrides → Expressions → Hide
**Common Use Cases**:
* Show/hide fields based on user selections
* Display different content for different user roles
* Adapt interface based on process state
**Purpose**: Make elements non-interactive while keeping them visible
**Best Practice**: Ensure disabled fields have the same expression configured under hide expressions for consistency.
**Usage**: Disable form fields based on validation state or user permissions
### Conditional Styling
**Available For**: Text, Link, and Container elements
1. Select a **Text**, **Link**, or **Container** element
2. Navigate to the **Styles** tab
3. Locate the **Conditional Styling** section
4. Click the **➕** icon to add expressions and effects
5. Use the **JS Editor** to configure expressions
**Condition**: String expression evaluated similarly to hide/disable expressions
**Overrides**: Key-value map defining property-value pairs to apply
* Use real-time data evaluation for responsive UI updates
* Handle conflict resolution (latest condition takes precedence)
* Combine with data-driven expressions for adaptable designs
## Validation best practices
### Available Validators
**Usage**: Ensure essential fields are completed before form submission
**Application**: Apply to critical form elements like name, email, or selection fields
**Usage**: Implement complex business logic validation
**Benefits**: Flexible validation rules specific to your business requirements
**Configuration**: Use JavaScript expressions for validation logic
**Usage**: Apply validation based on other field values or process state
**Examples**: Validate fields only when certain conditions are met
## UI actions best practices
### Event Configuration
**Common Events**:
* **CHANGE**: Triggered when form element values change
* Use for updating dependent fields, triggering calculations, showing/hiding related content
**Action Types**:
* **Process Actions**: Advance workflow based on user interactions
* **Data Operations**: Update form fields and process data
* **UI Updates**: Show/hide elements dynamically
* **External Calls**: Integrate with external systems
Configure UI actions to provide immediate feedback and create responsive user experiences.
## Testing and quality assurance
### Platform Testing
Use the UI Designer's platform switching to preview designs across Web, iOS, and Android platforms.
Test layouts with different content lengths and screen orientations.
Test hide/disable expressions and conditional styling with various data scenarios.
Verify wizard navigation and single-page form behaviors work as expected.
### Content Considerations
**Design Considerations**:
* Use proper labels for form elements
* Ensure sufficient color contrast
* Test with assistive technologies
* Provide alternative text for images
**Test Strategy**:
* Verify layouts work on different screen sizes
* Test navigation on both mobile and web
* Ensure content remains readable across platforms
* Check platform-specific overrides function correctly
## Common patterns and solutions
### Navigation areas management
**Copy Navigation Areas**: Use the copy/paste feature to replicate navigation hierarchies between platforms (within the same process definition and environment).
**Area Deletion**: When deleting navigation areas, remember that child areas are also removed, and user tasks are relocated to the User Tasks section.
### Theme and styling management
**Theme Overrides**:
* Customize component appearance to differ from theme settings
* Import/export theme overrides between platforms for consistency
* Use contextual menu options for efficient style management
**Style Copying**: Use copy/paste functionality for styles between compatible components and across platforms.
These best practices are based on actual FlowX.AI capabilities and documentation. Always refer to the latest documentation for the most current features and recommendations.
# Platform-specific considerations
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/platform-considerations
Platform-specific configuration, limitations, and best practices for Web, iOS, and Android platforms in FlowX.AI UI Designer.
## Platform-specific configuration
FlowX.AI UI Designer provides platform-specific configuration and styling for components across **Web**, **iOS**, and **Android** platforms. Understanding platform differences and capabilities is essential for creating optimal user experiences.
## Platform overview
### Supported platforms
**Full Feature Support**
* Complete navigation area functionality
* Zones with headers and footers
* Wizard and single-page navigation
* All UI component types supported
**Mobile-Optimized**
* Basic navigation areas
* Screen title configuration for navigation bar
* Scrollable property for root card components
* Platform-specific property overrides
**Mobile-Optimized**
* Basic navigation areas
* Screen title configuration for navigation bar
* Platform-specific property overrides
* Material design considerations
## Web platform features
### Navigation capabilities
**Full Navigation Support**: Web platform provides the most comprehensive navigation features.
**Web-Exclusive Features**:
* Zones with headers and footers
* Complete navigation hierarchy
* Advanced navigation patterns
Zones with headers and footers are exclusively accessible in web configurations. They are not supported as navigation areas for mobile development.
**Single Page Form (Default)**:
* Web Renderer displays all User Tasks within the same page (in parallel)
* Use cards to guide users through content
* Child areas rendered on the same page
**Wizard Navigation**:
* Displays one user task at a time
* Custom Next and Back buttons
* Child areas presented sequentially
* Requires proper action configuration
### Component support
**Full Component Library**: Web platform supports all UI component types without restrictions.
## Mobile platform features
### iOS platform specifics
**iOS-Specific Properties**:
**Screen Title**: Set the screen title used in the navigation bar on mobile devices (available only when the card element is set as the root)
**Scrollable Property**: Define the desired behavior of the screen, specifying whether it should be scrollable or not (default: true)
```json theme={"system"}
{
"screenTitle": "User Profile",
"scrollable": true
}
```
**Mobile Navigation Restrictions**:
* Basic navigation areas only
* No zones with headers and footers
* Limited navigation types compared to web
* Navigation hierarchy displayed beneath platform tabs
**iOS Considerations**:
* Screen size variations (iPhone, iPad)
* Touch interaction patterns
* Platform-specific styling requirements
* System integration features
### Android platform specifics
**Android-Specific Features**:
**Screen Title**: Set the screen title used in the navigation bar on mobile devices (available only when the card element is set as the root)
**Material Design Considerations**: Android components adapt to Material Design principles where applicable
**Android Ecosystem**:
* Multiple screen sizes and densities
* Different Android versions
* Manufacturer-specific customizations
* Hardware capability variations
## Platform override system
### Configuration hierarchy
**Base Configuration**: Properties available cross-platform (Web, Android and iOS), serving as the default for all platforms.
**Specific Customizations**: Override generic settings for individual platforms to optimize user experience.
**Visual Validation**: Preview changes across platforms, keeping in mind that iOS and Android previews are estimates.
### Implementing overrides
To configure platform-specific overrides:
From the UI Designer navigation panel, select the **Settings** tab, then select the **desired platform** (Web, iOS, or Android).
Click the "+" button (next to "Overrides") and select the type of override:
* **Properties**: Override component properties (e.g., Title, Subtitle, Helper text)
* **Expressions**: Override hide/show conditions
Enter the platform-specific value that differs from the generic setting.
Use the import/push functionality to share overrides between platforms when appropriate.
### Available override types
**Common Property Overrides**:
* **Title**: Shorter titles for mobile displays
* **Subtitle**: Platform-appropriate subtitles
* **Helper Text**: Context-specific help information
* **Labels**: Adapted for platform conventions
**Example Use Case**: Web title "Complete Application Process" → Mobile title "Complete App"
**Hide Expressions**: Platform-specific visibility conditions
**Use Cases**:
* Show different content on mobile vs desktop
* Hide complex features on mobile platforms
* Adapt to platform-specific user flows
## Platform limitations and constraints
### Component availability
| Component Type | Web | iOS | Android | Notes |
| ---------------- | --- | --- | ------- | ------------------------------------------- |
| Container | ✅ | ✅ | ✅ | Full support across platforms |
| Card | ✅ | ✅ | ✅ | Mobile has additional screen title property |
| Custom | ✅ | ❌ | ❌ | Web-only component |
| Form Elements | ✅ | ✅ | ✅ | Full support with platform adaptations |
| Navigation Areas | ✅ | ⚠️ | ⚠️ | Limited on mobile (no headers/footers) |
⚠️ = Limited functionality or platform-specific constraints\
❌ = Not supported on platform
### Navigation limitations
**Limitations**:
* No zones with headers and footers on mobile
* Limited navigation types (no wizard mode on mobile)
* Simplified navigation hierarchy
* Basic navigation areas only
**Workarounds**:
* Use card-based layouts for mobile organization
* Implement navigation through UI actions
* Leverage platform-specific screen titles
**Challenges**:
* Different navigation capabilities across platforms
* Varying screen sizes and interaction methods
* Platform-specific design conventions
**Solutions**:
* Use generic settings as baseline
* Apply strategic platform overrides
* Test across all target platforms
* Design for the most constrained platform first
## Platform-specific best practices
### Web platform optimization
**Leverage Web Capabilities**:
* Use full zone navigation with headers/footers
* Implement wizard navigation for complex flows
* Take advantage of larger screen real estate
* Use single-page forms with card organization
**Web-Specific Layouts**:
* Utilize horizontal space effectively
* Implement complex grid layouts
* Support both single-page and wizard navigation
* Consider desktop interaction patterns
### Mobile platform optimization
**Mobile Constraints**:
* Smaller screen sizes require condensed content
* Use shorter titles and labels
* Prioritize essential information
* Consider thumb-friendly interaction zones
**Mobile-Specific Features**:
* Configure screen titles for navigation bars
* Set appropriate scrollable behavior (iOS)
* Consider platform design conventions
* Test on actual devices when possible
**Mobile Content Strategy**:
* Use platform overrides for mobile-optimized text
* Simplify complex interactions
* Ensure touch targets are appropriately sized
* Test with realistic content lengths
## Testing across platforms
### Preview limitations
**Important**: The preview generated in the UI Designer for iOS and Android platforms is an estimate meant to help you visualize how it might look on a mobile view. Actual device testing is recommended for production applications.
### Testing Strategy
**UI Designer Testing**:
* Use platform tabs to switch between Web, iOS, and Android views
* Compare layouts and content across platforms
* Validate platform overrides are applied correctly
* Check navigation behavior differences
**Cross-Platform Content**:
* Verify text fits within mobile constraints
* Test with longest expected translations
* Ensure critical information is visible on all platforms
* Validate platform-specific features function correctly
**Feature Validation**:
* Test navigation flows on each platform
* Verify platform-specific components work as expected
* Validate hide/show expressions across platforms
* Test conditional styling behavior
## Migration and maintenance
### Platform updates
**Override Management**: Settings overrides can always be imported/pushed from one platform to another, making it easier to maintain consistency while allowing for platform-specific optimizations.
### Maintenance best practices
Test your interfaces across all target platforms regularly, especially after making changes to generic settings or platform overrides.
Document platform-specific decisions and overrides to help team members understand the rationale behind platform differences.
Regularly review platform overrides to ensure they still serve their intended purpose and maintain overall design consistency.
Understanding platform-specific considerations helps you create interfaces that work well across all target platforms while taking advantage of each platform's unique capabilities and respecting their constraints.
# Screen configuration guide
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/screen-configuration-guide
Learn how to configure screens effectively using FlowX.AI UI Designer with platform-specific settings and navigation areas.
FlowX.AI UI Designer allows you to create rich, interactive user interfaces for your process flows. The UI Designer is available for **User Task** nodes and **Navigation Areas** elements, providing contextual interface design capabilities.
## Platform-specific configuration
FlowX.AI provides platform-specific configuration and styling for components across **Web**, **iOS**, and **Android** platforms.
### Generic vs platform-specific settings
**Cross-Platform Properties**: Configure properties available cross-platform (Web, Android and iOS), available for all platforms.
These settings serve as the base configuration that applies to all platforms unless specifically overridden.
**Platform-Specific Configuration**: Override generic settings for specific platforms.
For example, on Android, you might want to change the Card title to a shorter one to better fit mobile screens.
### Configuring platform overrides
To override a general property for a specific platform:
Open the UI Designer and select a UI Element, such as a **Card**.
From the UI Designer navigation panel, select the **Settings** tab, then select the **desired platform** (Web, iOS, or Android).
Click the "+" button (next to "Overrides") and select **Properties** -> select the property you want to override (e.g., **Title**), then input your desired value.
Preview your changes in the UI Designer by navigating from one platform to another or by comparing them.
Settings overrides can always be imported/pushed from one platform to another for consistency across platforms.
Keep in mind that the preview generated in the UI Designer for iOS and Android platforms is an estimate meant to help you visualize how it might look on a mobile view.
## Navigation areas configuration
Navigation areas play a pivotal role in user interface design. They enhance the user experience by providing a structured, organized, and efficient way for users to interact with and explore various features and solutions.
### Navigation types (web only)
**Behavior**: The Web Renderer will display all User Tasks within the same page (in parallel).
**Best Practices**:
* Use **Cards** to guide users through the content
* Apply **Accordions** to cards to collapse each card after validation
* Maintain a clean UI while displaying multiple user tasks
**Child Areas**: Rendered on the same page
**Behavior**: The Web Renderer will display one user task at a time, allowing navigation using custom Next and Back buttons.
**Usage**: Ideal for step-by-step or wizard-style navigation within a page when a page contains more than one User Task.
**Child Areas**: Presented sequentially
It's crucial to configure actions properly to ensure smooth user navigation in wizard mode.
Navigation types are available starting with v4.1.0 platform release and are only available for **Web** platform configurations.
### Platform hierarchy
In the navigation panel, the navigation hierarchy is displayed beneath platform tabs:
* **Web Platform**: Full navigation features including zones with headers and footers
* **Mobile Platforms** (iOS & Android): Limited navigation features
Zones with headers and footers are exclusively accessible in web configurations. They are not supported as navigation areas for mobile development.
## Layout configuration
Layout settings are available for all components that can group other types of elements (for example, **Containers** or **Cards**).
### Linear layout properties
**Linear**: Selected by default for arranging child elements in a linear fashion.
* **Horizontal**: Aligns child elements horizontally in a row
* **Vertical**: Aligns child elements vertically in a column
Controls the alignment of child elements along the main axis (the direction set by Horizontal or Vertical):
* **Start**: Aligns elements at the start of the container
* **Center**: Centers elements along the main axis
* **End**: Aligns elements at the end of the container
* **Space Between**: Distributes elements evenly with space between them
* **Space Around**: Distributes elements with space around them
* **Space Evenly**: Distributes elements with equal space around them
Controls the alignment of child elements along the cross axis (perpendicular to the main axis):
* **Start**: Aligns elements at the start of the cross axis
* **Center**: Centers elements along the cross axis
* **End**: Aligns elements at the end of the cross axis
* **Stretch**: Stretches elements to fill the container along the cross axis
* **Yes**: Allows elements to wrap onto multiple lines when they exceed the container's width
* **No**: Forces all elements to remain on a single line, potentially causing overflow
Sets the spacing between child elements, measured in pixels.
## Hide and disable expressions
Configure dynamic visibility and interaction using JavaScript expressions:
### Available expression types
**Purpose**: A JavaScript expression that hides the UI element when it evaluates to a truthy value.
**Usage**: Control element visibility based on process data or user interactions.
**Example**: Hide a field based on user role or form state.
**Purpose**: A JavaScript expression that disables the UI element when it returns a truthy value.
**Usage**: Make elements non-interactive while keeping them visible.
It's important to make sure that disabled fields have the same expression configured under the path expressions → hide.
### Expression configuration
Configure expressions for dynamic behavior:
1. Select the UI component in the **UI Designer**
2. Navigate to **Settings** → **your desired platform** → **Overrides (+)** → **Expressions**
3. Configure **Hide** or **Disabled** conditions
4. Add your JavaScript expression
## Best practices for screen configuration
Follow these design principles to create efficient, user-friendly interfaces that perform well across all platforms.
### Core design principles
**Keep user tasks focused**:
* Design each user task with **one clear purpose** to avoid cognitive overload
* Limit the number of UI components per screen to prevent overcrowding
* Break complex processes into multiple, focused user tasks
* Use progressive disclosure to reveal information when needed
Overcrowded screens with too many UI components can lead to poor user experience and potential performance issues during process execution.
**Optimize container usage**:
* **Avoid unnecessary nesting** of containers whenever possible
* **Don't nest containers** solely for sizing or layout purposes
* **Prefer grid layout** over nested containers for complex arrangements
* Use **linear layout** and **alignments** for simpler positioning needs
Grid layout is your primary tool for creating complex layouts efficiently. It reduces nesting while providing powerful positioning capabilities.
**Use hide expressions wisely**:
* **Minimize the use** of hide expressions to maintain performance
* Consider using **conditional styling** instead of hiding elements when possible
* Group related conditional elements to reduce expression complexity
* Document complex conditional logic for maintainability
Overusing hide expressions can negatively impact performance and make interfaces harder to maintain.
### Implementation recommendations
**For optimal navigation**:
* Use **Cards** to guide users through content on single-page forms
* Apply **Accordions** to collapse validated sections
* Configure actions properly for wizard-style navigation
* Consider platform limitations (mobile vs web features)
**Multi-Platform Design**:
* Start with generic settings as your base configuration
* Use platform-specific overrides strategically (e.g., shorter titles on mobile)
* Test previews across all target platforms
* Remember that iOS/Android previews are estimates
**Effective Layout Strategy**:
* **Prioritize grid layout** for complex arrangements
* Use **linear layout** for simple sequential content
* Apply proper **alignment settings** instead of wrapper containers
* Choose appropriate layout direction for your content flow
* Use gap settings to create proper spacing hierarchy
* Consider responsive wrapping for dynamic content
* Test layouts with realistic content lengths
**Maintain optimal performance**:
* Limit UI component density per screen
* Reduce container nesting depth
* Minimize complex hide expressions
* Use efficient layout methods (grid over nested containers)
* Test with realistic data volumes
Well-designed screens with proper layout structure and minimal nesting perform better and provide smoother user interactions.
## Configuration examples
### Mobile configuration example
For mobile platforms (iOS & Android), you can configure specific properties:
**Card Component Example**:
* **Screen Title**: Set the screen title used in the navigation bar on mobile devices (available only when the card element is set as the root)
* **Scrollable Property** (iOS): Define whether the screen should be scrollable (default: true)
### Platform override example
Override a card title for different platforms:
**Title**: "Complete Application Process"
**Title**: "Complete App" (shorter for mobile displays)
This approach ensures your interfaces are optimized for each platform while maintaining consistency in functionality.
# Buttons
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-component-types/buttons
Interactive button components for triggering actions and file uploads with comprehensive styling and configuration options.
Buttons are essential interactive elements that enable users to trigger actions, navigate between sections, and upload files. FlowX.AI provides two specialized button types, each optimized for specific use cases with extensive customization options.

## Button types overview
Choose the right button type for your specific use case:
Trigger actions like process advancement, sending notifications, or opening new content
Enable file selection with built-in validation for file types and sizes
## Basic button
Basic buttons serve as the primary interaction mechanism for users to perform actions within your application. They can trigger process flows, send notifications, navigate to different sections, or execute business logic.
### Configuration overview
Labels and basic settings
Event handling and action types
Visual appearance and icons
### Basic button properties
**Purpose**: Define the text displayed on the button
**Features**:
* Supports Markdown syntax for rich formatting
* Dynamic text from process data
* Localization support for multi-language applications
* Responsive text scaling
**Best Practices**:
* Use action-oriented language ("Submit", "Continue", "Send")
* Keep labels concise but descriptive
* Consider button context and user expectations
* Use consistent terminology across the application
Action buttons should clearly indicate what will happen when clicked. Use verbs like "Save Changes" instead of generic terms like "OK".
### UI actions configuration
Define the behavior when users interact with your button:
| Event | Description | Use Cases |
| --------- | --------------------------------------- | ----------------------- |
| **CLICK** | Triggered when button is clicked/tapped | All button interactions |
While CLICK is the primary event, the action type determines what happens when the event occurs.
**Available Actions**:
* **Process Actions**: Advance workflow, complete tasks
* **Navigation**: Move between pages or sections
* **Data Operations**: Save, submit, or validate data
* **External Integrations**: Call APIs, send notifications
* **UI Updates**: Show/hide elements, update content

**Conditional Actions**: Execute different actions based on conditions
* User roles and permissions
* Form validation states
* Process instance data
* External system responses
**Error Handling**: Define fallback behaviors
* Network connectivity issues
* Permission errors
* Validation failures
* System unavailability
For detailed UI action configuration, see our [UI Actions Guide](../ui-actions).
### Button styling & visual design
#### Button types
Choose from four distinct visual styles to match your design system:
**Purpose**: Main call-to-action buttons
**Characteristics**:
* High contrast, prominent appearance
* Usually one per screen/section
* Draws immediate attention
**Use Cases**: Submit forms, confirm actions, proceed to next step
**Purpose**: Supporting actions of moderate importance
**Characteristics**:
* Less prominent than primary
* Complementary to primary actions
* Clear but not dominant
**Use Cases**: Cancel operations, alternative paths, secondary features
**Purpose**: Subtle actions that don't compete with primary content
**Characteristics**:
* Transparent background with border
* Minimal visual weight
* Integrates with content
**Use Cases**: Optional actions, toggles, less critical functions
**Purpose**: Minimal visual impact for tertiary actions
**Characteristics**:
* No background or border
* Looks like clickable text
* Lowest visual hierarchy
**Use Cases**: Links, minor actions, text-based navigation

For comprehensive CSS styling options, check our [Styling Guide](../ui-designer#styling).
#### Icon integration
Enhance your buttons with meaningful icons:
**Icon Key**: Select from the Media Library
* Consistent icon set across the application
* SVG format for scalability
* Optimized for different screen sizes
**Icon Color**: Customize appearance
* Use color picker for precise control
* Maintain accessibility contrast ratios
* Consider colorblind accessibility
When setting colors, the entire icon fill changes. Avoid color modifications on multicolor icons to prevent visual distortion.
**Available Positions**:
| Position | Description | Visual Result | Best For |
| ---------- | ---------------- | ------------- | ------------------- |
| **Left** | Icon before text | 🔍 Search | Most common layout |
| **Right** | Icon after text | Submit ➤ | Directional actions |
| **Center** | Icon only | 🔍 | Icon-only buttons |
When using center position, the button displays only the icon. Ensure the icon clearly communicates the action to maintain usability.

## File upload button
File upload buttons provide a specialized interface for file selection with built-in validation and user feedback. They're essential for document submission, image uploads, and data import workflows.
### Configuration overview
File upload buttons share many properties with basic buttons but include specialized file handling features:
File type restrictions and validation
Size limits and error handling
Feedback and progress indication
### File upload properties
**Purpose**: Clearly indicate the upload purpose
**Examples**:
* "Upload Document"
* "Select Profile Picture"
* "Import Data File"
* "Attach Receipt"
**Best Practices**:
* Specify what type of file is expected
* Include file requirements in the label if space allows
* Use progressive disclosure for complex requirements
**Purpose**: Control which file types users can select
**Configuration Options**:
| Specification | Example | Purpose |
| ----------------------- | ------------------------------- | -------------------------- |
| **MIME Categories** | `audio/*`, `image/*`, `video/*` | Broad category filtering |
| **Specific MIME Types** | `application/pdf`, `text/csv` | Exact format control |
| **File Extensions** | `.doc`, `.docx`, `.jpg`, `.png` | User-friendly restrictions |
**Common Combinations**:
```
Images: image/*, .jpg, .jpeg, .png, .gif, .webp
Documents: .pdf, .doc, .docx, .txt, .rtf
Spreadsheets: .xls, .xlsx, .csv
Archives: .zip, .rar, .7z
```
Be specific about accepted file types to prevent user confusion and reduce invalid uploads.
**Max File Size**: Set appropriate limits based on:
* Server capacity and processing power
* Network bandwidth considerations
* Storage limitations
* User experience expectations
**Size Guidelines**:
* **Images**: 5-10 MB for high quality
* **Documents**: 25-50 MB for complex files
* **Data Files**: Based on processing requirements
* **Media Files**: 100+ MB for videos
**Error Messages**: Provide clear feedback
* "File size must be under 10 MB"
* "Please compress your image and try again"
* "Large files may take longer to process"
**Invalid File Type Error**: Custom messages for unsupported formats
* Explain what formats are accepted
* Provide guidance on file conversion
* Link to help resources if needed
**Max File Size Error**: Clear size limit communication
* Display the exact limit
* Suggest file compression tools
* Offer alternative upload methods for large files
**Example Configuration**:
```
Invalid Type: "Please upload PDF, DOC, or DOCX files only"
Size Error: "File must be smaller than 25 MB. Current size: 35 MB"
```
### File upload example
Example configuration for an image upload button:

**Configuration Details**:
* **Accepted Types**: `image/*` (all image formats)
* **Max Size**: 5 MB
* **Error Handling**: Custom messages for type and size violations
* **UI Feedback**: Progress indication and preview capabilities
### File upload UI actions
**Event Type**: CLICK (same as basic buttons)
**Action Types for File Upload**:
* **File Processing**: Validate, resize, or convert files
* **Progress Tracking**: Show upload progress and status
* **Data Integration**: Process file content into application data
* **Workflow Advancement**: Continue process after successful upload

**Multi-file Support**: Configure for multiple file selection
* Batch processing capabilities
* Individual file validation
* Progress tracking for each file
**File Preview**: Show file information before upload
* File name and size display
* Image thumbnails for visual files
* File type icons for documents
**Upload Progress**: Provide user feedback
* Progress bars for large files
* Cancel upload functionality
* Retry mechanisms for failed uploads
### File upload styling
File upload buttons have specialized styling options:
| Type | Appearance | Best Used For |
| --------- | -------------------- | ------------------------ |
| **Fill** | Solid background | Primary upload actions |
| **Ghost** | Outlined style | Secondary upload options |
| **Text** | Text-only appearance | Subtle upload links |
**Icon Integration**: Same as basic buttons
* **Icon Key**: Select from Media Library
* **Icon Position**: Left, Right, or Center
* **Icon Color**: Customizable appearance
**Recommended Icons**:
* Upload arrow (↑)
* Cloud upload (☁↑)
* Folder or document icons
* Plus (+) for add file actions
| Option | Behavior | Use Case |
| --------- | -------------------------- | ------------------------ |
| **Fill** | Expands to container width | Full-width upload areas |
| **Fixed** | Maintains specific width | Consistent button sizing |
| **Auto** | Adjusts to content | Compact layouts |
## Best practices
* Use descriptive labels that explain the button's purpose
* Ensure sufficient color contrast for all button states
* Provide keyboard navigation support
* Include ARIA labels for screen readers
* Test with assistive technologies
* Consider users with motor impairments (adequate button size)
* Place primary actions prominently and consistently
* Use loading states for actions that take time
* Provide clear feedback for successful/failed actions
* Group related buttons logically
* Avoid too many competing call-to-action buttons
* Consider touch targets for mobile users (minimum 44px)
* Maintain consistent button styling across the application
* Use button hierarchy to guide user attention
* Choose icons that are universally understood
* Test button visibility in different lighting conditions
* Consider color-blind users when relying on color alone
* Ensure buttons look clickable and interactive
* Optimize file upload handling for large files
* Implement proper error handling and retry mechanisms
* Provide progress feedback for long-running actions
* Cache frequently used icons and styling
* Test button responsiveness under load
* Consider offline scenarios for critical actions
## Common use cases
### Basic button scenarios
| Use Case | Button Type | Icon Suggestion | Action Type |
| -------------------- | ----------- | --------------- | ------------------- |
| **Form Submission** | Primary | ✓ (checkmark) | Process advancement |
| **Cancel Operation** | Secondary | ✕ (close) | Navigation back |
| **Delete Item** | Ghost | 🗑 (trash) | Data operation |
| **View Details** | Text | 👁 (eye) | Navigation |
| **Save Draft** | Secondary | 💾 (save) | Data operation |
### File upload scenarios
| Use Case | File Types | Size Limit | Validation Notes |
| ------------------- | ----------------- | ---------- | ----------------------------- |
| **Profile Photo** | `image/*` | 5 MB | Square aspect ratio preferred |
| **Document Upload** | `.pdf,.doc,.docx` | 25 MB | OCR processing available |
| **Data Import** | `.csv,.xlsx` | 50 MB | Column validation required |
| **Media Gallery** | `image/*,video/*` | 100 MB | Thumbnail generation |
| **Backup Files** | `.zip,.rar` | 500 MB | Virus scanning enabled |
## Platform considerations
**Enhanced Features**:
* Drag and drop file upload support
* Keyboard shortcuts for common actions
* Hover states and advanced animations
* Context menus for additional options
* Multi-file selection capabilities
**Mobile Optimizations**:
* Touch-friendly button sizes (minimum 44px)
* Native file picker integration
* Camera access for image uploads
* Simplified button layouts for smaller screens
* Gesture-based interactions
**Consistency Features**:
* Shared styling configurations
* Platform-appropriate animations
* Adaptive button sizing
* Consistent behavior patterns
* Universal icon meanings
# Collection
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-component-types/collection/collection
The Collection component functions as a versatile container element, allowing you to iterate through a list of elements and display them according to their specific configurations.
## Configurable properties
* `collectionSource`: This property specifies the process key where a list can be found. It should be a valid array of objects.


## Example usage
Here's an example of configuring a Collection component to display a list of products:

Source collection data example using an [**MVEL business rule**](../../../actions/business-rule-action/business-rule-action):

```java theme={"system"}
output.put("processData", //this is the key
{
"products": [ // this is the source that will populate the data on collection
{
"name": "Product One Plus",
"description": "The plus option",
"type": "normal"
},
{
"name": "Product Two Premium",
"description": "This is premium product",
"type": "recommended"
},
{
"name": "Product Basic",
"description": "The most basic option",
"type": "normal"
},
{
"name": "Gold Product",
"description": "The gold option",
"type": "normal"
}
]
}
);
```
The above configuration will render the Collection as shown below:

Components within a collection use **relative paths** to the collection source. This means that wherever the collection is found inside the process data, the components inside the collection need their keys configured relative to that collection.


To send and display dynamic data received on the keys you define to the frontend, make sure to include the following data structure in your root UI element using Message parameters. For instance, if you want to include data for the `processData` key mentioned earlier, your configuration should resemble this:
```json theme={"system"}
{
"processData": ${processData}
}
```
**When do you need Collection Prototypes?**
* **Single layout for all items**: If all items in your collection should display the same way, add one Collection Prototype and leave PIK/PIV empty
* **Multiple layouts based on item properties**: If items should display differently based on their data (like the `type` field in the example above), add multiple Collection Prototypes with PIK/PIV configured
For detailed configuration guidance, see the Collection Prototype documentation:
***
## Forms in collections
Forms in Collections is a powerful feature that enables you to create dynamic, repeatable forms within collection prototypes. This eliminates the need for custom development when building forms with repeatable sections like adding multiple co-debtors or comment entries.
### Overview
Forms in Collections addresses common pain points in form design:
* **Dynamic Forms**: No longer need custom development to support dynamic forms that show different form elements based on certain conditions
* **Repeatable Sections**: Create forms with repeatable sections like adding co-debtors, comments, or any list of similar items
* **Flexible Validation**: Support both individual item validation and bulk validation scenarios
The feature allows you to drag Form components directly into Collection Prototypes, where they automatically repeat for each item in your data array.

Collection source rules remain the same as regular collections. Each key in collection prototypes uses a prefix computed from the collection source and the index of the object being displayed. At runtime, keys are constructed with the full object path (e.g., `application.clients[0].name`).
### How it works
When you add forms to a collection prototype:
1. **Data Structure**: Your process data contains an array of objects (e.g., `application.clients`)
2. **UI Configuration**: Collection component points to your array, and Form components are placed inside Collection Prototypes
3. **Key Generation**: Form field keys are automatically prefixed with the collection path and item index
4. **Runtime Behavior**: Each collection item gets its own form instance with properly scoped keys
### Implementation guide
Set up your process data with an array to hold the repeatable items:
```javascript theme={"system"}
// Define an object named 'application' to store client information
var application = {
client: {
// Store the client's name
name: "Aang the Last Airbender",
// Store the loan amount details
loanAmount: {
amount: 238989, // The loan amount
code: "USD" // The currency code for the loan amount
},
// List of codebtors associated with the loan
codebtors: [
{
// First codebtor's name and occupation
id: 1,
name: "Sokka",
occupation: "Boomerang Master"
},
{
// Second codebtor's name and occupation
id: 2,
name: "Prince Zuko",
occupation: "Firebending Master"
}
]
}
};
// Output the client information from the application object
output.put("application", { "client": application.client });
```
1. In the UI Designer, add a Collection component
2. Set the **Collection Source** to point to your array (e.g., `application.client.codebtors`)
3. The collection will iterate through each item in the array

1. Add a **Collection Prototype** as a child of your Collection component
2. Configure prototype identifier. This is the key that will be used to identify the prototype.
3. **Drag Form components directly into the Collection Prototype**
4. Configure form fields with relative keys (e.g., `name`, `email`)

This is the key innovation: you can now place Form components directly inside Collection Prototypes, and they will automatically repeat for each collection item.
Configure each form field using relative paths to the collection item data:
* Use keys like `name`, `email`, `type` (not full paths)
* The system automatically constructs the full path at runtime
* Example: `name` becomes `application.client.codebtors[0].name` for the first item

### Saving scenarios
Forms in Collections supports two distinct saving approaches, each suited for different use cases:
**When to use**: Save one collection item at a time, with validation only for that specific item.
**Configuration**:
* Place your Save button **inside the Collection Prototype**
* Configure a **Collection Item Save Key** on the UI action
* The edited object will be saved to this key
* Add a business rule to update the original array and send it back to the frontend

**Behavior**:
* Validates only the forms for the specific collection index where the action is triggered
* Saves individual items as they are edited
* Requires business rule to sync changes back to the main array
You must configure a business rule to update the original array after individual saves to maintain data consistency.
#### Business rule Examples

```javascript theme={"system"}
// This business rule is adapted to the runtime requirements of the FlowX.AI engine.
// ARGS
var application = null;
var client = null;
if (input["application"] != null) {
application = input["application"];
}
if (application != null && application["client"] != null) {
client = application["client"];
}
// Business Rule Code
if (client != null) {
if (!Array.isArray(client["codebtors"])) {
client["codebtors"] = [];
}
var newCodebtor = {"name": ""};
newCodebtor["id"] = client["codebtors"].length + 1;
client["codebtors"].push(newCodebtor);
}
// OUTPUT
if (client != null) {
output["application"] = { "client": client };
} else {
output["error"] = {
"type": "MISSING_FIELD",
"message": "Client is missing"
};
}
```
```javascript theme={"system"}
{ "application": ${application}}
```
**When to use**: Save all collection items at once with validation for all forms.
**Configuration**:
* Place your Save button **outside the Collection** (not in the prototype)
* Configure a **Custom Key** on the UI action to save the entire array
* All forms in the collection will be validated simultaneously
**Behavior**:
* Validates all forms across all collection prototype items
* Saves the entire modified array in one operation
* No additional business rules needed for array synchronization
```javascript theme={"system"}
// Bulk save configuration
{
"customKey": "updatedClients",
"formsToSubmit": ["clientForm"]
}
```
Bulk save is simpler to implement as it doesn't require additional business rules to maintain array consistency.
Demo:
### Key formation and validation
Understanding how keys work in Forms in Collections is crucial for proper configuration:
#### Runtime key construction
Keys are automatically constructed using the full object path:
```javascript Original Key theme={"system"}
// In your form field configuration
"name"
```
```javascript Runtime Key theme={"system"}
// What the system generates at runtime
"application.clients[0].name" // For first item
"application.clients[1].name" // For second item
```
#### Validation behavior
When using **Scenario 1** (action inside prototype):
* Only validates forms for the specific collection index
* Example: If action is triggered on item 2, only `clients[1]` forms are validated
* Other items in the collection are ignored during validation
When using **Scenario 2** (action outside collection):
* Validates all forms across all collection items
* All items must pass validation for the save to succeed
* Comprehensive validation ensures data integrity across the entire collection
### Configuration examples
#### Individual save example
```javascript UI Action Configuration theme={"system"}
{
"event": "CLICK",
"actionType": "SAVE_DATA",
"nodeActionName": "saveClient",
"collectionItemSaveKey": "currentClient",
"formsToSubmit": ["clientDetailsForm"],
"excludeKeys": ["temporaryData"]
}
```
#### Bulk save example
```javascript UI Action Configuration theme={"system"}
{
"event": "CLICK",
"actionType": "SAVE_DATA",
"nodeActionName": "saveAllClients",
"customKeys": ["allClients"],
"formsToSubmit": ["clientDetailsForm"]
}
```
### Troubleshooting
**Symptoms**: Validation errors not showing or validation not working as expected
**Solutions**:
* Ensure `formsToSubmit` includes the correct form identifiers
* Check that form fields have proper relative keys configured
* Verify the UI action is placed in the correct location (inside or outside prototype)
* For individual saves, confirm the Collection Item Save Key is configured
**Symptoms**: Form data not persisting or appearing in wrong location
**Solutions**:
* For individual saves: Ensure business rule updates the original array
* For bulk saves: Verify Custom Key configuration captures the full array
* Check key formation by examining the process data structure
* Confirm the Collection Source points to the correct array
**Limitation**: Form elements within collections cannot be hidden based on variables outside the collection
**Workaround**: Use keys from within the collection item object for conditional display. The mechanics of collections require using data from within the current collection item scope.
### Frequently asked questions
No, the mechanics of collections require using keys from within the collection item object. You cannot use variables outside the collection scope to control form element visibility within the collection.
You can configure **Exclude Keys** in the UI action to handle null values. This prevents null or empty values from being included in the saved data.
Keys are constructed with the full object path including array indices. For example, a field with key `name` becomes `application.clients[0].name` for the first collection item.
* **Individual Save (Scenario 1)**: Yes, you need a business rule to update the original array
* **Bulk Save (Scenario 2)**: No, the entire array is saved directly without additional business rules
### Best practices
Use Individual Save for real-time editing where users work on one item at a time. Use Bulk Save for form-completion workflows where all data is submitted together.
Use descriptive, relative keys in your form fields. Let the system handle path construction automatically for better maintainability.
Plan your validation approach early. Individual saves validate per item, bulk saves validate everything - choose based on your user experience goals.
Design your array structure to include all necessary fields from the start. Adding fields later may require updates to existing prototypes.
This feature significantly simplifies building dynamic forms with repeatable sections, eliminating the need for custom development while providing flexible validation and saving options.
# Collection Prototype
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-component-types/collection/collection-prototype
Create dynamic, data-driven interfaces with different layouts based on item properties using collection prototypes.
Collection prototypes allow you to display items within a collection using different layouts based on their properties, creating more dynamic and context-aware user interfaces.
## What are collection prototypes?
Collection prototypes are specialized components that define different display formats for items within a single collection. They act as templates that are applied conditionally based on item properties, allowing you to:
* Display collection items with different layouts based on their data properties
* Create visually distinct displays for featured or highlighted items
* Apply specialized formatting for different item types or states
* Integrate custom components for enhanced functionality
* Add interactive features like item selection
Collection prototypes always work as child components within a parent [Collection component](../collection). While a Collection iterates through a data array, Collection Prototypes determine how each individual item should be displayed.
## How collection prototypes work
### Core concepts
Collection prototypes use a simple but powerful mechanism to determine which layout to apply to each item. The behavior depends on whether you have one or multiple prototypes:
The data property used to determine which prototype to apply (e.g., `type`, `status`, `priority`)
The specific value that triggers this prototype layout (e.g., `featured`, `active`, `high`)
### When to configure PIK and PIV
**Configuration**: PIK and PIV are **optional** and should **not** be configured
If you have only one collection prototype, the system will automatically use that prototype for all items in the array, regardless of their properties. In this case, leave both PIK and PIV empty.
**Configuration**: PIK and PIV are **required** and **both must be completed**
When using multiple collection prototypes, both PIK and PIV must be properly configured for each prototype. The configuration is only valid if both fields are completed.
When the collection renders, each item is evaluated against all available prototypes. The first prototype whose identifier key and value match the item's data is used to render that item.
### Visual examples
**Use case**: Displaying a list of menu items where all items have the same layout
```javascript theme={"system"}
// Data structure - all items use the same prototype
[
{
"name": "Margherita Pizza",
"price": 12.99,
"description": "Classic tomato and mozzarella"
},
{
"name": "Caesar Salad",
"price": 8.99,
"description": "Fresh romaine with parmesan and croutons"
}
]
```
**Configuration**:
* PIK: *(leave empty)*
* PIV: *(leave empty)*
Since all items use the same layout, no prototype identification is needed.
**Use case**: Restaurant menu with different layouts for main courses vs desserts
```javascript theme={"system"}
// Data structure with type field for prototype identification
[
{
"name": "pizza",
"type": "main course",
"price": 15.99,
"ingredients": ["tomato", "mozzarella", "basil"]
},
{
"name": "cremsnit",
"type": "dessert",
"price": 6.99,
"sweetness": "medium"
}
]
```
**Configuration for main course prototype**:
* PIK: `type`
* PIV: `main course`
**Configuration for dessert prototype**:
* PIK: `type`
* PIV: `dessert`
Each item's `type` property determines which prototype layout to use.



## Implementation guide
### 1. Prepare your data
Before implementing collection prototypes, you need to prepare the data structure that will determine which prototype applies to each item.
#### Using a service task node
The most common approach is to use a Service Task node with business rules:
In the FlowX.AI Designer, add a **Service Task** node before your User Task node and connect them with a sequence flow.

Select your Service Task node, go to the **Business Rules** tab, and add a new business rule or edit an existing one.

Use JavaScript to create your data structure and assign it to the process context:
```javascript theme={"system"}
// Create the data structure for products
const products = [
{
"name": "Product One Plus",
"description": "The plus option",
"type": "normal", // This property will determine which prototype to use
"price": 99.99
},
{
"name": "Product Two Premium",
"description": "This is premium product",
"type": "recommended", // This will use a different prototype
"price": 149.99
},
{
"name": "Product Basic",
"description": "The most basic option",
"type": "normal",
"price": 49.99
}
];
// Add the products array to the process data
output.put("products", products);
```
Save your configuration, and test your business rule by using the **Test Rule** feature in the business rules editor to make sure the data is correctly added to the process context.

### 2. Create the UI components
Once your data is prepared, you can implement the collection and its prototypes in the UI Designer:
In the FlowX.AI Designer, create or select an existing **User Task** node in your process and click the **brush icon** to open the UI Designer.

Add a **root component** (like a Card or Container) to your node, then add a **Collection** component inside it. Configure the Collection's **source** to point to your data array (e.g., `products`).

The `collectionSource` property specifies the process key where your list can be found. It should be a valid array of objects. For example, if your data is at `processData.products`, you would set the source to `products`.
For a single prototype that applies to all items:
1. Click on your Collection component to select it
2. Add a **Collection Prototype** as a child component
3. **Leave PIK and PIV empty** - no configuration needed
4. The prototype will automatically apply to all items in the collection
This is the most common scenario when all items in your collection should have the same layout.
For different display types based on item properties:
1. Click on your Collection component to select it
2. Add a **Collection Prototype** as a child component
3. Configure the prototype's settings:
* **Prototype Identifier Key**: The field to check (e.g., `type`)
* **Prototype Identifier Value**: The value to match (e.g., `normal`)

4. Repeat for each different prototype you need, using different identifier values
Both PIK and PIV must be configured for each prototype when using multiple prototypes.
For each prototype, add the UI components that will display your data:
1. Select a Collection Prototype
2. Add components like **Text**, **Image**, **Button**, etc.
3. Configure each component to use relative paths to the collection item data saved in the Data Model:
* Use text UI element with the key `${name}`
* Use text UI element with the key `${description}`

Components within a collection use **relative paths** to the collection source. This means that wherever the collection is found inside the process data, the components inside the collection need their keys configured relative to that collection.

### 3. Add interactivity
To make your collection items interactive, such as allowing users to select an item:
Add an [Action](../../../actions/actions) to your [User task node](../../../node/user-task-node):
1. Go back to the process designer
2. Select your User Task node
3. Go to the **Actions** tab
4. Add a new action with:
* Type: **Manual**
* Name: (e.g., `selectItem`)

**Configuration options:**
* Set as **Manual** since users trigger it
* Mark as **Mandatory** if selection is required to proceed
* Enable **Repeatable** for changeable selections
Add a UI action to your collection prototype:
1. Return to the UI Designer
2. Select the component in your prototype that should trigger the action
3. In the Settings panel, add a UI Action
4. Add a **Collection Item Save Key**.
5. Add a **Custom Key** and make sure it matches the **Collection Item Save Key**.

Save your changes and test your process to verify that:
* Different items display with the correct prototype layouts
* Interactive elements work as expected
* Selected data is properly saved to your process data


## Best practices
### Working with custom components
When integrating custom components into collection prototypes, follow these best practices:
1. **Use relative paths for data access**
* Configure input keys relative to collection items
* Example: Use `name` instead of `app.clients.name`
2. **Maintain consistent data structures**
* Ensure required data exists in collection items
* Follow consistent data patterns across all items
### Data access patterns
Components use full paths from data root:
```jsx theme={"system"}
// Input keys:
// app.name
// app.signatureImageURL
data: {
app: {
name: "John Doe",
signatureImageURL: "http://example.com/signature1.png"
}
}
```
Components use relative paths:
```jsx theme={"system"}
// Input keys:
// name
// signatureImageURL
data: {
name: "John Doe",
signatureImageURL: "http://example.com/signature1.png"
}
```
### Performance optimization
* Limit the number of items in your collection when possible
* Simplify complex prototype layouts
* Consider pagination for large data sets
* Optimize images and other media within prototypes
* Avoid deeply nested components within prototypes
**Pro tips:**
* Test your collection prototypes with various data scenarios
* Verify data flow through the entire selection process
* Monitor the process data for correct updates
* Ensure your UI provides clear visual feedback when an item is selected
## Troubleshooting
When working with collection prototypes, you might encounter some common issues:
### Common issues and solutions
**Symptoms:**
* Collection items appear with incorrect layouts
* All items use the same prototype regardless of identifier values
* Some items don't render at all
**Solutions:**
**For single prototype scenarios:**
* Ensure PIK and PIV fields are **left empty** - they should not be configured
* If you accidentally configured PIK/PIV for a single prototype, clear both fields
**For multiple prototype scenarios:**
* Verify that your **Prototype Identifier Key** exactly matches the property name in your data
* Ensure the **Prototype Identifier Value** matches the expected values in your data
* **Both PIK and PIV must be configured** - partial configuration will not work
* Check for case sensitivity issues in both keys and values
* Validate your data structure using the process debugger
* Confirm that the parent Collection component has the correct source path
Configuration is only valid when both PIK and PIV are properly completed for multiple prototypes, or both are left empty for single prototypes.
**Symptoms:**
* Clicking on items doesn't trigger the expected action
* Selected data isn't saved to the process
* No visual feedback when items are selected
**Solutions:**
* Confirm that the **Collection Item Save Key** matches exactly with the **Data to send** field in your node action
* Verify that your node action is properly configured as **Manual** and **Repeatable** if needed
* Check that the UI action is attached to the correct element within the prototype
* Ensure the node action has the correct permissions and is properly linked
* Verify that your root UI element includes the necessary Message parameters to pass data
**Symptoms:**
* Components inside prototypes show empty or incorrect data
* Dynamic content doesn't update properly
* Error messages in the console related to undefined properties
**Solutions:**
* Remember that components inside collections must use relative paths (e.g., `name` instead of `app.clients.name`)
* Verify your data structure matches what the components expect
* Use the process debugger to inspect the actual data being passed to the collection
* Check for null or undefined values that might cause rendering issues
* Ensure your data is properly structured as an array of objects
### Known limitations
* **Nested collections** (collections inside collection prototypes) may cause performance issues and should be used sparingly
* **Deep data structures** might require careful handling of relative paths for proper data binding
### Debugging tips
1. **Use process data inspection:**
* Monitor the process data before and after interactions with collection prototypes
* Verify that selected items are correctly saved to the expected process data keys
2. **Test with simplified data:**
* Start with a minimal data set to confirm basic functionality
* Gradually add complexity to identify where issues might occur
3. **Isolate components:**
* Test individual UI components outside the collection context
* Add components to prototypes one by one to identify problematic elements
## Frequently asked questions
Yes, you can create platform-specific overrides for your collection prototypes. Configure different layouts, spacing, and styling for Web, iOS, and Android platforms through the platform tabs in the UI Designer.
If an item doesn't have the specified identifier key or value, it won't match any prototype. Consider adding a default prototype with a common value like "default" and ensure all items have at least this value as a fallback.
**Leave PIK and PIV empty** when:
* You have only one collection prototype
* All items in your collection should use the same layout
**Configure both PIK and PIV** when:
* You have multiple collection prototypes
* Different items should display with different layouts based on their properties
* Both fields must be completed for the configuration to work
This logic has been unchanged since 2021 and is a fundamental aspect of how collection prototypes work.
No, prototype identifier values must be static strings that exactly match the values in your data. However, you can transform your data before it reaches the collection to achieve dynamic prototype selection.
There's no hard limit on the number of prototypes, but for performance and maintainability reasons, it's recommended to keep the number reasonable (typically under 5-7 different prototypes).
A **Collection** is a container that iterates through an array of data items, while a **Collection Prototype** defines how each individual item should be displayed based on its properties. You need at least one Collection Prototype inside a Collection, but you can have multiple prototypes to handle different item types or states.
## Code Examples
### Different prototype layouts based on item status
This example shows how to display items differently based on their status (active, pending, completed):
```java Process Data Setup theme={"system"}
// Setting up process data with items of different statuses
output.put("processData", {
"tasks": [
{
"id": "task-001",
"title": "Review application",
"description": "Initial review of customer application",
"status": "active",
"priority": "high"
},
{
"id": "task-002",
"title": "Verify documents",
"description": "Check submitted documentation for completeness",
"status": "pending",
"priority": "medium"
},
{
"id": "task-003",
"title": "Send confirmation",
"description": "Email confirmation to customer",
"status": "completed",
"priority": "low"
}
]
});
```
```javascript Collection Configuration theme={"system"}
// Collection component configuration
{
"type": "COLLECTION",
"settings": {
"source": "tasks",
"direction": "vertical"
},
"children": [
// Active task prototype
{
"type": "COLLECTION_PROTOTYPE",
"settings": {
"prototypeIdentifierKey": "status",
"prototypeIdentifierValue": "active"
},
"children": [
// Active task UI elements with highlighted styling
]
},
// Pending task prototype
{
"type": "COLLECTION_PROTOTYPE",
"settings": {
"prototypeIdentifierKey": "status",
"prototypeIdentifierValue": "pending"
},
"children": [
// Pending task UI elements with standard styling
]
},
// Completed task prototype
{
"type": "COLLECTION_PROTOTYPE",
"settings": {
"prototypeIdentifierKey": "status",
"prototypeIdentifierValue": "completed"
},
"children": [
// Completed task UI elements with muted styling
]
}
]
}
```
### Multiple identifier keys for complex conditions
You can use multiple collection prototypes with different identifier keys to handle complex display logic:
```java Process Data with Multiple Attributes theme={"system"}
// Setting up process data with items having multiple attributes
output.put("processData", {
"notifications": [
{
"id": "notif-001",
"message": "Your application has been approved",
"type": "success",
"priority": "high",
"read": false
},
{
"id": "notif-002",
"message": "Please review updated terms",
"type": "info",
"priority": "low",
"read": true
},
{
"id": "notif-003",
"message": "Action required: Missing information",
"type": "warning",
"priority": "high",
"read": false
}
]
});
```
```javascript Multiple Prototype Configuration theme={"system"}
// Collection with multiple prototype conditions
{
"type": "COLLECTION",
"settings": {
"source": "notifications",
"direction": "vertical"
},
"children": [
// High priority unread success notification
{
"type": "COLLECTION_PROTOTYPE",
"settings": {
"prototypeIdentifierKey": "type",
"prototypeIdentifierValue": "success",
"additionalConditions": [
{
"key": "priority",
"value": "high"
},
{
"key": "read",
"value": false
}
]
},
"children": [
// UI elements for high priority unread success notifications
]
},
// Other prototypes for different combinations...
]
}
```
### Nested data structures
Working with nested data in collection prototypes:
```java Nested Data Structure theme={"system"}
// Setting up process data with nested objects
output.put("processData", {
"orders": [
{
"id": "order-001",
"customer": {
"name": "John Smith",
"tier": "premium"
},
"items": [
{ "name": "Product A", "quantity": 2 },
{ "name": "Product B", "quantity": 1 }
],
"status": "processing"
},
{
"id": "order-002",
"customer": {
"name": "Jane Doe",
"tier": "standard"
},
"items": [
{ "name": "Product C", "quantity": 3 }
],
"status": "shipped"
}
]
});
```
```javascript Accessing Nested Data theme={"system"}
// Collection prototype accessing nested data
{
"type": "COLLECTION",
"settings": {
"source": "orders",
"direction": "vertical"
},
"children": [
// Premium customer prototype
{
"type": "COLLECTION_PROTOTYPE",
"settings": {
"prototypeIdentifierKey": "customer.tier",
"prototypeIdentifierValue": "premium"
},
"children": [
// UI elements for premium customers
{
"type": "TEXT",
"settings": {
"text": "Premium Customer",
"style": "heading"
}
},
{
"type": "TEXT",
"settings": {
"text": "${customer.name}",
"style": "subheading"
}
},
// Collection for order items
{
"type": "COLLECTION",
"settings": {
"source": "items",
"direction": "horizontal"
},
"children": [
// Item prototype
{
"type": "COLLECTION_PROTOTYPE",
"settings": {},
"children": [
{
"type": "TEXT",
"settings": {
"text": "${name} (${quantity})",
"style": "body"
}
}
]
}
]
}
]
},
// Standard customer prototype
{
"type": "COLLECTION_PROTOTYPE",
"settings": {
"prototypeIdentifierKey": "customer.tier",
"prototypeIdentifierValue": "standard"
},
"children": [
// UI elements for standard customers
]
}
]
}
```
## Related components
The parent component that iterates through data arrays and contains Collection Prototypes
Add interactivity to your Collection Prototypes with UI Actions
# Checkbox
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-component-types/form-elements/checkbox-form-field
A checkbox form field is an interactive element in a web form that provides users with multiple selectable options. It allows users to choose one or more options from a pre-determined set by simply checking the corresponding checkboxes.

This type of form field can be used to gather information such as interests, preferences, or approvals, and it provides a simple and intuitive way for users to interact with a form.
## Configuring the Checkbox element
### Checkbox generic settings
The available configuration options for this form element are:
* [**Process data key**](#process-data-key)
* [**Properties**](#properties)
* [**Datasource**](#datasource)
* [**Validators**](#validators)
* [**Expressions**](#expressions)
* [**UI actions**](#ui-actions)
* [**Checkbox styling**](#checkbox-styling)
#### Process data key
Process data key establishes the binding between the checkbox element and process data, enabling its later use in [decisions](../../../node/exclusive-gateway-node), [business rules](../../../actions/business-rule-action/business-rule-action) or [integrations](../../../node/message-send-received-task-node#from-integration).
#### Properties
* **Label**: The visible label for the checkbox.
* **Helpertext**: Additional information about the checkbox element, which can be optionally hidden within an infopoint.

#### Datasource configuration
* **Default value**: The default value of the checkbox.
* **Source Type**: The source can be Static, Enumeration, or Process Data.
* **Add option** : Define label and value pairs here.

#### Validators
The following validators can be added to a checkbox: `required` and `custom` (more details [here](../../validators)).

#### Hide/disable expressions
The checkbox behavior can be defined using JavaScript expressions for hiding or disabling the element. The following properties can be configured for expressions:
* **Hide condition**: A JavaScript expression that hides the checkbox element when it evaluates to the specified result.
* **Disabled condition**: A JavaScript expression that disables the checkbox when it returns a truthy value.
These expressions can be used with any form element. See the following example for details:
It's important to make sure that disabled fields have the same expression configured under the path expressions → hide.
#### UI actions
UI actions can be added to the checkbox element to define its behavior and interactions.
* **Event**: Possible value - `CHANGE`.
* **Action Type**: Select the type of the action to be performed.
For more details on how to configure a UI action, click [**here**](../../ui-actions).
### Checkbox settings overrides
There are instances where you may need to tailor settings configured in the **Generic** settings tab. This proves especially beneficial when you wish to adjust these settings to appear differently across various platforms such as Web, Android, or iOS.
Available override settings:
* Properties:
* **Label**: Override the checkbox label.
* **Helper**: Override helper text/info point.
* Expressions:
* **Hide**: Override the hide expression.
Overrides can always be imported/pushed from one platform to another:

### Checkbox styling
* **Type**: Set the type of the checkbox. Possible values:
* bordered
* clear
Adjusting the size of components is crucial for a responsive design. Fit W (width) offers three options:
* **fill**: Fills the available space.
* **fixed**: Maintains a fixed width.
* **auto**: Adjusts the width automatically based on content.
* **Direction**: Determines the orientation of the layout, which can be either horizontal or vertical.
* **Gap**: Specifies the size of the space between rows and columns.
* **Columns**: Indicates the number of columns in the layout.
Similar styling considerations apply to iOS as for web.
However, for mobile applications, there's an additional sizing style property specific to select elements:
* **Height** (pt - points): Determines the vertical size of the select element on the screen.
Similar styling considerations apply to Android as for web.
However, for mobile applications, there's an additional sizing style property specific to select elements:
* **Height** (dp - density-independent pixels): Determines the vertical size of the select element on the screen.
#### Checkbox style overrides options
Theme overrides refer to the ability to modify or customize the appearance and behavior of UI components by overriding default theme settings. This can be applied at various levels, such as specific elements or entire sections, and can be platform-specific (Web, iOS, Android).

Style options:
* Border radius **\[TEXT]**
* Border width **\[TEXT]**
* Text style **\[FONT]**

* Default state
* Text color **\[COLOR]**
* Disabled state
* Text color **\[COLOR]**
* Text style **\[FONT]**

* Text color **\[COLOR]**
* Text style **\[FONT]**
* Helper Tooltip
* Text style **\[FONT]**
* Text color **\[COLOR]**
* Background color **\[COLOR]**
* Icon Color **\[COLOR]**

* Text color **\[COLOR]**
* Text style **\[FONT]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Icon color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Icon color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Icon color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Icon color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Icon color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Icon color **\[COLOR]**

You can import or push the overrides from one platform to another without having to configure them multiple times.

# Datepicker
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-component-types/form-elements/datepicker-form-field
The datepicker (Calendar Picker) is a lightweight component that allows end users to enter or select a date value.

The datepicker (Calendar Picker) is a lightweight component that allows end users to enter or select a date value.
The default datepicker value is `DD.MM.YYYY`.
## Configuring the datepicker element
### Datepicker generic settings
The available configuration options for this form element are:
* [**Process data key**](#process-data-key)
* [**Properties**](#properties)
* [**Datasource**](#datasource)
* [**Validators**](#validators)
* [**Expressions**](#expressions)
* [**UI actions**](#ui-actions)
* [**Datepicker styling**](#datepicker-styling)
#### Process data key
Process data key establishes the binding between the datepicker element and process data, enabling its later use in [decisions](../../../node/exclusive-gateway-node), [business rules](../../../actions/business-rule-action/business-rule-action) or [integrations](../../../node/message-send-received-task-node#from-integration).
#### Properties
* **Label**: The visible label for the datepicker element.
* **Placeholder**: Text that appears within the datepicker element when it is empty.
* **Min Date**: Set the minimum valid date selectable in the datepicker.
* **Max Date**: Set the maximum valid date selectable in the datepicker.
* **Min Date, Max Date error**: When a date is introduced by typing, define the error message to be displayed.
* **Helpertext**: Additional information about the datepicker element, which can be optionally hidden within an infopoint.

#### Datasource configuration
**Default Value**: The default values of the datepicker element, this will autofill the datepicker when you will run the process.
#### Validators
The following validators can be added to a datepicker: `required`, `custom`, `isSameOrBeforeToday` or `isSameOrAfterToday` (more details [here](../../validators)).

#### Hide/disable expressions
The datepicker behavior can be defined using JavaScript expressions for hiding or disabling the element. The following properties can be configured for expressions:
* **Hide condition**: A JavaScript expression that hides the datepicker element when it returns a truthy value.
* **Disabled condition**: A JavaScript expression that disables the datepicker element when it returns a truthy value.
It's important to make sure that disabled fields have the same expression configured under the path expressions → hide.
#### UI actions
UI actions can be added to the datepicker element to define its behavior and interactions.
* **Event**: Possible value - `CHANGE`.
* **Action Type**: Select the action type.
For more details on how to configure a UI action, click [**here**](../../ui-actions).

### Datepicker settings overrides
There are instances where you may need to tailor settings configured in the **Generic** settings tab. This proves especially beneficial when you wish to adjust these settings to appear differently across various platforms such as Web, Android, or iOS.
Available override settings:
* Properties:
* **Label**: Override the datepicker label.
* **Helper**: Override helper text/info point.
* Expressions:
* **Hide**: Override the hide expression.
Overrides can always be imported/pushed from one platform to another:

### Datepicker styling
#### Sizing
Adjusting the size of components is crucial for a responsive design. Fit W (width) offers three options:
* **fill**: Fills the available space.
* **fixed**: Maintains a fixed width.
* **auto**: Adjusts the width automatically based on content.
Similar styling considerations apply to iOS as for web.
However, for mobile applications, there’s an additional sizing style property:
* **Height** (pt - points): Determines the vertical size of the datepicker element on the screen.
Similar styling considerations apply to Android as for web.
However, for mobile applications, there’s an additional sizing style property:
* **Height** (dp - density-independent pixels): Determines the vertical size of the datepicker element on the screen.
#### Datepicker style overrides options
Theme overrides refer to the ability to modify or customize the appearance and behavior of UI components by overriding default theme settings. This can be applied at various levels, such as specific elements or entire sections, and can be platform-specific (Web, iOS, Android).

Style options:
* Border radius **\[TEXT]**
* Border width **\[TEXT]**
* Text style **\[FONT]**

* Default state
* Text color **\[COLOR]**
* Disabled state
* Text color **\[COLOR]**
* Text style **\[FONT]**

* Text color **\[COLOR]**
* Text style **\[FONT]**
* Helper Tooltip
* Text style **\[FONT]**
* Text color **\[COLOR]**
* Background color **\[COLOR]**
* Icon Color **\[COLOR]**

* Text color **\[COLOR]**
* Text style **\[FONT]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Right icon color **\[COLOR]**
* Left icon color **\[COLOR]**
* Prefix/Suffix color **\[COLOR]**
* Placeholder color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Right icon color **\[COLOR]**
* Left icon color **\[COLOR]**
* Prefix/Suffix color **\[COLOR]**
* Placeholder color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Right icon color **\[COLOR]**
* Left icon color **\[COLOR]**
* Prefix/Suffix color **\[COLOR]**
* Placeholder color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Right icon color **\[COLOR]**
* Left icon color **\[COLOR]**
* Prefix/Suffix color **\[COLOR]**
* Placeholder color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Right icon color **\[COLOR]**
* Left icon color **\[COLOR]**
* Prefix/Suffix color **\[COLOR]**
* Placeholder color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Right icon color **\[COLOR]**
* Left icon color **\[COLOR]**
* Prefix/Suffix color **\[COLOR]**
* Placeholder color **\[COLOR]**

You can import or push the overrides from one platform to another without having to configure them multiple times.

# Input field
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-component-types/form-elements/input-form-field
Enable users to input and validate various types of data with flexible configuration options and platform-specific customization.
An input field is a versatile form element that enables users to enter data with built-in validation, conditional visibility, and cross-platform compatibility. Input fields can be customized for different data types and use cases, from simple text entry to specialized formats like email addresses and code snippets.

## Configuration overview
Configure your input field using these main sections:
Process data binding, labels, and input types
Default values, validators, and data formatting
Hide/disable conditions and UI actions
Visual appearance and platform-specific overrides
## Basic configuration
### Process data key
The process data key establishes the binding between the input element and process data, enabling its later use in:
* [Decision nodes](../../../node/exclusive-gateway-node)
* [Business rule actions](../../../actions/business-rule-action/business-rule-action)
* [Integration tasks](../../../node/message-send-received-task-node#from-integration)
### Core properties
**Purpose**: The visible text displayed above or alongside the input field
**Features**:
* Supports full Markdown syntax for rich formatting
* Can include links, emphasis, and other Markdown elements
* Responsive across all platforms
Use Markdown to enhance your labels with **bold**, *italic*, or [linked text](https://www.markdownguide.org/cheat-sheet/).

Choose the appropriate input type for your data:
| Type | Description | Validation Features | Best Used For |
| ------------ | ------------------------- | ------------------------- | --------------------------- |
| **Text** | General text input | Length, pattern matching | Names, titles, descriptions |
| **Number** | Numeric values only | Min/max values, decimals | Quantities, prices, scores |
| **Email** | Email address format | Built-in email validation | Contact information |
| **Password** | Masked text input | Strength requirements | Authentication, security |
| **Code** | Monospace code formatting | Only digits | Validating OTPs |
The **Code** type is particularly useful for technical forms where users need to input structured data, configuration settings, or code snippets with proper formatting.
**Purpose**: Provide hints or examples of expected input
**Best Practices**:
* Keep it concise and helpful
* Show format examples (e.g., "[john@example.com](mailto:john@example.com)")
* Avoid using placeholder as primary label
* Consider accessibility for screen readers
**Prefix**: Text or symbols appearing before the input
* Currency symbols (\$, €, £)
* Protocol indicators (https\://, @)
* Unit prefixes
**Suffix**: Text or symbols appearing after the input
* Units of measurement (kg, cm, %)
* Domain extensions (.com, .org)
* Contextual indicators
**Examples**:
```
$ [input field] USD // Prefix: $, Suffix: USD
@ [input field] // Prefix: @
[input field] % // Suffix: %
```
**Has Clear**: Adds an ✕ button to quickly clear the input content
* Improves user experience on mobile devices
* Useful for search fields and optional inputs
**Helper Text**: Additional context or instructions
* Can be displayed as regular text below the field
* Can be hidden within an expandable info point
* Supports Markdown formatting
**Update on Blur**: Controls when data is saved
* Triggers validation when user leaves the field
* Optimizes performance by reducing frequent updates
## Data configuration
### Datasource configuration
Configure the data source and default values for your input field:
**Default Value**: Set the initial value when the field is first displayed
* Static values for consistent defaults
* Dynamic values from process data
* Calculated values from expressions

Consider the user experience impact of default values - they should help users rather than create confusion.
### Validation rules
Ensure data quality with comprehensive validation options:
| Validator | Purpose | Configuration |
| -------------- | -------------------------- | --------------------------- |
| **Required** | Ensures field is not empty | Error message customization |
| **Min Length** | Minimum character count | Specify minimum number |
| **Max Length** | Maximum character count | Specify maximum number |
| **Email** | Valid email format | Works with email input type |
| **Pattern** | Custom regex validation | Define regex pattern |
| Validator | Purpose | Use Case |
| ------------------ | ------------------------- | ----------------------- |
| **Min Value** | Minimum numeric value | Age limits, prices |
| **Max Value** | Maximum numeric value | Quantity limits, scores |
| **Decimal Places** | Control decimal precision | Currency, measurements |
| Validator | Purpose | Application |
| --------------- | -------------------------- | ------------------------------ |
| **Past Date** | Date must be in the past | Birth dates, historical events |
| **Future Date** | Date must be in the future | Appointments, deadlines |
| **Date Range** | Within specific date range | Event scheduling, availability |
**Purpose**: Complex business logic validation
**Implementation**: Write custom JavaScript validation functions
**Examples**:
* Cross-field validation
* External API validation
* Business rule enforcement
**Documentation**: [Learn more about custom validators](../../validators)

## Behavior configuration
### Hide/disable expressions
Define the input field's behavior using JavaScript expressions to control its visibility or disablement:
* **Hide condition**: A JavaScript expression that hides the input field when it evaluates to the specified result.
* **Disabled condition**: A JavaScript expression that disables the input field when it returns a truthy value.
#### Hide expression example
We can use a rule to hide an input field if another field has a null value (it is not filled). For example, the "Mortgage" input field, which remains hidden until users fill in the "Income" field:

**Rule used:**
```javascript theme={"system"}
${application.input.income} === null || ${application.input.income} === ""
```

Result:

#### Disable example
You can use a disabled condition to disable an input element based on values from other fields. When you type 'TEST' in the first input (Name) the second input (Test) will be disabled:

**Rule used:**
```javascript theme={"system"}
${application.input.name} === 'TEST'
```

It's important to make sure that disabled fields have the same expression configured under the path expressions → hide.
### UI actions
Configure interactive behaviors for your input field:
| Event | Description | Common Use Cases |
| ---------- | ---------------------------- | --------------------------------------------------------------- |
| **CHANGE** | Triggered when input changes | Update related fields, trigger calculations, show/hide elements |
| **FOCUS** | When field receives focus | Load dynamic data, show helper content |
| **BLUR** | When field loses focus | Validate input, save data, format display |

**Action Types Available**:
* Navigate to different pages
* Execute business rules
* Call external services
* Update other form elements
* Trigger process actions
For detailed UI action configuration, see our [UI Actions Guide](../../ui-actions).
## Platform customization
### Settings overrides
Customize your input field differently across platforms:
**Override Options**:
* Label text for desktop terminology
* Placeholder text optimized for keyboard input
* Helper text with extended descriptions
* Prefix/suffix for web-specific formatting
**Web-Specific Features**:
* Keyboard shortcuts integration
* Advanced formatting options
* Enhanced validation messages
**Override Options**:
* Shorter labels for mobile screens
* Touch-optimized placeholder text
* Simplified helper text
* Mobile-appropriate prefix/suffix
**Mobile-Specific Features**:
* Input type optimization for mobile keyboards
* Touch-friendly clear buttons
* Platform-specific validation styling

Override settings can be imported and pushed between platforms, saving configuration time and ensuring consistency.
## Visual styling
### Layout options
**Left Icon**: Visual cue at the start of the input
* Search icons for search fields
* User icons for name fields
* Lock icons for password fields
**Right Icon**: Action or status indicator
* Clear buttons (×)
* Validation status (✓ or ⚠)
* Dropdown arrows
**Icon Configuration**:
* Select from Media Library
* Custom icon keys
* Platform-specific icons
| Option | Behavior | Best For |
| --------- | ------------------------------ | ------------------ |
| **Fill** | Expands to use available space | Full-width forms |
| **Fixed** | Maintains specified width | Consistent layouts |
| **Auto** | Adjusts based on content | Dynamic forms |
**Platform Adaptations**:
* iOS-specific input styling
* Native keyboard integration
* Apple Design Guidelines compliance
* iOS-specific validation styling
**Platform Adaptations**:
* Material Design principles
* Android keyboard optimization
* Platform-specific animations
* Android validation patterns
### Theme customization
Override default styling for complete visual control:
**Border & Background**:
* Border colors for different states
* Background color customization
* Border radius and thickness
**Text Styling**:
* Font family and size
* Text color for different states
* Placeholder text styling
**States**:
* Default, focused, disabled, error states
* Hover effects for web
* Touch feedback for mobile
**Label Customization**:
* Typography controls
* Color options
* Positioning and alignment
**Helper Text**:
* Font styling
* Color coordination
* Tooltip appearance
**Error States**:
* Error message styling
* Input border color changes
* Icon integration
**Success States**:
* Success indicators
* Positive feedback styling
* Completion animations
## Best practices
* Provide clear, descriptive labels
* Use appropriate input types for better mobile experience
* Ensure sufficient color contrast
* Include helper text for complex fields
* Test with screen readers
* Use semantic HTML attributes
* Choose appropriate input types for the data
* Provide helpful placeholder text and examples
* Use validation that guides rather than frustrates
* Consider progressive disclosure for complex forms
* Implement auto-save functionality where appropriate
* Group related inputs logically
* Use meaningful process data keys
* Plan for data validation early in development
* Consider data format consistency across platforms
* Implement proper error handling
* Document validation rules for maintenance
* Test with real-world data scenarios
## Common use cases
| Scenario | Input Type | Validation | Additional Features |
| ----------------- | -------------- | ---------------------- | --------------------------- |
| **Contact Form** | Text, Email | Required, Email format | Clear buttons, helper text |
| **Login Form** | Text, Password | Required, Min length | Security indicators |
| **Search Field** | Text | Min length | Auto-complete, clear button |
| **OTP codes** | Code | Pattern matching | |
| **Numeric Input** | Number | Min/max values | Prefix/suffix for units |
| **Address Entry** | Text | Format validation | Auto-complete integration |
# Multi select
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-component-types/form-elements/multi-select
The Multi Select form field is an element that allows users to choose multiple options from a list of choices. Each option consists of a label, which is displayed in the dropdown menu, and a corresponding value, which is stored upon selection.

For example, consider a scenario where you have options "Sports" with the value "S", "Music" with the value "M", and "Reading" with the value "R". When a user selects both "Sports" and "Music" in the process instance, the values \["S", "M"] will be stored as an array for the "Multi Select" key.
## Configuring the Multi Select element
### Multi Select generic settings
These allow you to customize the generic settings for the Multi Select element:
* [**Process data key**](#process-data-key)
* [**Properties**](#properties)
* [**Datasource**](#datasource-configuration)
* [**Validators**](#validators)
* [**Expressions**](#expressions)
* [**UI actions**](#ui-actions)
* [**Multi Select styling**](#multi-select-styling)
#### Process data key
Process data key establishes the binding between the multi select element and process data, enabling its later use in [decisions](../../../node/exclusive-gateway-node), [business rules](../../../actions/business-rule-action/business-rule-action) or [integrations](../../../node/message-send-received-task-node#from-integration).
The Multi Select component stores selected values as an array, similar to how a Checkbox works. This differs from the single Select component, which stores only a single value.
#### Properties
* **Label**: The visible label for the multi select element.
* **Placeholder**: Text that appears within the multi select element when it is empty.
* **Empty message**: Text displayed for custom type when no results are found.
* **Helpertext**: Additional information about the multi select element, which can be optionally hidden within an infopoint.
* **Show selections**: Controls how selected items are displayed. Available display modes:
* **Comma separated**: Selected values are displayed as a comma-separated text string within the input field (e.g., "Option 1, Option 2, Option 3")
* **Chips inside**: Selected values appear as chips/badges inside the input field, allowing individual removal with close buttons
* **Chips outside**: Selected values are displayed as chips/badges below the input field, keeping the input area clean
* **Max. Options Selectable**: Sets the maximum number of options that can be selected simultaneously.
#### Show selections display modes
The "Show selections" property determines how users see their selected options. Each mode offers different benefits depending on your use case:
Selected values are displayed as a comma-separated text string within the input field. This mode is space-efficient and works well when you have predictable option lengths.
**Best for:** Simple lists, short option names, read-only display scenarios

Selected values appear as individual chips/badges inside the input field with close buttons `×` for easy removal. This mode provides clear visual separation and allows users to remove specific selections easily.
**Best for:** Interactive forms, when individual item removal is important, moderate number of selections

**Features:**
* Individual close buttons for each selection
* Clear visual distinction between options
* Hover effects for better interaction
Selected values are displayed as chips/badges below the input field, keeping the input area clean and uncluttered. This mode is ideal when you expect many selections or longer option names.
**Best for:** Forms with many selections, long option names, when input field clarity is important

**Benefits:**
* Input field remains clean and readable
* Better accommodation for many selections
* Improved mobile experience with long lists
**Choosing the right display mode:**
* Use **comma separated** for simple, read-only scenarios or when space is limited
* Use **chips inside** for interactive forms where users frequently add/remove items
* Use **chips outside** for complex forms with many selections or when input field clarity is crucial
#### Datasource configuration
* **Default value**: Autofill the multi select field with these values. You need to specify an array of values from the value/label pairs defined in the Datasource tab.

* **Source Type**: The source can be Static, Enumeration, or Process Data.
* **Add option**: Define label and static value pairs here.
#### Process Data
When the data source type is set to Process Data, the multi select element will be populated with options from a specific process data key. This approach provides dynamic data loading capabilities, allowing options to be generated, modified, or filtered at runtime through business rules.
#### Configuration steps
* Set Source Type: Select "Process Data" from the Source Type dropdown
* Specify Process Data Key: Enter the key path where your options array is stored (e.g., app.options)

Example of JavaScript business rule that populates the multi select element with the values from the process data key:
```javascript theme={"system"}
options = [
{
"label": "option 1",
"value": "option1",
"enabled": true
},
{
"label": "option 2",
"value": "option2",
},
{
"label": "option 3",
"value": "option3",
"enabled": false
},
{
"label": "option 4",
"value": "option4",
"enabled": false
},
{
"label": "option 5",
"value": "option5"
}
];
output.put("app", {"options": options});
```
Now the multi select element will be populated with the values from the `app.options` key:

#### Validators
You can add multiple validators to a multi select field. For more details, refer to [**Validators**](../../validators).
Common validators for Multi Select include:
* **Required**: Ensures at least one option is selected
* **Custom**: You can add a custom validator to the multi select element.
* **Custom Expression**: You can add a custom expression to the multi select element.
#### Hide/disable expressions
The multi select field's behavior can be defined using JavaScript expressions for hiding or disabling the element. The following properties can be configured for expressions:
* **Hide condition**: A JavaScript expression that hides the Multi Select field when it returns a truthy value.
* **Disabled condition**: A JavaScript expression that disables the Multi Select field when it returns a truthy value.
It's important to make sure that disabled fields have the same expression configured under the path expressions → hide.
#### UI actions
UI actions can be added to the multi select element to define its behavior and interactions.
* **Event**: Possible value - `CHANGE`.
* **Action Type**: Select the type of the action to be performed.
For more details on how to configure a UI action, click [**here**](../../ui-actions).
### Disabled options
You can control the availability of specific options in Multi Select elements by marking them as disabled. This feature is particularly useful for implementing business logic that restricts certain choices based on user permissions, subscription levels, or contextual conditions.
#### Example
The `enabled` property is used to control the availability of the option.
```javascript theme={"system"}
options = [
{
"label": "option 1",
"value": "option1",
"enabled": true
},
{
"label": "option 2",
"value": "option2",
"enabled": false
},
{
"label": "option 3",
"value": "option3",
"enabled": true
},
{
"label": "option 4",
"value": "option4",
"enabled": false
},
{
"label": "option 5",
"value": "option5"
},
];
output.put("app", {"options": options});
```

### Multi Select settings overrides
There are instances where you may need to tailor settings configured in the **Generic** settings tab. This proves especially beneficial when you wish to adjust these settings to appear differently across various platforms such as Web, Android, or iOS.
Available override settings:
### Web overrides
* Properties:
* **Label**: Override the multi select label.
* **Helper**: Override helper text/info point.
* **Placeholder**: Override the placeholder.
* **Show selections**: Override the show selections.
* Expressions:
* **Hide**: Override the hide expression.
### iOS overrides
Same as Web overrides.
### Android overrides
Same as Web overrides.
Overrides can always be imported/pushed from one platform to another:

### Multi Select styling
* **Max Rows**: Adjust the maximum number of rows of the multi select element.
* **Margin**: Adjust the margin of the multi select element.
* **Padding**: Adjust the padding of the multi select element.
Similar styling considerations apply to iOS as for web.
However, for mobile applications, there's an additional sizing style property specific to multi select elements:
* **Fit Width**: Adjust the fit width of the multi select element:
* **fill**: Fills the available space.
* **fixed**: Maintains a fixed width.
* **auto**: Adjusts the width automatically based on content.
Similar styling considerations apply to Android as for web.
However, for mobile applications, there's an additional sizing style property specific to multi select elements:
* **Fit Width**: Adjust the fit width of the multi select element:
* **fill**: Fills the available space.
* **fixed**: Maintains a fixed width.
* **auto**: Adjusts the width automatically based on content.
#### Multi Select style overrides options
Theme overrides refer to the ability to modify or customize the appearance and behavior of UI components by overriding default theme settings. This can be applied at various levels, such as specific elements or entire sections, and can be platform-specific (Web, iOS, Android).
Style options:
* Border radius **\[TEXT]**
* Border width **\[TEXT]**
* Text style **\[FONT]**

* Default state
* Text color **\[COLOR]**
* Disabled state
* Text color **\[COLOR]**
* Text style **\[FONT]**

* Text color **\[COLOR]**
* Text style **\[FONT]**
* Helper Tooltip
* Text style **\[FONT]**
* Text color **\[COLOR]**
* Background color **\[COLOR]**
* Icon Color **\[COLOR]**

* Text color **\[COLOR]**
* Text style **\[FONT]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Right icon color **\[COLOR]**
* Left icon color **\[COLOR]**
* Prefix/Suffix color **\[COLOR]**
* Placeholder color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Right icon color **\[COLOR]**
* Left icon color **\[COLOR]**
* Prefix/Suffix color **\[COLOR]**
* Placeholder color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Right icon color **\[COLOR]**
* Left icon color **\[COLOR]**
* Prefix/Suffix color **\[COLOR]**
* Placeholder color **\[COLOR]**
* Selected chip background **\[COLOR]**
* Selected chip text color **\[COLOR]**
* Selected chip border color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Right icon color **\[COLOR]**
* Left icon color **\[COLOR]**
* Prefix/Suffix color **\[COLOR]**
* Placeholder color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Right icon color **\[COLOR]**
* Left icon color **\[COLOR]**
* Prefix/Suffix color **\[COLOR]**
* Placeholder color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Right icon color **\[COLOR]**
* Left icon color **\[COLOR]**
* Prefix/Suffix color **\[COLOR]**
* Placeholder color **\[COLOR]**

You can import or push the overrides from one platform to another without having to configure them multiple times.

# Example - Income sources selection form
Let's create an example using **enumeration data** to create an income sources selection form where users can select multiple income sources from a predefined list, as part of a loan application process.
To create this kind of process, we need the following elements:
* a [**user task node**](../../../node/user-task-node) (here we have the client forms and here we add the MULTI SELECT elements)

### Creating the enumeration
First, we need to create an enumeration for income sources:
1. Create it on your project or in a library.
2. Click on the breadcrumbs (top-right corner) then click **New enumeration** (the Enumeration Designer will now open).
3. Create an enumeration named \`\` with the following values:
* **S** - Salary
* **F** - Freelance
* **R** - Rents
* **I** - Investments


### Configuring the UI
Follow the next steps to configure the UI needed:
1. Select the **user task node** and click the **brush icon** to open [**UI Designer**](../../ui-designer).
2. Add a [**Card**](../root-components/card) UI element as a [**root component**](../root-components/) (this will group the other elements inside it) with the following properties:
* Generic:
* **Title** - *Loan Application Form*
3. Inside the **card**, add a [**form element**](./).
4. Inside the **form** add the standard form fields (First Name, Last Name, Date of Birth, Email, Income) and then add a **multi select element** for income sources selection.
5. For the multi select element (Income Sources) set the following properties:
* **Process data key** - `application.incomeSources`
The attribute `application.incomeSources` is the key on which we added income sources selection. It is an array of strings with the source of enumeration.

* **Label** - Income Sources
* **Placeholder** - Select your income sources...
* **Empty message** - No income sources found
* **Show selections** - Comma Separated
* **Max. Options Selectable** - 4 (reasonable limit for income sources)
* **Source type** - Enumeration
* **Enumeration** - Select `incomeSources` from the dropdown

8. Test and run the process by clicking **Start process**.
## Data handling and validation
### Common validation scenarios
Ensure at least one income source is selected for loan applications:
```javascript theme={"system"}
// Validator expression
${application.incomeSources != null && application.incomeSources.length > 0}
```
**Error message**: "Please select at least one income source to continue with your application."
Require at least 2 different income sources for better loan approval chances:
```javascript theme={"system"}
// Validator expression
${application.incomeSources != null && application.incomeSources.length >= 2}
```
**Error message**: "Please select at least 2 income sources to demonstrate income stability."
Limit to maximum 4 income sources to keep the application manageable:
```javascript theme={"system"}
// Validator expression
${application.incomeSources == null || application.incomeSources.length <= 4}
```
**Error message**: "Please select no more than 4 primary income sources."
Ensure that salary or business income is selected as a primary source (for certain loan types):
```javascript theme={"system"}
// Validator expression
${application.incomeSources != null && (application.incomeSources.contains("salary") || application.incomeSources.contains("business"))}
```
**Error message**: "At least one primary income source (Salary or Business Income) is required for this loan type."
## Best practices
**Limit options**: Don't overwhelm users with too many options. Consider grouping or categorizing if you have many choices.
**Set maximum selections**: Use the "Max. Options Selectable" property to prevent users from selecting too many options.
**Provide clear labels**: Make option labels descriptive and easy to understand.
**Consider mobile experience**: Test how selected items display on mobile devices, especially when many options are selected.
**Validate selections**: Always validate that the user's selections meet your business requirements using appropriate validators.
**Handle empty states**: Provide clear messaging when no options are available or when search yields no results.
## Differences from Single Select
| Feature | Single Select | Multi Select |
| ---------------- | ----------------------------------- | --------------------------------------------- |
| **Selection** | One option only | Multiple options |
| **Data Storage** | Single value | Array of values |
| **Display** | Selected value | Chips, comma-separated, or custom format |
| **Validation** | Simple required validation | Min/max selections, required array validation |
| **Use Cases** | Country selection, status selection | Skills, categories, tags, interests |
| **Clear Action** | Clears single selection | Clears all selections |
When migrating from Single Select to Multi Select, remember to update your data model to handle arrays and adjust any business rules or integrations that process the selected values.
# Radio
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-component-types/form-elements/radio-form-field
Radio buttons are normally presented in radio groups (a collection of radio buttons describing a set of related options). Only one radio button in a group can be selected at the same time.

## Configuring the radio field element
### Radio generic settings
These allow you to customize the generic settings for the Radio element:
* [**Process data key**](#process-data-key)
* [**Properties**](#properties)
* [**Datasource**](#datasource)
* [**Validators**](#validators)
* [**Expressions**](#expressions)
* [**UI actions**](#ui-actions)
* [**Radio styling**](#radio-styling)
#### Process data key
Process data key establishes the binding between the radio element and process data, enabling its later use in [decisions](../../../node/exclusive-gateway-node), [business rules](../../../actions/business-rule-action/business-rule-action) or [integrations](../../../node/message-send-received-task-node#from-integration).

#### Properties
* **Label**: The visible label for the radio element.
* **Helpertext**: Additional information about the radio element, which can be optionally hidden within an infopoint.

#### Datasource configuration
* **Default value**: Autoselect an option from the radio element based on this value. You need to specify the value from the value/label pairs defined in the Datasource tab.
* **Source Type**: The source can be Static, Enumeration, or Process Data.
* **Add option**: Define label and value pairs here.

#### Validators
The following validators can be added to a radio: `required` and `custom` (more details [here](../../validators)).

#### Hide/disable expressions
The radio's element behavior can be defined using JavaScript expressions for hiding or disabling the element. The following properties can be configured for expressions:
* **Hide condition**: A JavaScript expression that hides the Radio element when it returns a truthy value.
* **Disabled condition**: A JavaScript expression that disables the Radio element when it returns a truthy value.
It's important to make sure that disabled fields have the same expression configured under the path expressions → hide.

#### UI actions
UI actions can be added to the radio element to define its behavior and interactions.
* **Event**: Possible value - `CHANGE`.
* **Action Type**: Select the type of the action to be performed.
For more details on how to configure a UI action, click [**here**](../../ui-actions).
### Radio settings overrides
There are instances where you may need to tailor settings configured in the **Generic** settings tab. This proves especially beneficial when you wish to adjust these settings to appear differently across various platforms such as Web, Android, or iOS.
Available override settings:
* Properties:
* **Label**: Override the radio label.
* **Helper**: Override helper text/info point.
* Expressions:
* **Hide**: Override the hide expression.
Overrides can always be imported/pushed from one platform to another:

### Radio styling
* **Type**: Set the type of the radio. Possible values:
* bordered
* clear
Adjusting the size of components is crucial for a responsive design. Fit W (width) offers three options:
* **fill**: Fills the available space.
* **fixed**: Maintains a fixed width.
* **auto**: Adjusts the width automatically based on content.
* **Direction**: Determines the orientation of the layout, which can be either horizontal or vertical.
* **Gap**: Specifies the size of the space between rows and columns.
* **Columns**: Indicates the number of columns in the layout.
Similar styling considerations apply to iOS as for web.
However, for mobile applications, there's a difference on Gap value:
* **Gap**: pt - points instead of pixels
Similar styling considerations apply to Android as for web.
However, for mobile applications, there's a difference on Gap value:
* **Gap**: dp - density-independent pixels
#### Radio style overrides options
Theme overrides refer to the ability to modify or customize the appearance and behavior of UI components by overriding default theme settings. This can be applied at various levels, such as specific elements or entire sections, and can be platform-specific (Web, iOS, Android).

Style options:
* Border radius **\[TEXT]**
* Border width **\[TEXT]**
* Text style **\[FONT]**

* Default state
* Text color **\[COLOR]**
* Disabled state
* Text color **\[COLOR]**
* Text style **\[FONT]**

* Text color **\[COLOR]**
* Text style **\[FONT]**
* Helper Tooltip
* Text style **\[FONT]**
* Text color **\[COLOR]**
* Background color **\[COLOR]**
* Icon Color **\[COLOR]**

* Text color **\[COLOR]**
* Text style **\[FONT]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Icon color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Icon color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Icon color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Icon color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Icon color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Icon color **\[COLOR]**

You can import or push the overrides from one platform to another without having to configure them multiple times.

# Segmented button
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-component-types/form-elements/segmented-button
It allows users to pick only one option from a group of options, and you can choose to have between 2 and 5 options in the group. The segmented button is easy to use, and can help make your application easier for people to use.

## Configuring the segmented button
### Segmented button generic settings
The available configuration options for this form element are:
* [**Process data key**](#process-data-key)
* [**Properties**](#properties)
* [**Datasource**](#datasource)
* [**Validators**](#validators)
* [**Expressions**](#expressions)
* [**UI actions**](#ui-actions)
* [**Segmented button styling**](#segmented-button-styling)
#### Process data key
Process data key establishes the binding between the segmented buton and process data, enabling its later use in [decisions](../../../node/exclusive-gateway-node), [business rules](../../../actions/business-rule-action/business-rule-action) or [integrations](../../../node/message-send-received-task-node#from-integration).
#### Properties
* **Label**: The visible label for the segmented button.
* **Helpertext**: Additional information about the segmented button, which can be optionally hidden within an infopoint.
#### Datasource configuration
* **Default Value**: The default value of the segmented button (it can be selected from one of the static source values)
* **Source Type**: It is by default Static.
* **Add option**: Define label and value pairs here.
#### Validators
The following validators can be added to a segmented button: `required` and `custom` (more details [here](../../validators)).

#### UI actions
UI actions can be added to the segmented button element to define its behavior and interactions.
* **Event**: Possible value - `CHANGE`.
* **Action Type**: Select the action type.
For more details on how to configure a UI action, click [**here**](../../ui-actions).
### Segmented button settings overrides
There are instances where you may need to tailor settings configured in the **Generic** settings tab. This proves especially beneficial when you wish to adjust these settings to appear differently across various platforms such as Web, Android, or iOS.
Available override settings:
* Properties:
* **Label**: Override the segmented button label.
* **Helper**: Override helper text/info point.
* Expressions:
* **Hide**: Override the hide expression.
Overrides can always be imported/pushed from one platform to another:

#### Sizing
Adjusting the size of components is crucial for a responsive design. Fit W (width) offers three options:
* **fill**: Fills the available space.
* **fixed**: Maintains a fixed width.
* **auto**: Adjusts the width automatically based on content.
Similar styling considerations apply to iOS as for web.
Similar styling considerations apply to Android as for web.
#### Segmented button style overrides options
Theme overrides refer to the ability to modify or customize the appearance and behavior of UI components by overriding default theme settings. This can be applied at various levels, such as specific elements or entire sections, and can be platform-specific (Web, iOS, Android).

Style options:
* Border radius **\[TEXT]**
* Border width **\[TEXT]**
* Text style **\[FONT]**

* Default state
* Text color **\[COLOR]**
* Disabled state
* Text color **\[COLOR]**
* Text style **\[FONT]**

* Text color **\[COLOR]**
* Text style **\[FONT]**
* Helper Tooltip
* Text style **\[FONT]**
* Text color **\[COLOR]**
* Background color **\[COLOR]**
* Icon Color **\[COLOR]**

* Text color **\[COLOR]**
* Text style **\[FONT]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Icon color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Icon color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Icon color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Icon color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Icon color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Icon color **\[COLOR]**

You can import or push the overrides from one platform to another without having to configure them multiple times.

# Single Select
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-component-types/form-elements/select-form-field
Enable users to choose from a dropdown list of predefined options with advanced features including search, validation, and selective option disabling.
The Single Select form field allows users to choose from a dropdown list of predefined options. Each option consists of a label (displayed to users) and a corresponding value (stored in the process data). This component supports static data, enumerations, and dynamic process data sources with advanced features like search filtering and conditional option enabling.

**Example**: Consider a dropdown with "Sports" (value: "S") and "Music" (value: "M"). When a user selects "Sports", the value "S" is stored in the process instance under the Select element's data key.
## Configuration overview
Configure your single select component using these main sections:
Process data binding, labels, and properties
Static options, enumerations, or dynamic data
Hide/disable conditions and UI actions
Visual appearance and platform overrides
## Basic configuration
### Process data key
The process data key establishes the binding between the select element and process data, enabling its later use in:
* [Decision nodes](../../../node/exclusive-gateway-node)
* [Business rule actions](../../../actions/business-rule-action/business-rule-action)
* [Integration tasks](../../../node/message-send-received-task-node#from-integration)
### Core Properties
**Label**: The visible text displayed above the select element
* Supports Markdown syntax for rich formatting
* Can include links, emphasis, and other formatting
* Responsive across all platforms
**Placeholder**: Text shown when no option is selected
* Provides guidance on what to select
* Should be clear and actionable
* Example: "Choose your preferred option..."
**Empty Message**: Custom text for no results scenarios
* Displayed when search yields no matches
* Helpful for dynamic data sources
* Example: "No matching options found"
**Search for Options**: Enable filtering functionality
* Improves usability for long option lists
* Real-time filtering as users type
* Case-insensitive search capabilities
* Particularly useful for large datasets
**Has Clear**: Add option to clear selection
* Provides users with reset functionality
* Useful for optional fields
* Improves user control and flexibility
**Helper Text**: Additional context or instructions
* Can be displayed as regular text
* Can be hidden within an expandable info point
* Supports Markdown formatting
## Data source configuration
### Default value setup
Configure the initial selected option:
**Default Value**: Specify which option should be pre-selected
* Must match a value from your data source
* Improves user experience by reducing required interactions
* Consider user context and common selections

### Source types
Choose the appropriate data source for your select options:
**Purpose**: Fixed list of options defined at design time
**Configuration**:
* **Add Option**: Define label/value pairs manually
* **Label**: User-friendly display text
* **Value**: Internal identifier stored in process data
* **Enabled**: Control option availability (see below)
**Best For**:
* Fixed categories (Yes/No, Active/Inactive)
* Configuration options
* Simple selection lists
**Purpose**: Predefined lists managed centrally
**Benefits**:
* Consistent across multiple forms
* Centralized maintenance
* Automatic updates when enumeration changes
* Version control for option lists
**Best For**:
* Shared vocabularies (countries, currencies)
* Business domains (departments, categories)
* Standardized classifications
**Purpose**: Dynamic options from process variables
**Features**:
* Runtime data population
* Context-dependent options
* Integration with external systems
* **Enhanced Option Control** (NEW)
**Best For**:
* User-specific options
* Data from external APIs
* Conditional option sets
* Dynamic business logic
Process Data sources now support the **enabled** property for individual option control. See the Enhanced Option Control section below.
### Enhanced option control
Individual option enabling/disabling is available for **Process Data** source types only.
When using Process Data, you can control which options are selectable using the `enabled` property:
**How It Works**:
* **`enabled: true`** or **missing**: Option is selectable (default)
* **`enabled: false`**: Option appears but is disabled
**Example**:
```json theme={"system"}
{
"options": [
{
"value": "available",
"label": "Available Option",
"enabled": true
},
{
"value": "disabled",
"label": "Disabled Option",
"enabled": false
}
]
}
```
**Common Use Cases**: Conditional availability based on permissions, progressive disclosure, status indication (e.g., "Out of Stock"), or guided selection flows.
Disabled options support theming for both **disabled unselected** and **disabled selected** states. An option can be both selected and disabled simultaneously.
## Validation
Apply validators to ensure data quality and completeness:
**Available Validators**:
* **Required**: Ensures a selection is made
* **Custom**: Complex business logic validation
* **Conditional**: Validation based on other field values
For comprehensive validation options, refer to our [Validators Guide](../../validators).
## Behavior configuration
### Hide/disable expressions
Control the select element's visibility and interaction using JavaScript expressions:
### UI Actions
Configure interactive behaviors for your select element:
| Event | Description | Common Use Cases |
| ---------- | -------------------------------- | ------------------------------------------------------------------------ |
| **CHANGE** | Triggered when selection changes | Update dependent fields, trigger calculations, show/hide related content |
**Action Types Available**:
* **Process Actions**: Advance workflow based on selection
* **Data Operations**: Update related form fields
* **UI Updates**: Show/hide dependent elements
* **External Calls**: Fetch related data from APIs
For detailed UI action configuration, see our [UI Actions Guide](../../ui-actions).
## Platform customization
### Settings overrides
Customize your select element differently across platforms:
**Override Options**:
* **Label**: Desktop-optimized terminology
* **Helper**: Extended descriptions with more context
* **Placeholder**: Detailed guidance text
**Web-Specific Features**:
* Enhanced search with keyboard shortcuts
* Hover states and advanced animations
* Larger option lists with scrolling
**Override Options**:
* **Label**: Concise mobile-friendly text
* **Helper**: Brief, essential information
* **Placeholder**: Short, clear guidance
**Mobile Optimizations**:
* Touch-friendly option sizing
* Native picker integration
* Simplified layouts for smaller screens

Override settings can be imported and pushed between platforms, saving configuration time and ensuring consistency.
## Visual styling
### Layout options
**Left Icon**: Visual cue for the select purpose
* Category icons (📂, 🏢, 👤)
* Functional indicators (🔍, ⚙️, 📊)
* Status symbols (✓, ⚠️, 🔒)
**Icon Configuration**:
* **Icon Key**: Select from Media Library
* Platform-specific optimization
* Consistent with design system

| Option | Behavior | Best For |
| --------- | ------------------------------ | ------------------ |
| **Fill** | Expands to use available space | Full-width forms |
| **Fixed** | Maintains specified width | Consistent layouts |
| **Auto** | Adjusts based on content | Dynamic layouts |
**Platform Adaptations**:
* Native iOS picker integration
* Height specification in points (pt)
* iOS design guideline compliance
* Optimized for touch interaction
**Additional Properties**:
* **Height (pt)**: Vertical size control for mobile optimization
**Platform Adaptations**:
* Material Design principles
* Height specification in density-independent pixels (dp)
* Android-specific animations
* Platform-consistent appearance
**Additional Properties**:
* **Height (dp)**: Vertical size control optimized for Android displays
### Theme customization
Override default styling for complete visual control:

**Layout & Structure**:
* Border radius for rounded corners
* Border width for outline definition
* Text style for typography consistency

**Default State**:
* Text color customization
* Font family and size options
**Disabled State**:
* Dimmed appearance
* Consistent with disabled styling

**Standard Helper**:
* Text color and font options
**Tooltip Helper**:
* Background color customization
* Icon color options
* Typography controls

**When no option is selected**:
* Border and background colors
* Icon color customization
* Placeholder text styling

**When dropdown is open**:
* Active border highlighting
* Background color changes
* Text and icon color adjustments

**When option is selected**:
* Selected option appearance
* Confirmation visual cues
* Clear selection indicator

**Error State**: Validation failure appearance
**Disabled State**: Non-interactive appearance
**Hover State** (Web only): Mouse-over effects

**Time-Saving Tip**: Export your styling configuration from one platform and import it to others to maintain consistency without manual reconfiguration.

## Advanced example: Dynamic dropdowns
Create sophisticated dropdown interactions with dependent selections using process data and business rules.
### Scenario overview
Build a customer contract selection system where available contracts depend on the selected customer:

### Process structure
**Required Elements**:
1. **Task Node**: Populates dropdown data using business rules
2. **User Task Node**: Contains the select elements and form interface
### Implementation steps
1. Open **FlowX.AI Designer** → **Processes** → **Definitions**
2. Click **New Process** to open Process Designer
3. Add the required nodes:
* Task node (for data preparation)
* User task node (for user interface)

**Task Node Configuration**:
* **Action Type**: Business Rule
* **Execution**: Automatic, Mandatory
* **Language**: MVEL (or your preferred scripting language)
**Sample MVEL Script**:
```java theme={"system"}
output.put("application",
{
"client": {
"identity": [
{
"value": "001",
"label": "Eddard Stark"
},
{
"value": "002",
"label": "Sansa Stark"
},
{
"value": "003",
"label": "Catelyn Stark"
}
]},
"contracts": {
"001": [
{
"value": "c001",
"label": "Eddard Contract 1"
},
{
"value": "c007",
"label": "Eddard Contract 2"
}
],
"003": [
{
"value": "c002",
"label": "Catelyn Contract 1"
},
{
"value": "c003",
"label": "Catelyn Contract 2"
},
{
"value": "c004",
"label": "Catelyn Contract 3"
}
],
"002": [
{
"value": "c005",
"label": "Sansa Contract 1"
}
]
}
});
```

**User Task Node Configuration**:
* **Action Type**: Save Data
* **Execution**: Manual, Mandatory
* **Data to Send**: `application`
**UI Structure**:
1. **Card Element** (root component):
* **Custom UI Payload**: `{"application": ${application}}`
* **Title**: "Customer Contract"
2. **Form Element** (container for selects)
3. **First Select** (Customer Name):
* **Process Data Key**: `application.client.selectedClient`
* **Label**: Customer Name
* **Source Type**: Process Data
* **Name**: `application.client.identity`
4. **Second Select** (Contract ID):
* **Process Data Key**: `application.client.selectedContract`
* **Label**: Contract ID
* **Source Type**: Process Data
* **Name**: `application.contracts`
* **Parent**: SELECT (first dropdown)

**Test Process**:
1. Click **Start Process** in the designer
2. Select a customer from the first dropdown
3. Verify that the second dropdown populates with relevant contracts
4. Submit the form to validate data storage
**Expected Behavior**:
* Customer selection triggers contract list update
* Only contracts associated with selected customer appear
* Form submission stores both selected values

### Enhanced dynamic example with disabled options
Extend the previous example to include conditional option disabling:
```json theme={"system"}
{
"application": {
"client": {
"identity": [
{
"value": "001",
"label": "Eddard Stark",
"enabled": true
},
{
"value": "002",
"label": "Sansa Stark",
"enabled": false // Disabled due to account status
},
{
"value": "003",
"label": "Catelyn Stark",
"enabled": true
}
]
},
"contracts": {
"001": [
{
"value": "c001",
"label": "Eddard Contract 1",
"enabled": true
},
{
"value": "c007",
"label": "Eddard Contract 2 (Expired)",
"enabled": false // Disabled due to expiration
}
]
}
}
}
```
## Best practices
* Provide clear, descriptive labels and helper text
* Ensure sufficient color contrast for all states
* Support keyboard navigation and screen readers
* Use ARIA labels for complex interactions
* Test with assistive technologies
* Provide alternative text for icons
* Keep option lists manageable (under 10 items when possible)
* Use search functionality for longer lists
* Provide clear visual feedback for disabled options
* Consider default selections for common use cases
* Group related options logically
* Show loading states for dynamic data
* Use meaningful keys for integration purposes
* Plan for data validation and error handling
* Consider performance impact of large option sets
* Document business rules for option availability
* Test with realistic data volumes
* Implement proper error handling for external data sources
* Cache frequently used option lists
* Implement lazy loading for large datasets
* Optimize search algorithms for responsiveness
* Consider pagination for very large lists
* Monitor performance with real-world data
* Test on various devices and network conditions
## Common use cases
| Scenario | Configuration | Features Used |
| ------------------------ | ------------------------------ | --------------------------------------------- |
| **Country Selection** | Enumeration source | Search, large option list |
| **Department Selection** | Static options with roles | Conditional enabling based on user role |
| **Product Categories** | Process data with availability | Dynamic options, disabled out-of-stock items |
| **Status Selection** | Static with validation | Required validation, status-dependent actions |
| **Dynamic Filtering** | Dependent dropdowns | Parent-child relationships, real-time updates |
# Slider
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-component-types/form-elements/slider
It allows users to pick only one option from a group of options, and you can choose to have between 2 and 5 options in the group. The segmented button is easy to use, and can help make your application easier for people to use.

## Configuring the slider element
### Slider generic settings
The available configuration options for this form element are:
* [**Process data key**](#process-data-key)
* [**Properties**](#properties)
* [**Datasource**](#datasource)
* [**Validators**](#validators)
* [**Expressions**](#expressions)
* [**UI actions**](#ui-actions)
* [**Slider styling**](#slider-styling)
#### Process data key
Process data key establishes the binding between the slider element and process data, enabling its later use in [decisions](../../../node/exclusive-gateway-node), [business rules](../../../actions/business-rule-action/business-rule-action) or [integrations](../../../node/message-send-received-task-node#from-integration).
#### Properties
* **Label**: The visible label for the slider element.
* **Show value label**: A toggle option that determines whether the current selected value of the slider is displayed as a label alongside the slider handle.
* **Helpertext**: Additional information about the slider element, which can be optionally hidden within an infopoint.
* **Min Value** : The minimum value or starting point of the slider's range, it defines the lowest selectable value on the slider.
* **Max Value**: The maximum value or end point of the slider's range, it sets the highest selectable value on the slider.
* **Suffix**: An optional text or symbol that can be added after the displayed value on the slider handle or value label, it is commonly used to provide context or units of measurement.
* **Step size**: The increment or granularity by which the slider value changes when moved, it defines the specific intervals or steps at which the slider can be adjusted, allowing users to make more precise or discrete value selections.
#### Datasource configuration
**Default Value**: The default value of the slider (static value - integer) the initial value set on the slider when it is first displayed or loaded, it represents a static value (integer), that serves as the starting point or pre-selected value for the slider, users can choose to keep the default value or adjust it as desired.

#### Validators
The following validators can be added to a slider: `required` and `custom` (more details [here](../../validators)).
#### Hide/disable expressions
* **Hide condition**: A JavaScript expression that hides the sloder element when it returns a truthy value.
* **Disabled condition**: A JavaScript expression that disables the slider element when it returns a truthy value.
It’s important to make sure that disabled fields have the same expression configured under the path expressions → hide.
#### UI actions
UI actions can be added to the slider element to define its behavior and interactions.
* **Event**: Possible value - `CHANGE`.
* **Action Type**: Select the action type, ❗️for more details on how to configure a UI action, click [**here**](../../ui-actions).
### Multiple sliders
You can also use multiple sliders UI elements that are interdependent, as you can see in the following example:

You can improve the configuration of the slider using computed values as in the example above. These values provide a more flexible and powerful approach for handling complex use cases. You can find an example by referring to the following documentation:
[**Dynamic & computed values**](../../dynamic-and-computed-values#computed-values)
### Slider settings overrides
There are instances where you may need to tailor settings configured in the **Generic** settings tab. This proves especially beneficial when you wish to adjust these settings to appear differently across various platforms such as Web, Android, or iOS.
Available override settings:
* Properties:
* **Label**: Override the slider label.
* **Helpertext**: Override helper text/info point.
* **Show value**: Override the show value option.
* **Suffix**: Override the suffix.
* Expressions:
* **Hide**: Override the hide expression.
Overrides can always be imported/pushed from one platform to another:

### Slider styling
#### Sizing
Adjusting the size of components is crucial for a responsive design. Fit W (width) offers three options:
* **fill**: Fills the available space.
* **fixed**: Maintains a fixed width.
* **auto**: Adjusts the width automatically based on content.
Similar styling considerations apply to iOS as for web.
Similar styling considerations apply to Android as for web.
#### Slider style overrides options
Theme overrides refer to the ability to modify or customize the appearance and behavior of UI components by overriding default theme settings. This can be applied at various levels, such as specific elements or entire sections, and can be platform-specific (Web, iOS, Android).

Style options:
* Limits font **\[FONT]**
* Text style **\[FONT]**

* Default state
* Text color **\[COLOR]**
* Disabled state
* Text color **\[COLOR]**
* Text style **\[FONT]**

* Text color **\[COLOR]**
* Text style **\[FONT]**
* Helper Tooltip
* Text style **\[FONT]**
* Text color **\[COLOR]**
* Background color **\[COLOR]**
* Icon Color **\[COLOR]**

* Text color **\[COLOR]**
* Text style **\[FONT]**

* Empty **\[COLOR]**
* Filled **\[COLOR]**
* Knob color **\[COLOR]**
* Limits **\[COLOR]**
* Value **\[COLOR]**
On iOS, overrides for the **Knob** are not available.

* Empty **\[COLOR]**
* Filled **\[COLOR]**
* Knob color **\[COLOR]**
* Limits **\[COLOR]**
* Value **\[COLOR]**
On iOS, overrides for the **Filled** and **Empty** states, as well as the **Knob**, are not available.

You can import or push the overrides from one platform to another without having to configure them multiple times.

# Switch
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-component-types/form-elements/switch-form-field
Enable users to toggle between two states with an intuitive switch interface that stores boolean values in your process instances.
A switch component provides users with a simple toggle interface to select between two states (on/off, true/false). When users interact with the switch, the corresponding boolean value is automatically stored in the process instance for use in decisions, business rules, and integrations.

## Configuration overview
Configure your switch component using these main sections:
Process data binding, labels, and switch type
Default values, datasources, and validators
Hide/disable conditions and UI actions
Visual appearance and platform-specific overrides
## Basic configuration
### Process data key
The process data key creates a binding between your switch component and the process data, enabling you to reference the switch value in:
* [Decision nodes](../../../node/exclusive-gateway-node)
* [Business rule actions](../../../actions/business-rule-action/business-rule-action)
* [Integration tasks](../../../node/message-send-received-task-node#from-integration)
### Core properties
**Purpose**: The visible text displayed alongside the switch
**Features**:
* Supports full Markdown syntax for rich formatting
* Can include links, emphasis, and other Markdown elements
* Responsive across all platforms
Use Markdown to enhance your labels with **bold**, *italic*, or [linked text](https://www.markdownguide.org/cheat-sheet/).

Choose the visual representation of your switch:
| Type | Description | Best Used For |
| ------------ | -------------------------- | -------------------------- |
| **Toggle** | Traditional sliding switch | On/off states, preferences |
| **Checkbox** | Square checkbox interface | Agreements, confirmations |
**Purpose**: Provide additional context or instructions
**Options**:
* Display as regular text below the switch
* Hide within an expandable info point tooltip
* Support for Markdown formatting
## Data configuration
### Default value
Set the initial state of your switch component:
* **Default**: Switch starts in the "on" position (true)
* **Alternative**: Configure to start in the "off" position (false)
Choose your default value carefully as it affects user experience and data collection patterns.
### Validation rules
Apply these validators to ensure data quality:
**Use case**: Force users to accept terms, confirm agreements
**Behavior**: Switch must be in the "on" position to pass validation
**Error message**: Customize the message shown when validation fails
**Use case**: Complex business logic validation
**Implementation**: Write custom JavaScript validation functions
**Documentation**: [Learn more about custom validators](../../validators)

## Behavior configuration
### Hide/disable expressions
Define the switch element's behavior using JavaScript expressions to control its visibility or disablement:
* Hide condition: A JavaScript expression that hides the Switch element when it returns a truthy value.
* Disabled condition: A JavaScript expression that disables the Switch element when it returns a truthy value.
#### Hide expression example
We can use a rule to hide a switch element if another field has a null value (it is not filled). For example, the "Terms Agreement" switch, which remains hidden until users fill in the "Email" field:
Rule used:
```javascript theme={"system"}
${application.input.email} === null || ${application.input.email} === ""
```
#### Disable expressions
You can use a disabled condition to disable a switch element based on values from other fields or based on permissions.
It's important to make sure that disabled fields have the same expression configured under the path expressions → hide.
### UI actions
Configure interactive behaviors for your switch:
| Event | Description | Common Use Cases |
| ---------- | ----------------------------------- | --------------------------------------------------------------- |
| **CHANGE** | Triggered when switch state changes | Update related fields, trigger calculations, send notifications |
**Action Types Available**:
* Navigate to different pages
* Execute business rules
* Call external services
* Update other form elements
For detailed UI action configuration, see our [UI Actions Guide](../../ui-actions).
## Platform customization
### Settings overrides
Customize your switch differently across platforms:
* Override labels for web-specific terminology
* Adjust helper text for desktop users
* Modify hide/show expressions for web workflows
* Shorter labels for mobile screens
* Touch-friendly sizing adjustments
* Platform-specific validation messages

Override settings can be imported and pushed between platforms, saving configuration time.
## Visual styling
### Layout options
**Start**: Label appears before the switch (left side)
**End**: Label appears after the switch (right side)
| Option | Behavior | Best For |
| --------- | ------------------------------ | ------------------------- |
| **Fill** | Expands to use available space | Full-width layouts |
| **Fixed** | Maintains specified width | Consistent column layouts |
| **Auto** | Adjusts based on content | Dynamic layouts |
Similar styling options as web with iOS-specific design guidelines applied automatically.
Follows Material Design principles with Android-specific styling conventions.
### Theme customization
Override default styling for complete visual control:

**Default State**:
* Text color customization
* Font family and size options
**Disabled State**:
* Dimmed text color options
* Consistent typography

**Standard Helper**:
* Text color and font options
**Tooltip Helper**:
* Background color customization
* Icon color options
* Typography controls

* Error message text color
* Font styling for error states
* Consistent error indication

* Border color customization
* Background color options
* Switch knob color

* Active border color
* Active background color
* Active knob color

**Disabled Unselected**:

**Disabled Selected**:

**Time-Saving Tip**: Export your styling configuration from one platform and import it to others to maintain consistency without manual reconfiguration.

## Best practices
* Provide clear, descriptive labels
* Use helper text for complex switches
* Ensure sufficient color contrast
* Test with screen readers
* Choose appropriate default values
* Provide immediate visual feedback
* Use consistent switch types throughout your application
* Consider the context when placing switches
* Use meaningful process data keys
* Plan for boolean value usage in business rules
* Consider validation requirements early
* Document switch behavior for other developers
## Common use cases
| Scenario | Configuration | Notes |
| ---------------------- | ------------------------------- | ------------------------- |
| **Terms & Conditions** | Required validator, default off | Forces user interaction |
| **Feature Toggles** | No validation, default varies | User preference setting |
| **Permissions** | Conditional display/disable | Role-based access control |
| **Status Indicators** | Read-only mode | Display-only information |
# Text area
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-component-types/form-elements/text-area
A text area is a form element used to capture multi-line input from users in a conversational interface. The text area component is typically used for longer inputs such as descriptions, comments, or feedback, providing users with more space to type their responses.

It is an important tool for creating intuitive and effective conversational interfaces that can collect and process large amounts of user input.
## Configuring the text area element
### Text area generic settings
These settings added in the Generic tab are available and they apply to all platforms including Web, iOS, and Android:
* [**Process data key**](#prcoess-data-key)
* [**Properties**](#properties)
* [**Datasource**](#datasource-configuration)
* [**Validators**](#validators)
* [**Expressions**](#expressions)
* [**UI actions**](#ui-actions)
* [**Text area styling**](#text-area-styling)
#### Prcoess data key
Process data key creates the binding between form element and process data, so it can be later used in [decisions](../../../node/exclusive-gateway-node), [business rules](../../../actions/business-rule-action/business-rule-action) or [integrations](../../../node/message-send-received-task-node#from-integration)
#### Properties
* **Label**: The visible label for the text area element.
* **Placeholder**: Text that appears within the text area when it is empty.
* **Has Clear**: Option to include a content clear mechanism.
* **Helpertext**: Additional information about the text area field (can be hidden inside an infopoint).
* **Update on Blur**: Update behavior triggered when the text area loses focus.
#### Datasource configuration
The default value for the element can be configured here, this will autofill the text field when you will run the process.
#### Validators
You can add multiple validators to a text area field. For more details, refer to [**Validators**](../../validators).

#### Hide/disable expressions
The text area's behavior can be defined using JavaScript expressions for hiding or disabling the element. The following properties can be configured for expressions:
* **Hide condition**: A JavaScript expression used to hide the text area when it is evaluated to your desired result.
* **Disabled condition**: A JavaScript expression used to disable the text area when it returns a truthy value

In the example above, we used a rule to hide a text area element if the value of the switch element above is false.
#### Hide expression example
We will use the key defined on the switch element to create a JavaScript hide condition to hide the text area element:

* Rule used:
```javascript theme={"system"}
${application.client.hasHouse} === false
```
* Result:

#### Disable example
For example, you can use a disabled condition to disable a text area element based on what values you have on other elements.


When you choose a specific value on the radio element (Contact via SMS), the text area is disabled based on the disabled condition.
* Rule used:
```javascript theme={"system"}
${application.client.contact} == "prfS"
```
It's important to make sure that disabled fields have the same expression configured under the path expressions → hide.
#### UI actions
UI actions can be added to the text area field to define its behavior and interactions.
* **Event**: Possible value - `CHANGE`.
* **Action Type**: Select the type of the action to be performed.
For more details on how to configure a UI action, click [**here**](../../ui-actions).
### Text area settings overrides
There are instances where you may need to tailor settings configured in the **Generic** settings tab. This proves especially beneficial when you wish to adjust these settings to appear differently across various platforms such as Web, Android, or iOS.
Available override settings:
* Properties:
* **Label**: Override the text area label.
* **Helper**: Override helper text/info point.
* **Placeholder**: Override the placeholder.
* Expressions:
* **Hide**: Override the hide expression.
Overrides can always be imported/pushed from one platform to another:

### Text area styling
#### Fit W (fit width)
Adjusting the size of components is crucial for a responsive design. Fit W (width) offers three options:
* **fill**: Fills the available space.
* **fixed**: Maintains a fixed width.
* **auto**: Adjusts the width automatically based on content.
#### H Type (height type)
* **fixed**: Maintains a fixed height (pixels)
* **auto**: Adjusts the height automatically based on the content.
#### Rows
* **Min Rows**: Sets the minimum number of rows.
* **Max Rows**: Sets the maximum number of rows.
Similar styling considerations apply to iOS as for web.
* **fixed height**: Measured in dp - density-independent pixels.
Similar styling considerations apply to Android as for web.
* **fixed height**: Measured in pt - points.
#### Text area style overrides options
Theme overrides refer to the ability to modify or customize the appearance and behavior of UI components by overriding default theme settings. This can be applied at various levels, such as specific elements or entire sections, and can be platform-specific (Web, iOS, Android).

Style options:
* Border radius **\[TEXT]**
* Border width **\[TEXT]**
* Text style **\[FONT]**

* Default state
* Text color **\[COLOR]**
* Disabled state
* Text color **\[COLOR]**
* Text style **\[FONT]**

* Text color **\[COLOR]**
* Text style **\[FONT]**
* Helper Tooltip
* Text style **\[FONT]**
* Text color **\[COLOR]**
* Background color **\[COLOR]**
* Icon Color **\[COLOR]**

* Text color **\[COLOR]**
* Text style **\[FONT]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Right icon color **\[COLOR]**
* Left icon color **\[COLOR]**
* Prefix/Suffix color **\[COLOR]**
* Placeholder color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Right icon color **\[COLOR]**
* Left icon color **\[COLOR]**
* Prefix/Suffix color **\[COLOR]**
* Placeholder color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Right icon color **\[COLOR]**
* Left icon color **\[COLOR]**
* Prefix/Suffix color **\[COLOR]**
* Placeholder color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Right icon color **\[COLOR]**
* Left icon color **\[COLOR]**
* Prefix/Suffix color **\[COLOR]**
* Placeholder color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Right icon color **\[COLOR]**
* Left icon color **\[COLOR]**
* Prefix/Suffix color **\[COLOR]**
* Placeholder color **\[COLOR]**

* Border color **\[COLOR]**
* Background color **\[COLOR]**
* Text color **\[COLOR]**
* Right icon color **\[COLOR]**
* Left icon color **\[COLOR]**
* Prefix/Suffix color **\[COLOR]**
* Placeholder color **\[COLOR]**

You can import or push the overrides from one platform to another without having to configure them multiple times.

# Card
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-component-types/root-components/card
A card in FlowX.AI is a graphical component designed for the purpose of grouping and aligning various elements. It offers added functionality by incorporating an accordion feature, allowing users to expand and collapse content as needed.

The following properties that can be configured:
## Properties and settings
### Settings (applicable across all platforms)
These settings added in the **Generic** tab are available and they apply to all platforms including Web, iOS, and Android.
#### When used as root
When the Card is utilized as the root component, it offers the following settings:
* **Custom UI Payload**: A valid JSON describing the custom data transmitted to the frontend when the process reaches a specific user task.
* **Title**: The title displayed on the card.
* **Subtitle**: Additional descriptive text accompanying the card.
* **Has accordion**: Introduces a Bootstrap accordion, facilitating the organization of content within collapsible items. It ensures that only one collapsed item is displayed at a time.
The accordion feature is not available for mobile configuration.
#### Mobile configuration (iOS & Android)
For mobile configuration (iOS and Android), you can also configure the following property (not available on Web configuration):
* **Screen title**: Set the screen title used in the navigation bar on mobile devices (available only when the card element is set as the root).

### Card settings overrides
You may want to override the card title or subtitle set as **Generic** to be displayed differently on mobile devices. For example, on the web, titles might be shorter.
Available properties overrides for web (overriding properties set in **Generic** settings tab):
* Title
* Subtitle

Available properties overrides for Android (overriding properties set in **Generic** settings tab):
* Title
* Subtitle

Available properties overrides for iOS (overriding properties set in **Generic** settings tab):
* Title
* Subtitle
#### When not used as root
When the card is not the root, you can configure: **Title**, **Subtitle**, **Card Style** and **Has Accordion**.
Leverage cards in your designs to organize and present content, enhancing the overall user experience.
## Styling
When designing for the web, consider the layout options available for the card. These options include:
* **Direction**: Choose between **Horizontal** or **Vertical** alignment to define the flow of components. For example, select Horizontal for a left-to-right layout.
* **Justify (H)**: Specify how content is aligned along the main axis. For instance, select end to align items to the end of the card.
* **Align (V)**: Align components vertically within their card using options such as top, center, or bottom alignment.
* **Wrap**: Enable wrapping to automatically move items to the next line when they reach the end of the card. Useful for creating multi-line layouts.
* **Gap**: Define the space between components to control the distance between each item. Adjusting the gap enhances visual clarity and organization.
Adjusting the size of components is crucial for a responsive design. Fit W (width) offers three options:
* **fill**: Fills the available space.
* **fixed**: Maintains a fixed width.
* **auto**: Adjusts the width automatically based on content.
Similar styling considerations apply to iOS as for web.
However, for mobile applications, there's an additional layout style property specific to cards when used as the root component:
* **Scrollable**: This property allows you to define the desired behavior of the screen, specifying whether it should be scrollable or not. By default, this property is set to true, enabling scrolling functionality.
Similar styling considerations apply to Android as for web.
However, for mobile applications, there's an additional layout style property specific to cards when used as the root component:
* **Scrollable**: This property allows you to define the desired behavior of the screen, specifying whether it should be scrollable or not. By default, this property is set to true, enabling scrolling functionality.
### Theme overrides
Customize the appearance by overriding style options coming from your default theme. Available overrides:
* Border width
* Border radius
* Border color
* Background color
* Shadow
* Title
* Title Color
* Subtitle
* Subtitle Color
## Validating elements
To ensure the validation of all form elements and custom components within a card upon executing a Save Data action such as **Submit** or **Continue**, follow these steps:
1. When adding a UI action to a button inside a card, locate the dropdown menu labeled **Add forms to submit**.
2. From the dropdown menu, select the specific forms, individual form elements, or custom components you wish to validate.
3. If you select custom components, ensure they are properly configured to handle validation and data saving responsibilities.

***
### Custom component validation
UI actions enable validation and data management for custom components alongside form elements. This provides flexibility if you want to design custom components for entire screens, such as custom forms not natively supported by the platform.

#### Key features
* **Validation API**: The renderer provides a public API for validating custom components before triggering an action.
* **Custom Component Responsibilities**:
* Validate custom forms and return a boolean (`true` for valid, `false` for invalid).
* Display validation errors in the UI for invalid data.
* Populate a `saveData` property with the structured data to be submitted.
* **Configurator Responsibilities**:
* Select custom components in the **Add forms to submit** dropdown when configuring a UI action.
* Set the custom key to store the data submitted by the custom component.
By including custom components in the validation process, you can now validate and retrieve data from custom form sections, ensuring comprehensive and reliable form submission.
# Container
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-component-types/root-components/container
A container in FlowX.AI is a versatile building block that empowers you to group components and arrange them as needed, providing flexibility in UI design. It can also serve as the root component for your design.

The following properties can be configured in the container:
## Properties and settings
### Settings (applicable across all platforms)
These settings added in the **Generic** tab are available and they apply to all platforms including Web, iOS, and Android.
#### When used as root
When employed as the root component, the container offers the following settings:
* **Custom UI Payload**: A valid JSON describing the data sent to the frontend when the process reaches a specific user task.
* **Expressions (Hide condition)**: JavaScript expressions utilized to dynamically hide components based on conditions.

#### When not used as root
When the container is not used as the root, you can configure only the **Hide Condition** property.

By leveraging containers, you gain the ability to structure your UI elements efficiently, enhancing the overall design and usability of your application.
### Container settings overrides
You may want to override settings configured in the **Generic** tab to be displayed differently on mobile devices.
* **Hide expressions**: Use Overrides in the Settings tab to hide a container on a specific platform.
For instance, you can set a container to appear on all platforms, or create an override to hide it on mobile but show it on web.

To achieve this:
1. Select a Container element in the UI Designer, then navigate to Settings -> your desired platform -> Overrides (+) -> Expressions -> Hide.
2. Add your JavaScript Hide condition.
## Styling
When designing for the web, consider the layout options available for the container. These options include:
* **Position**
* **Static**: This style remains fixed and does not scroll along with the page content.
* **Sticky**: When the sticky property is enabled, the container maintains its position even during scrolling.
* **Sticky layout**: You have the option to specify minimum distances between the container and its parent element while scrolling. At runtime, sticky containers will keep their position on scroll relative to top/ bottom/ right/ left margin of the parent element.

* **Direction**: Choose between **Horizontal** or **Vertical** alignment to define the flow of components. For example, select Horizontal for a left-to-right layout.
* **Justify (H)**: Specify how content is aligned along the main axis. For instance, select end to align items to the end of the container.
* **Align (V)**: Align components vertically within their container using options such as top, center, or bottom alignment.
* **Wrap**: Enable wrapping to automatically move items to the next line when they reach the end of the container. Useful for creating multi-line layouts.
* **Gap**: Define the space between components to control the distance between each item. Adjusting the gap enhances visual clarity and organization.
Adjusting the size of components is crucial for a responsive design. Fit W (width) offers three options:
* **fill**: Fills the available space.
* **fixed**: Maintains a fixed width.
* **auto**: Adjusts the width automatically based on content.
Similar styling considerations apply to iOS as for web.
However, there are exceptions, particularly with **Sticky layout**:

In mobile configurations, the right and left properties for **Sticky layout** are ignored by the iOS renderer.
Similar styling considerations apply to Android as for web.
However, there are exceptions, particularly with **Sticky layout**:

In mobile configurations, the right and left properties for **Sticky layout** are ignored by the Android renderer.
### Theme overrides
Customize the appearance by overriding style options coming from your default theme. Available overrides:
* Border width
* Border radius
* Border color
* Background color
* Shadow
More layout demos available below:
For more information about styling and layout configuration, check the following section:
# Custom component
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-component-types/root-components/custom
Custom components are developed in the web application and referenced here by component identifier. This will dictate where the component is displayed in the component hierarchy and what actions are available for the component.
Starting with **3.4.7** platform version, for User Tasks containing UI Elements, when the page is rendered, the Backend (BE) should, by default, send to the Frontend (FE) all available data as process variables with matching keys.
If the User Task also includes a **custom component**, the BE should send, in addition to default keys, objects mentioned in the "Message" option of the root element.
To add a custom component in the template config tree, we need to know its unique identifier and the data it should receive from the process model.

The properties that can be configured are as follows:
* **Identifier** - This enables the custom component to be displayed within the component hierarchy and determines the actions available for the component.
* **Input keys** - These are used to specify the pathway to the process data that components will utilize to receive their information.
* [**UI Actions**](../../ui-actions) - actions defined here will be made available to the custom component

## Prerequisites (before creation)
* **Angular Knowledge**: You should have a good understanding of Angular, as custom components are created and imported using Angular.
* **Angular CLI**: Ensure that you have Angular CLI installed.
* **Development Environment**: Set up a development environment for Angular development, including Node.js and npm (Node Package Manager).
* **Component Identifier**: You need a unique identifier for your custom component. This identifier is used for referencing the component within the application.
## Creating a custom component (Web)
To create a Custom Component in Angular, follow these steps:
1. Create a new Angular component using the Angular CLI or manually.
2. Implement the necessary HTML structure, TypeScript logic, and SCSS styling to define the appearance and behavior of your custom component.

## Importing the component
After creating the Custom Component, you need to import it into your application.
In your `app.module.ts` file (located at src → app → app.module.ts), add the following import statement:
```ts theme={"system"}
`import { YourComponent } from '@app/components/yourComponent.component'`
```

## Declaration in AppModule
In the same `app.module.ts` file, declare your Custom Component within the `declarations` array in the `@NgModule` decorator:
```ts theme={"system"}
@NgModule({
declarations: [
// ...other components
YourComponent
],
// ...other module configurations
})
```
## Declaration in FlxProcessModule
To make your Custom Component available for use in processes created in FlowX.AI Designer, you need to declare it in `FlxProcessModule`.
In your process.module.ts file (located at src > app > modules > process > process.module.ts), add the following import statement:
```ts theme={"system"}
import { YourComponent } from '@app/components/yourComponent.component';
```
Then, declare your Custom Component in the `FlxProcessModule.forRoot` function:
```ts theme={"system"}
FlxProcessModule.forRoot({
components: {
// ...other components
yourComponent: YourComponent
},
// ...other module configurations
})
```
## Using the custom component
Once your Custom Component is declared, you can use it for configuration within your application.

## Data input and actions
The Custom Component accepts input data from processes and can also include actions extracted from a process. These inputs and actions allow you to configure and interact with the component dynamically.

## Extracting data from processes
There are multiple ways to extract data from processes to use within your Custom Component. You can utilize the data provided by the process or map actions from the BPMN process to Angular actions within your component.

Make sure that the Angular actions that you declare match the names of the process actions.
## Styling with CSS
To apply CSS classes to UI elements within your Custom Component, you first need to identify the UI element identifiers within your component's HTML structure. Once identified, you can apply defined CSS classes to style these elements as desired.
Example:

## Custom component example
Below you can see an example of a basic custom loader component built with Angular:

## Additional considerations
* **Naming Conventions**: Be consistent with naming conventions for components, identifiers, and actions. Ensure that Angular actions match the names of process actions as mentioned in the documentation.
* **Component Hierarchy**: Understand how the component fits into the overall component hierarchy of your application. This will help determine where the component is displayed and what actions are available for it.
* **Documentation and Testing**: Document your custom component thoroughly for future reference. Additionally, testing is crucial to ensure that the component behaves as expected in various scenarios.
* **Security**: If your custom component interacts with sensitive data or performs critical actions, consider security measures to protect the application from potential vulnerabilities.
* **Integration with FlowX.AI Designer**: Ensure that your custom component integrates with FlowX.AI Designer, as it is part of the application's process modeling capabilities.
## Creating a custom component (iOS)
Enhance your skills with our academy course! Learn how to develop and integrate a custom iOS component with FlowX.AI:
# Root Components in UI Design
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-component-types/root-components/root-components
Root components serve as the foundation for structuring user interfaces, providing the framework for arranging and configuring different types of components.

Root components play a crucial role in defining the layout and hierarchy of elements within an application. Here's an overview of key root components and their functionalities:
### Container
The Container component is a versatile element used to group and configure the layout for multiple components of any type. It provides a flexible structure for organizing content within a UI.
Learn more about [Container components](./container).
### Custom
Custom components are Angular components developed within the container application and dynamically passed to the SDK at runtime. These components are identified by their unique names and enable developers to extend the functionality of the UI.
Explore [Custom components](./custom) for advanced customization options.
### Card
The Card component functions similarly to a Container component but also offers the capability to function as an accordion, providing additional flexibility in UI design.
Discover more about [Card components](./card).
A card or a container can hold a hierarchical component structure as this example:

Available children for **Card** and **Container** are:
1. [**Form**](../form-elements/) - Used to group and align form field elements (inputs, radios, checkboxes, etc.).
For more information about the form elements, please refer to the [**Form elements**](../form-elements/) section.
2. [**Image**](../image) - Allows you to configure an image in the document.
3. **Text** - A simple text can be configured via this component; basic configuration is available.
4. **Link** - Used to configure a hyperlink that opens in a new tab.
5. [**Button**](../buttons) - Multiple options are available for configuration, with the most important part being the possibility to add actions.
6. [**File Upload**](../buttons) - A specific type of button that allows you to select a file.
7. [**Custom**](./custom) - Custom components.
8. [**Indicators**](../indicators) - Message UI elements to display different types of messages.
Learn more:
# UI Designer
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-designer
The FlowX.AI UI Designer is a comprehensive, multi-platform interface creation tool that enables visual design of user experiences across web, iOS, and Android platforms without extensive coding.
## Purpose
The **FlowX.AI UI Designer** is an intuitive interface creation tool for building user interfaces within FlowX.AI processes. It provides a visual editor where you can add, arrange, and configure UI components to create rich web interfaces for your business processes.
### Key capabilities
Create interfaces with platform-specific configuration and styling across Web, iOS, and Android
Use a drag-and-drop environment to design diverse UI templates with various elements and components
Preview your designs across different platforms and themes with live feedback
Access ready-to-use UI components including form elements, containers, and specialized components
The UI Designer integrates with BPMN process flows, making it available for [**User Task**](../node/user-task-node) nodes and **Navigation Areas** to create contextual user interfaces.
## UI Designer interface
The UI Designer provides a comprehensive interface for creating and configuring user interfaces within your FlowX.AI processes.
### Platform selection
The UI Designer supports multi-platform design with dedicated configuration tabs:
**Full Feature Support**: Complete UI Designer functionality with all component types and navigation features
* All UI component types supported
* Full navigation area capabilities
* Zones with headers and footers
* Single page and wizard navigation types
**Mobile-Optimized Interface**: Platform-specific properties and limitations
* Basic navigation areas (no zones with headers/footers)
* Screen title configuration for navigation bar
* Scrollable property for card components
* Platform-specific property overrides
**Mobile-Optimized Interface**: Android-specific adaptations
* Basic navigation areas (no zones with headers/footers)
* Screen title configuration for navigation bar
* Platform-specific property overrides
* Material design considerations
### Configuration panels
The UI Designer interface consists of configuration sections for comprehensive component setup:
**Generic Configuration**: Properties available cross-platform (Web, Android and iOS)
**Platform-Specific Settings**: Override generic properties for specific platforms
* Property overrides (Title, Subtitle, Helper text)
* Expression overrides (Hide conditions)
* Import/export functionality between platforms
**Theme Integration**: Components inherit styling from the active theme by default
**Theme Overrides**: Customize component appearance beyond theme settings
* Platform-specific styling
* Conditional styling (for Text, Link, Container elements)
* Import/export styles between platforms
**Multi-Platform Preview**: Switch between platforms to preview designs
* Real-time platform switching
* Theme selection for preview
* Visual estimation for mobile platforms
iOS and Android previews are estimates to help visualize mobile views.
### UI components available
The FlowX.AI platform offers a variety of ready-to-use UI components for creating rich web interfaces:
**Layout Foundation Elements**:
* **[Container](./ui-component-types/root-components/container)**: Flexible grouping and layout control
* **[Card](./ui-component-types/root-components/card)**: Content cards with built-in styling
* **[Custom](./ui-component-types/root-components/custom)**: Advanced custom component integration
These components serve as the foundation for structuring user interfaces and provide the framework for arranging other UI elements.
**Data Collection Components**: Essential for collecting user information
* **[Input](./ui-component-types/form-elements/input-form-field)**: Text input fields
* **[Textarea](./ui-component-types/form-elements/text-area)**: Multi-line text input
* **[Select](./ui-component-types/form-elements/select-form-field)**: Dropdown menus
* **[Checkbox](./ui-component-types/form-elements/checkbox-form-field)**: Multiple selection options
* **[Radio](./ui-component-types/form-elements/radio-form-field)**: Single selection from options
* **[Switch](./ui-component-types/form-elements/switch-form-field)**: Toggle controls
* **[Datepicker](./ui-component-types/form-elements/datepicker-form-field)**: Date and time selection
* **[Slider](./ui-component-types/form-elements/slider)**: Range and numeric input
* **[Segmented Button](./ui-component-types/form-elements/segmented-button)**: Multi-option selection
Each form element serves a unique purpose and offers different options for capturing user input.
**Interactive and Display Components**:
* **[Buttons](./ui-component-types/buttons)**: Action triggers and navigation
* **[File Upload](./ui-component-types/file-preview)**: Document and media upload
* **[Image](./ui-component-types/image)**: Media display
* **[Typography](./ui-component-types/typography)**: Text and links
* **[Table](./ui-component-types/table)**: Structured data presentation
* **[Indicators](./ui-component-types/indicators)**: Status and message display
**Dynamic Content Components**:
* **[Collection](./ui-component-types/collection/collection)**: Dynamic lists of data
* **[Collection Prototype](./ui-component-types/collection/collection-prototype)**: Templates for collection items
These components handle repeated content and dynamic data presentation.
### Component configuration
After adding a UI component, the right-side menu displays configuration options:
* **Settings Tab**: Configure component properties and behavior
* **Styles Tab**: Customize appearance and apply theme overrides
* **Platform Overrides**: Adapt components for specific platforms
### Navigation areas integration
Navigation areas can be configured through the UI Designer, providing:
* Hierarchical navigation structure
* Platform-specific navigation capabilities
* Copy/paste functionality for consistency across platforms
## Using the UI designer
To access the UI Designer and start building interfaces:
Navigate to **FlowX.AI Designer** and select **Definitions** from the **Processes** tab.
Choose a **process** from the process definitions list.
Click the **Edit process** button to enter editing mode.
Select a **User Task node** or a **Navigation Area** then click the **brush icon** to open the **UI Designer**.

The UI Designer is available for [**User Task**](../node/user-task-node) nodes and **Navigation Areas** elements, providing contextual interface design capabilities.
**Productivity Features**:
* **Undo/Redo**: Available within the UI Designer for actions such as dragging, dropping, or deleting elements
* **Keyboard Shortcuts**: Use keyboard commands for quick access to undo/redo functionality
* **Drag and Drop**: Support for dragging and dropping elements in the preview section
* **Settings Panel**: Right-side menu displays configuration options after adding components
## Comprehensive design guides
Master the UI Designer with our detailed guides covering every aspect of interface creation:
**How to Approach Screen Configuration**
Learn the systematic methodology for creating effective user interfaces:
* User journey definition and analysis
* Navigation pattern selection
* Information architecture planning
* Layout strategy implementation
* Platform-specific adaptations
* Validation and testing approaches
**UI Designer Best Practices**
Essential guidelines for creating accessible, performant interfaces:
* User-centered design principles
* Information architecture standards
* Component usage excellence
* Accessibility compliance (WCAG 2.1)
* Testing and quality assurance
* Maintenance strategies
**Platform-Specific Guidelines**
Comprehensive platform optimization and limitation reference:
* Web, iOS, and Android design patterns
* Performance optimization strategies
* Platform-specific constraints and workarounds
* Security and privacy considerations
* Cross-platform testing protocols
**Advanced UI Designer Capabilities**
Discover the powerful features in FlowX.AI UI Designer:
* Conditional styling for dynamic interfaces
* Platform-specific configuration and overrides
* Advanced form components with validation
* Navigation areas integration
* Flexible layout configuration and reusable templates
## Latest features
FlowX.AI UI Designer includes several advanced features for creating rich, interactive user interfaces:
**Dynamic Styling Based on Data**
* Apply styles conditionally based on process data
* Available for Text, Link, and Container elements
* Real-time evaluation with priority handling
* Platform-specific styling overrides
**Configuration**:
* Navigate to Styles tab → Conditional Styling section
* Add expressions and effects using JS Editor
* Define conditions and style overrides
Use conditional styling to highlight data patterns, outliers, or trends directly within the interface, reducing the need for multiple prototypes.
**Multi-Platform Design Support**
* Universal configuration and styling across Web, iOS, and Android
* Platform-specific property overrides
* Generic settings with targeted customizations
* Import/export overrides between platforms
**Key Features**:
* Settings tab with platform selection
* Override system for properties and expressions
* Preview across different platforms
* Consistent yet platform-optimized experiences
**Rich Form Element Support**
* Input fields with validation (required, custom)
* Select components with CHANGE event handling
* Checkboxes and radio buttons with dynamic behavior
* File upload components with platform considerations
* Date pickers and sliders for enhanced input
**Validation Features**:
* Required field validation
* Custom validation rules
* Conditional validation based on other fields
* Real-time validation feedback
**Enhanced Navigation Design**
* Navigation areas accessible within UI Designer
* Platform-specific navigation capabilities
* Web: Full zones with headers/footers, wizard navigation
* Mobile: Basic navigation areas with screen titles
* Copy/paste navigation areas for consistency
**Flexible Layout System**
* Linear layout with direction, justify, align controls
* Grid layout support for complex designs
* Gap settings for proper spacing
* Wrap functionality for responsive behavior
* Available for containers and grouping components
**Component Reusability**
* Create modular UI components for reuse across processes
* Template hierarchy with data model support
* Input/output parameter mapping
* Visual components and layout focus
* Cannot include complex business logic
## UI components
FlowX offers a wide range of [UI components](./ui-designer#ui-components) that can be customized using the UI Designer. For example, when configuring a [card](./ui-component-types/root-components/card) element (which is a root component), the following properties can be customized:

### Settings tab

#### Generic tab
This is where you configure the logic and assign process keys, UI actions, and other component settings that are common across all platforms (Web, iOS, Android).
#### Platform-specific settings
For example, on Android, you might want to change the Card title to a shorter one.
To override a general property like a title, follow these steps:
Access the UI Designer and select a UI Element, such as a **Card**.
From the UI Designer navigation panel, select the **Settings** tab, then select the **desired platform**
Click the "+" button (next to "Overrides") and select **Properties -> Title**, then input your desired value.
Settings overrides can always be imported/pushed from one platform to another:

Preview your changes in the UI Designer by navigating from one platform to another or by comparing them.

Keep in mind that the preview generated in the UI Designer for iOS and Android platforms is an estimate meant to help you visualize how it might look on a mobile view.
#### Hide expressions
By utilizing **Overrides** in the **Settings** tab, you can selectively hide elements on a specific platform.
To achieve this:
Select a UI component in the **UI Designer**, then navigate to **Settings** -> **your desired platform** -> **Overrides (+)** -> **Expressions** -> **Hide**.
Add your JavaScript Hide condition.

## Permission-based expressions
Control UI element visibility and interaction based on user roles and process data.
Complete guide to configuring role-based UI permissions, cross-swimlane references, and collaborative workflows
### Quick configuration
In process settings, enable **Allow multiple executors** for your swimlane.
In **UI Designer**, select the component to configure.
Expand **Permissions** section and click **+** to add hide or disable conditions.
Set **Type** (USERNAME/ROLE), **Operator** (IN/NOT\_IN), **Value Type**, and **Value**.
Use `CONFIGURATION_SWIMLANE_ROLE` for swimlane roles and `PROCESS_DATA` for dynamic values. `SWIMLANE_OWNER` requires no value.
### Styles tab
The Styles tab functions independently for three platforms: Web, iOS, and Android. Here, you can customize styles for each UI component on each platform.

If you want to customize the appearance of a component to differ from the theme settings, you must apply a **Theme Override**.

Theme overrides can be imported from one platform to another.

#### Copy/paste styles
Contextual menu functionality enables efficient style management:
* **Copy Style**: Copy styling properties between compatible components
* **Paste Style**: Apply copied styles to selected components
* **Copy to/from Platform**: Share styles across Web, iOS, and Android platforms
* **Multiple selection**: Apply styles to multiple components simultaneously
Compatible component groups for style copying:
* **Input-like**: Input, Select, Datepicker, Textarea, Multiselect
* **Selection**: Radio, Checkbox
* **Container**: Container, Form, Card, Collection, Collection Prototype
* **Action**: Button, File Upload

#### Copy/paste platform actions
### Preview
When you are editing a process in **UI Designer** you have the possibility of having the preview of multiple themes:

Overrides are completely independent of the theme, regardless of which theme you choose in the preview mode.
### Layout
There are two main types of layouts for organizing child elements: **Linear** and **Grid**.
* **Linear Layout**: Arranges child elements in a single line, either horizontally or vertically. Ideal for simple, sequential content flow.
* **Grid Layout**: Organizes elements into a structured grid with multiple columns and rows, useful for more complex, multi-dimensional designs.
* **Platform-Specific Layouts**: You can customize layout settings per platform (e.g., Grid on web, Linear on mobile) to ensure optimal responsiveness.
Both layouts offer options to customize direction, alignment, spacing, and wrap behavior for flexibility in design.

### Sizing
By setting desired values for these props, you can ensure that all UI elements on the interface are the desired size and perfectly fit with each other.
When adjusting the Fit W and Fit H settings, users can control the size and shape of the elements as it appears on their screen:
* Fit W: fill, fixed or auto
* Fit H: fill, fixed or auto

### Spacing
Margin and padding are CSS properties used to create space between elements in a web page:
* **margin** - the space outside an element
* **padding** - the space inside an element

### Advanced
* **Advanced** - for advanced customization, users can add CSS classes to pre-defined components, this option is available under the **Advanced** section
* **Data Test ID** - add custom test identifiers for automated testing and element interaction
By utilizing these styling options in FlowX.AI, users can create unique and visually appealing interfaces that meet their design requirements.
#### Data Test ID
The Advanced section includes a **Data Test ID** field, allowing you to assign custom identifiers to UI components. This feature enhances automated testing by providing meaningful, easily identifiable selectors for UI elements.
Key benefits:
* Replace auto-generated test IDs with custom, readable identifiers
* Simplify element targeting in test scripts

## Tree view
The Tree View panel displays the component hierarchy, allowing users to easily navigate through the different levels of their interface.
Clicking on a specific component in the tree will highlight the selection in the editor, making it easy to locate and modify.

## UI component types
Different UI component types can be configured using UI Designer. The UI components are available and can be configured only using **user task nodes** or **navigation areas**.
Depending on the component type different properties are available for configuration.
Understanding these component types will help you to better utilize the UI Designer tool and create rich web interfaces.
* [Container](./ui-component-types/root-components/container)
* [Card](./ui-component-types/root-components/card)
* [Custom](./ui-component-types/root-components/custom)
* [Collection](./ui-component-types/collection/collection)
* [Collection Prototype](./ui-component-types/collection/collection-prototype)
* [Button](./ui-component-types/buttons)
* [File Upload](./ui-component-types/buttons#file-upload)
* [Image](./ui-component-types/image)
* Text
* Link
Form elements are a crucial aspect of creating user interfaces as they serve as the means of collecting information from the users. These elements come in various types, including simple forms, [inputs](./ui-component-types/form-elements/input-form-field), [text areas](./ui-component-types/form-elements/text-area), drop-down menus ([select](./ui-component-types/form-elements/select-form-field)), [checkboxes](./ui-component-types/form-elements/checkbox-form-field), [radio buttons](./ui-component-types/form-elements/radio-form-field), toggle switches ([switch](./ui-component-types/form-elements/switch-form-field)), [segmented buttons](./ui-component-types/form-elements/segmented-button), [sliders](./ui-component-types/form-elements/slider) and [date pickers](./ui-component-types/form-elements/datepicker-form-field). Each of these form elements serves a unique purpose and offers different options for capturing user input.
* Form
* [Input](./ui-component-types/form-elements/input-form-field)
* [Textarea](/4.0/docs/building-blocks/ui-designer/ui-component-types/form-elements/text-area)
* [Select](./ui-component-types/form-elements/select-form-field)
* [Checkbox](./ui-component-types/form-elements/checkbox-form-field)
* [Radio](./ui-component-types/form-elements/radio-form-field)
* [Switch](/4.0/docs/building-blocks/ui-designer/ui-component-types/form-elements/switch-form-field)
* [Segmented button](/4.0/docs/building-blocks/ui-designer/ui-component-types/form-elements/segmented-button)
* [Slider](/4.0/docs/building-blocks/ui-designer/ui-component-types/form-elements/slider)
* [Datepicker](./ui-component-types/form-elements/datepicker-form-field)
* [Message](./ui-component-types/indicators)
Navigation areas
* Page
* Stepper
* Step
* Modal
* Container
# Fonts
Source: https://docs.flowx.ai/5.1/docs/flowx-designer/design-assets/font-files
Fonts management allows you to upload and manage multiple font files, which can be later utilized when configuring UI templates using the UI Designer.
## Managing fonts
The "Font Management" screen displays a table with uploaded fonts. The following details are available:
* **FontFamily**: The names of the uploaded font families.
* **File Name**: The name of the font file.
* **Weight**: The weight of the font, represented by a numeric value.
* **Style**: The style of the font, such as "italic" or "normal".
* **Actions**: This tab contains options for managing the uploaded fonts, such as deleting or downloading them.

## Uploading fonts
### Uploading theme font files
To upload new theme font files, follow these steps:
1. Open **FlowX.AI Designer**.
2. Navigate to the **Content Management** tab and select **Font files**.
3. Click **Upload font** (the **+** button) and choose a valid font file.
The accepted font format is TTF (TrueType Font file). **Only static TTF fonts are supported**. Variable fonts (dynamic fonts with adjustable width/weight in a single file) are not supported.
Each font weight and style combination requires a separate TTF file. For example, if you need "Open Sans" in regular (400), bold (700), and italic styles, you must upload separate TTF files for each variant.
4. Optionally, follow this naming convention for better compatibility: `[font family]-[font weight][font style]` (for example, `OpenSans-700Italic.ttf`).
5. Click **Upload**. You can upload multiple TTF font files.
6. For each uploaded font file, the system will automatically extract information such as font family, weight, and style from the file metadata.

## Exporting fonts
You can use the export feature to export a JSON file containing all the font files.

The exported JSON will look like this:
```json theme={"system"}
{
"fonts": [
{
"fontFamily": "Open Sans",
"filename": "OpenSans-ExtraBoldItalic.ttf",
"weight": 800,
"style": "italic",
"size": 135688,
"storagePath": "https://d22tnnndi9lo60.cloudfront.net/devmain/flowx/fonts-folder/1690383294848_OpenSans-ExtraBoldItalic.ttf",
"contentType": "font/ttf",
"application": "flowx",
"flowxUuid": "ce0f75e2-72e4-40e3-afe5-3705d42cf0b2"
},
{
"fontFamily": "Open Sans",
"filename": "OpenSans-BoldItalic.ttf",
"weight": 700,
"style": "italic",
"size": 135108,
"storagePath": "https://d22tnnndi9lo60.cloudfront.net/devmain/flowx/fonts-folder/1690383295987_OpenSans-BoldItalic.ttf",
"contentType": "font/ttf",
"application": "flowx",
"flowxUuid": "d3e5e2a0-958a-4183-8625-967432c63005"
}
//...
],
"exportVersion": 1
}
```
## Importing fonts
You can use the import feature to import a **JSON file** containing font files from another environment. This is useful for transferring your font library between different environments (for example, from development to production).
**Important distinction**:
* **Import** = Upload a JSON file exported from another environment (bulk transfer of fonts)
* **Upload font** (+) = Add individual TTF font files one by one
If a font file already exists in the target environment, you will be notified.

## Using fonts in UI Designer
For example, for an input UI element you can customize the typography by changing the following properties:
* Label:
* Font family
* Style and weight
* Font line size (px)
* Font line height (px)
* Text:
* Font family
* Style and weight
* Font line size (px)
* Font line height (px)
* Helper & errors:
* Font family
* Style and weight
* Font line size (px)
* Font line height (px)

# Global Media Library
Source: https://docs.flowx.ai/5.1/docs/flowx-designer/design-assets/global-media-library
System assets serve as a centralized hub for managing and organizing various types of media files outside an application, used on themes, including images, GIFs, and more.

# 🌐 Global Media Library
This section is accessible from the left-side navigation under:
> **FlowX.AI Designer → Design Assets → Global Media Library**
***
## 📁 Media Library overview
The main **Media Library** interface displays all uploaded media assets in a table format with the following columns:
* **Preview**: Thumbnail preview of the asset.
* **Key**: A unique identifier for the asset.
* **Format**: File type (e.g., SVG, PNG).
* **Size**: File size.
* **Used as icon**: Indicates if the asset is used as a global icon (✓ if true).

* **Edited by**: User who last modified the asset.
* **Edited at**: Timestamp of the last modification.
Each asset row also includes:
* ✏️ **Edit icon**: To update the asset.
* ⋮ **More actions menu**: For additional options.
***
## ➕ Adding a New Asset
To add a new media asset:
1. Click the **blue plus (+)** button in the top-right corner.
2. In the **Add new item** dialog:
* Click **Upload item** to select a file from your device.
* Enter a **Key** for the asset.
3. Click **Add** to upload the item to the library.
**Important:** The key must be unique and **cannot** be changed later. Choose it carefully.
***
## 📥 Import and Export
Click the **⋮ menu** next to the + button to access:
* **Import media assets**: Bulk upload multiple media files.
* **Export all**: Download all media assets as a ZIP archive.
***
## 🔍 Search Functionality
Use the **Search item by key** bar at the top to find media assets quickly. Results are filtered as you type.
***
## 📌 Icon Usage
If an asset is marked with a ✓ under the **Used as icon** column, it is actively used as a global icon across the FlowX.AI platform.
# Themes
Source: https://docs.flowx.ai/5.1/docs/flowx-designer/design-assets/themes
Theme management feature enables you to easily change the appearance and styling of your application. You can personalize the look and feel of your application to your branding, preferences, or specific requirements.

## Key features of Theme Management
1. **Theme Management:**
* Creation, editing, and management of themes.
* Selection of predefined themes or customization of themes from scratch.
2. **Customization Options:**
* Modification of color schemes, typography, spacing, and visual effects.
* Upload of custom assets like fonts and icons.
3. **Overrides and Variations:**
* Ability to override default UI components styles properties on specific elements or sections.
* Creation of different themes to accommodate different users/clients preferences.
4. **Platform Consistency:**
* Consistency of theme styles across different platforms and devices.
5. **Preview:**
* Real-time visualization of theme changes.
6. **Export/Import Functionality:**
* Export of themes for backup, sharing, or reuse across multiple environments (UAT, DEV, etc.).
* Import of exported from other environments.
## Creating a new theme
You have two options for creating the theme. You can import a theme that was exported from another environment (for example, your UAT/DEV) or to manually create it.
To successfully create a new theme in FlowX.AI Designer, follow these steps:
Locate the "Create New" button positioned above the right of the **Themes** list table.
Click the "Create New" button and enter details for your theme:
* **Theme Name** - pick a name for your theme
* **Font Family** - select your desired font family, by default, the system provides "Open Sans"
If you wish to add a new font, click on the link provided under the **Font Family** field, which redirects you to the **Fonts management** Selection.
* **Choose your primary color** - the default color is `#006BD8`.
Verify that the color format is in **HEX**. If not, an error message will indicate "Please insert a HEX color."
## Configuring a new theme
After creating a theme, you must configure it. To configure your theme effectively, follow these steps:
* Navigate to the settings or customization section of your application (in the UI Designer).
* Look for options related to styling and think of an overall design
The Themes styles mechanism is based on hierarchy. In this hierarchy we have the following elements: Design Tokens, Global Settings and Components.
Modify color schemes (using the design tokens), typography, spacing, and other visual elements to match your desired look and feel.
Use the provided tools or controls to adjust theme settings. This might include sliders, color pickers, or dropdown menus.
**The Design Tokens** represent values based on which the theme is built.
* **Color Palette, Shadows, Typography Tokens**: Configure these tokens based on your company's brand guidelines. They ensure reusability and consistency.

The **Global Settings** are properties that inherit values from the **Design Tokens** and sit on the top of the hierarchy. These properties are then inherited by the **Components**.
* **Platform-specific Settings**: Configure settings for each platform (web, iOS, Android) based on the global settings you've defined.
* **Styles and Utilities**: General settings applying to all components (styles) and labels, errors, and helper text settings (utilities).

When setting up your theme, remember that different platforms like web, iOS, and Android have their own settings. You need to configure each platform separately. Only color settings are the same across all platforms.
For example, you can configure a web theme, and then leverage the push and import options. You can push from the web the same configuration to iOS or Android.
**Component-level Configuration**: Customize the style of each component type.
Keep in mind, there are differences between platforms, for example, for button configuration there are different properties available. What you configure on a platform will not be inherited by the others.

* Before finalizing the theme configuration, it's crucial to review how the changes will appear across different platforms. This step ensures consistency and allows for platform-specific adjustments if needed.
* You can do that by either using the preview feature from **Themes** or by using the preview mode in the **UI Designer** by switching to your preffered platform.
Keep in mind that the preview generated in the UI Designer for iOS and Android platforms is an estimate meant to help you visualize how it might look on a mobile view.
Here is a quick walkthrough video on how to create and configure a theme:
## Managing themes - process level (theme overrides)
With the Overrides feature you have now the possibility to override default theme settings on specific elements or sections.
Use Theme Overrides in UI Designer to adjust styles or props for specific UI elements based on the desired platform (Web, iOS and Android).
All components can now be styled with token overrides, for color, typography and shadow settings defined in the theme.
**Theme overrides** in **UI Designer** are applied to the component itself, rather than to specific themes. This means that when switching the view to another theme, the overrides persist and apply to the new theme as well.
### Styles tab
The Styles tab functions independently for three platforms: Web, iOS, and Android. Here, you can customize styles for each UI component on each platform.
If you want to customize the appearance of a component to differ from the theme settings, you must apply a **Theme Override**.

Theme overrides can be imported from one platform to another.


Preview mode: In the UI Designer, overrides are entirely independent of the theme. Regardless of the theme selected in preview mode, you will see the applied override reflected at the UI Designer level.
### Preview
When you are editing a process in **UI Designer** you have the possibility of having the preview of multiple themes:

Overrides are completely independent of the theme, regardless of which theme you choose in the preview mode.
## Using a Theme in the container application
To integrate the theme into your container application, follow these steps:
* Copy the unique identifier (UUID) associated with the theme.
* Set the copied UUID within your container application.
* By doing so, ensure that the renderers within your application can recognize and apply the specified theme.

## Exporting/importing a theme
The Export/Import functionality in the theme management system allows users to export themes for various purposes such as backup, sharing, or reuse across multiple environments.
Additionally, it enables the seamless import of themes previously exported from other environments, facilitating swift integration and continuity across design workflows.
Import is restricted to internal FlowX.AI mechanisms only; themes from external sources like Figma or Zeplin are not supported.
### Exporting a theme
Navigate to the **Theme Management** panel within FlowX.AI Designer.
Select the theme(s) you wish to export.
From the breadcrumbs menu on the right, select **Export Theme**.
The exported theme is saved in a standard format (JSON) and can be downloaded to a local directory or storage location.

### Importing a theme
Navigate to the **Theme Management** panel within FlowX.AI Designer.
From the contextual menu on the right, select **Import Theme**.
Import it as a new theme or if the theme already exists in other environment, you can override it.

### Setting a default theme
You can easily establish a default theme by accessing the contextual menu on the right side of a theme and selecting "Set as Default."

When a default theme is not set (or you haven't created a theme yet), the platform automatically assigns the FlowX.AI Theme, which is the platform's default theme. This ensures that there's always a default theme in place to provide a consistent appearance across processes and interactions within the application.
In case you select a specific default theme but later you delete it, the platform will revert to the FlowX.AI theme as the default. This safeguard ensures that there's always a default theme available, even if you remove your custom selection.

Upon opening any process within the UI Designer, the default theme is displayed as the initial preview. This gives users a clear starting point and ensures consistency in the appearance of the process until further customization is applied.

When creating a new process, you will notice the Default Theme (*FlowXTheme*) as the default preview.

Furthermore, when you start a process definition, the theme switch defaults to the default theme in the run process popup from the process definitions list. This ensures that the default theme is consistently applied during the execution of processes, maintaining visual coherence in user interactions.
# Adding a new node
Source: https://docs.flowx.ai/5.1/docs/flowx-designer/managing-a-project-flow/adding-a-new-node
Learn how to add and configure different node types to build robust process flows in FlowX.AI Designer.
Once you've created a process definition, the next step is to build your process flow by adding and connecting nodes. Nodes represent different steps, events, and decision points in your business process.

## What is a BPMN node?
A BPMN (Business Process Model and Notation) node is a visual representation of a point in your process. Nodes are added at specific process points to denote the entrance or transition of a record within the process. Each node type has a specific purpose and configuration requirements.
## Available node types
FlowX.AI supports a rich variety of BPMN node types that you can use to model your business processes:
### Flow control nodes
Marks the beginning of a process flow
Marks the conclusion of a process flow
### Activity nodes
Executes automated tasks and business rules
Creates user interfaces and handles user interactions
Sends data to external systems or services
Receives data from external systems or services
### Gateway nodes
Creates decision points with mutually exclusive paths
Splits process flow into multiple concurrent paths
### Event nodes
Captures interactions between different process participants
Triggers actions based on time conditions or delays
Manages error handling in processes
### Subprocess nodes
Calls and runs a subprocess within the main process
Initiates subprocesses embedded within a parent process
### Boundary event nodes
Waits for a specific message during task execution
Triggers based on time conditions during task execution
Catches errors during task or subprocess execution
Boundary events can only be attached to certain node types:
* User Task
* Service Task
* Send Message/Receive Message Tasks
* Subprocess (Embedded and Call Activity)
For more information on BPMN node types and BPMN standards, see the following resources:
BPMN node types in FlowX.AI
Learn fundamental BPMN concepts and standards
For a comprehensive understanding of BPMN standards and concepts, see [BPMN 2.0 Basic Concepts](../../platform-overview/frameworks-and-standards/business-process-industry-standards/intro-to-bpmn).
Learn more about BPMN and how it's used in FlowX through our Academy course
## Adding a node to your process
1. Open **FlowX.AI Designer** and navigate to your project
2. Go to the **Processes** section within your project
3. Click on the process definition you want to edit
1. Locate the node palette on the left side of the screen
2. **Drag and drop** your desired node type onto the canvas
3. Position the node where you want it in your process flow
Organize your process flow from left to right for better readability. Place related nodes closer together to show their relationship.
To create a connection between nodes (called a sequence flow):
1. Click on the source node to select it
2. Click the **arrow** icon that appears
3. Click on the target node you want to connect to
4. A sequence flow arrow will be created between the two nodes

Every node (except End nodes) must have at least one outgoing sequence flow, and every node (except Start nodes) must have at least one incoming sequence flow for the process to be valid.
After adding a node, you need to configure its properties:
1. Click on the node to select it to open the properties panel
2. Click edit icon to open the properties panel
3. Configure basic properties like name and description
4. Set node-specific properties depending on the node type
5. Configure actions for the node


Different node types have different configuration options. For example, Gateway nodes have condition-related settings.

For nodes that support actions (task nodes, user task nodes, and message nodes):
1. Select the node
2. In the properties panel, navigate to the **Actions** section
3. Click **+ Add Action**
4. Select the action type and configure its parameters

Actions allow you to incorporate business rules, save data, send messages, and interact with users. Learn more about [Node Actions](../../building-blocks/actions/actions).
## Common node configuration options
While each node type has specific properties, many share these common configuration options:
* **Name**: A descriptive name for the node (visible in the Process Designer).
* **Can go back**: Option available in various nodes that controls whether users can return to previous steps in a process. When enabled (set to true), it allows users to revisit and redo that step after completing it.
* **Stage**: The stage of the process the node belongs to.
For nodes that support actions:
* **Action Type**: Type of action to execute
* **Action Parameters**: Configuration for the specific action
* **Execution Order**: Sequence for multiple actions on a node
## Node type-specific configuration
* UI Component selection
* Form configuration
* Data validation rules
* Task assignment settings
* Condition expressions
* Default sequence flow
* Branch naming
* Gateway direction (diverging/converging)
* Message format
* Target system
* Correlation keys
* Timeout handling
* Service implementation
* Input/output mapping
* Error handling
* Execution parameters
## Best practices
**When adding nodes to your process:**
* **Use descriptive names** for nodes to make the process easier to understand
* **Organize the layout** from left to right for better readability
* **Limit the number of sequence flows** from a single node to maintain clarity
* **Group related functionality** into subprocesses to reduce complexity
* **Document assumptions and decisions** in node descriptions
* **Validate your process** regularly during development to catch errors early
## Next steps
After adding nodes to your process, you can:
Configure business rules and actions for your nodes
# Adding an action to a node
Source: https://docs.flowx.ai/5.1/docs/flowx-designer/managing-a-project-flow/adding-an-action-to-a-node
Learn how to enhance your process flows by adding actions to nodes for business rules, data management, and integration with external systems.
Actions are powerful elements that bring your process nodes to life by adding business logic, data management capabilities, and integration with external systems. They define the specific activities that nodes perform within your process flow.

## What is a node action?
A node action defines the specific activity that a node performs within a process flow. Actions allow you to incorporate business rules, manage data, communicate with external systems, and control what gets displayed in the user interface. They are the building blocks that drive your process logic and user interactions.
Comprehensive documentation on all action types and their configurations
Learn how to implement business logic with rule actions
## Action types
FlowX.AI supports several types of actions that can be added to nodes, broadly categorized into business rules and user interactions:
### Business rules and data management
Add custom logic and decision-making using scripts
Persist process data to storage
Send messages to Kafka topics for event-driven scenarios
Handle file uploads within the process flow
### Process control and integration
Initiate a subprocess from within the current process
Pass data back to a parent process from a subprocess
Trigger an integration workflow with external systems
Launch a new project instance from within a process
### User interface
Send data to be displayed in front-end applications
Actions can only be added to certain node types:
* Task nodes (Service Tasks)
* User Task nodes
* Send Message/Receive Message Task nodes
## Adding an action to a node
1. Open **FlowX.AI Designer** and navigate to your project
2. Go to the **Processes** section within your project
3. Select your process definition from the list
4. Click the **Edit Process** button to open the Process Designer
1. Either select an existing node that supports actions, or add a new one
2. Remember that only Task nodes, User Task nodes, and Message Task nodes support actions
If you need to add a new node first, refer to the [Adding a New Node](../managing-a-process-flow/adding-a-new-node) documentation.
1. With the node selected, locate the **Actions** section in the properties panel
2. Click the **+ Add Action** button
3. From the dropdown menu, select the action type you want to add

Each action type requires specific configuration parameters:
1. Fill in the required fields for your selected action type
2. Configure optional parameters as needed
3. Save your changes

Pay careful attention to parameter syntax and formatting. Incorrect configurations may cause the action to fail during process execution.
If you have multiple actions on a single node:
1. Use the drag handles to arrange the actions in the desired execution order
2. Actions will execute from top to bottom in the list
3. Consider dependencies between actions when setting the order
For complex nodes with multiple actions, consider adding comments in scripts or descriptions to document the purpose and dependencies of each action.
Click the **Save** button to save your process definition with the new action.
## Common action configurations
Different action types require different configurations, but many share these common elements:
* **Name**: Descriptive identifier for the rule
* **Script Type**: JavaScript or other supported languages
* **Script Content**: The business logic to execute
* **Input Parameters**: Data inputs to the script
* **Output Parameters**: Data returned from the script
* **Process Variables**: The data to be saved
* **Target Storage**: Where the data should be persisted
* **Data Mapping**: How process data maps to storage fields
* **Topic**: The Kafka topic to send messages to
* **Key**: Identifier for the message
* **Value**: The data payload to send
* **Headers**: Additional message metadata
* **UI Component**: The target component to update
* **Data**: The information to display
* **Formatting**: Display options for the data
## Best practices
**When adding actions to nodes:**
* **Use meaningful action names** to clearly indicate their purpose
* **Keep business rules focused** on a single responsibility
* **Document complex logic** with comments in your scripts
* **Consider error handling** in your action configurations
* **Test actions individually** before relying on them in production flows
* **Monitor performance** of actions that might be resource-intensive
* **Use consistent data structure** across related actions for better maintainability
## Next steps
After adding actions to your nodes, you can:
Learn how to implement conditional branching in your processes using exclusive gateways
Design the user interface elements that will interact with your actions
# Adding parallel flow branches
Source: https://docs.flowx.ai/5.1/docs/flowx-designer/managing-a-project-flow/adding-more-flow-branches
Learn how to create concurrent process flows using parallel gateways to execute multiple activities simultaneously.
In many business processes, certain activities can or should be performed simultaneously rather than sequentially. FlowX.AI's parallel gateway nodes allow you to split your process flow into multiple concurrent branches, enabling parallel execution of different activities.

## What is a parallel gateway?
A parallel gateway (also known as an AND gateway) creates multiple concurrent paths in your process flow. Unlike exclusive gateways which follow only one path, parallel gateways activate all outgoing paths simultaneously. This allows multiple activities to be performed in parallel, improving process efficiency.
Complete reference for parallel gateway configuration
Learn more about how tokens drive process flow execution
## How parallel gateways work

Parallel gateways function as fork and join points in your process:
1. **Fork (Diverging Gateway)**: Splits the process flow into multiple concurrent paths
2. **Parallel Execution**: All branches execute simultaneously and independently
3. **Join (Converging Gateway)**: Merges the parallel branches back into a single flow
4. **Synchronization**: The process waits until all parallel branches complete before proceeding
A process must have both a diverging parallel gateway (fork) and a converging parallel gateway (join) that brings all branches back together. All branches must be completed before the process can continue past the converging gateway.
## Token behavior in parallel gateways
Tokens are fundamental to understanding how parallel flows work in FlowX.AI:

When a process reaches a parallel gateway, the gateway creates child tokens for each outgoing branch. Each branch receives its own token.
Each child token advances through its respective branch independently, proceeding from one node to the next based on the sequence and actions defined in the process.
A converging parallel gateway waits for all child tokens to arrive. The parent token remains at this gateway until all child tokens have completed their respective paths.
Once all child tokens have arrived at the converging gateway, they are merged back into the parent token, and the process continues with a single token.
If any parallel branch gets stuck or never completes, the entire process will wait indefinitely at the converging gateway. Always ensure all branches can complete successfully.
## Creating a flow with parallel branches
1. Open **FlowX.AI Designer** and navigate to your project
2. Go to the **Processes** section and select your process or create a new one
3. Click the **Edit Process** button to open the Process Designer
1. Add a **Start Node** to your process canvas (if creating a new process)
2. Add initial nodes for any process steps that should occur before the parallel branches
Plan your parallel branches carefully. Activities in parallel branches should be independent of each other and not rely on results from other branches.
1. From the node palette, drag a **Parallel Gateway** node onto your canvas
2. Connect your previous node to this gateway
3. Give your gateway a descriptive name (e.g., "Start Parallel Processing")
1. Add the nodes for each parallel branch that will execute simultaneously
2. Connect the diverging parallel gateway to the first node of each branch
3. Build out each branch with the necessary nodes and actions
You can have any number of parallel branches, but keep in mind that every branch must eventually connect to the converging gateway.
1. Add another **Parallel Gateway** node to the canvas
2. Connect the last node of each parallel branch to this converging gateway
3. Give this gateway a descriptive name (e.g., "Merge Parallel Branches")
Ensure that all parallel branches connect to the converging gateway. Missing connections will result in stuck processes.
1. Add any additional nodes that should execute after the parallel branches
2. Connect the converging gateway to the next node in your process
3. Ensure your process eventually reaches an **End Node**
4. Save your process definition
## Use cases for parallel gateways
Parallel gateways are ideal for the following scenarios:
Requesting multiple documents simultaneously from different systems or departments
Collecting approvals from multiple stakeholders at the same time
Performing multiple data operations or calculations in parallel
Running different validation or verification processes concurrently
## Best practices
**When implementing parallel branches:**
* **Use meaningful names** for parallel gateways to document their purpose
* **Keep branches independent** of each other to avoid deadlocks or race conditions
* **Balance work** across branches to optimize overall process execution time
* **Consider timeouts** for branches that might get stuck or take too long
* **Test all branches** thoroughly to ensure they can complete successfully
* **Use data scoping** carefully to prevent data conflicts between branches
* **Consider error handling** in each branch to prevent process deadlocks
## Common patterns
Basic pattern with a diverging and converging gateway
Nested parallel structures with gateways inside parallel branches
Parallel branches with timer events to handle potential delays
Parallel branches that gather different pieces of information for later consolidation
## Next steps
After implementing parallel branches in your process, you can:
Design the user interface elements that will interact with your actions
# Creating and managing process definitions
Source: https://docs.flowx.ai/5.1/docs/flowx-designer/managing-a-project-flow/creating-a-new-process-definition
Learn how to create new process definitions and manage them using operations like export, duplicate, copy between projects, and view dependencies.
## What is a process definition?
A process definition is the core building block of the FlowX.AI platform, serving as the blueprint for a business process. It's composed of nodes linked by sequences that define the path and logic of your application's workflow.
A complete process definition must include at least one [START](../../building-blocks/node/start-end-node#start-node) and one [END](../../building-blocks/node/start-end-node#end-node) node to mark where the process begins and concludes.
Process definitions can be instantiated, executed, and monitored within the platform
Houses all actions, decisions, user interfaces, and integrations for your business process
Nodes and sequences create a path for process tokens to follow based on conditions and events
Process definitions can generate interfaces for web, mobile, and other platforms
## Creating a process definition
1. Open **FlowX.AI Designer** and navigate to your project
2. Go to the **Processes** section within your project
You must have already created a project before creating process definitions. Process definitions belong to projects and inherit project settings.
1. Click the **+ New Process** button in the top-right corner
2. Enter a unique name for your process definition that clearly describes its purpose
3. Optionally, add a description to provide context about what this process does
4. Click **Create** to create the new process definition
Use a descriptive naming convention for your processes, such as "\[Department]-\[Function]-\[Action]" (e.g., "HR-Onboarding-Application").

After creating the process definition, you'll be automatically directed to the FlowX.AI Process Designer editor where you can start building your process flow.

Every process definition must have at least one START node and one END node:
1. From the node palette on the left, drag a **START** node onto the canvas
2. Configure the START node properties in the panel that appears
3. Drag an **END** node onto the canvas
4. Connect the nodes by clicking on the START node, selecting the arrow command, and then clicking on the END node
Without properly configured START and END nodes, your process won't be executable. The START node initializes the process, while the END node ensures proper process completion.
Expand your process by adding additional nodes between the START and END nodes:
1. Drag the appropriate node types from the palette onto the canvas
2. Configure each node's properties and actions
3. Connect nodes in the sequence they should execute
4. Add conditions and gateways to create branching logic
For business rules and automated actions
For user interactions and UI components
For decision points and parallel flows
Regularly save your work by clicking the **Save** button in the editor toolbar.
Process definitions are saved within your project but need to be included in a project version and build to be deployed to environments.
## Key node types
When building your process definition, you'll use various node types to model your business logic:
**Start Node**: Marks the beginning of a process flow, defining how a process instance is initiated.
**End Node**: Marks the conclusion of a process flow, ensuring proper cleanup and completion.
A process can have multiple START nodes (with different conditions) and multiple END nodes depending on the possible outcomes.
**Task Node**: Used for executing automated actions without user interaction.
**User Task Node**: Configures the UI components and collects data from users.
**Send/Receive Message Tasks**: Used for communication with external systems and services.
**Exclusive Gateway**: Creates decision points where the flow follows only one path based on conditions.
**Parallel Gateway**: Splits the process into multiple parallel branches that execute simultaneously.
**Inclusive Gateway**: Allows multiple paths to be taken based on conditions, unlike the exclusive gateway.
**Subprocess Run Node**: Enables you to run a subprocess within the main process.
**Timer Events**: Schedule actions to occur at specific times or after delays.
**Message Events**: Handle message-based communication between processes.
## Adding actions to nodes
Nodes can have actions associated with them to perform specific operations:
Execute logic, validate data, and make decisions
Save, retrieve, and manipulate process data
Connect with external systems and services
Send data to and receive data from users
Actions can only be added to certain node types: task nodes, user task nodes, and send/receive message tasks.
## Managing process definitions
After creating process definitions, you can manage them using the contextual menu available in the Processes list. Access this menu by clicking the three-dot icon (⋮) next to any process entry.

**Two contextual menus available:**
This menu is accessible from the **Processes list view** (before opening a process). There's also a separate contextual menu available when you're **inside** a process definition that provides operations like Clear Cache, Audit Log, View History, and Delete.
Learn about the contextual menu available while editing a process definition
### Configure process settings
Open the process settings interface to configure process-level options including permissions, platform selection, task management integration, and data search indexing.
**To configure a process**:
1. Click the three-dot menu (⋮) next to the process name
2. Select **Configure** from the menu
3. The settings panel opens, where you can modify:
* Process name and general settings
* Platform selection (Web, Mobile, Omnichannel)
* Permissions and swimlane access control
* Task management integration
* Data search and indexing
Complete guide to all process configuration options
### Export a process
Export a process definition to transfer it between environments, create backups, or share it with other teams.
**To export a process**:
1. Click the three-dot menu (⋮) next to the process name
2. Select **Export**
3. The system generates a downloadable package containing:
* Process definition JSON
* Process metadata and manifest files
* Version information
4. Save the export file to your local system
**Export structure**:
When you export a process, FlowX.AI creates a structured folder:
* Root export folder with unique identifier
* Process subfolder with `manifest.json` and `metadata.json`
* Version subfolder with the process definition JSON file
Use a clear naming convention for exported files such as `[ProcessName]_[Version]_[Date].zip` to help identify exports later.
Exported process definitions may contain environment-specific configurations. Review and adjust these settings when importing to a different environment.
Learn about importing exported processes
### Duplicate a process
Create a copy of an existing process definition within the same project. This is useful when you want to create a variant of a process or use an existing process as a template.
**To duplicate a process**:
1. Click the three-dot menu (⋮) next to the process name
2. Select **Duplicate**
3. Enter a name for the duplicated process
4. Click **Confirm** to create the copy
**What gets duplicated**:
* Complete process flow with all nodes and sequences
* All node configurations and actions
* UI Designer configurations
* Data model structure
* Process settings (permissions, platform selection, etc.)
**What doesn't get duplicated**:
* Process instances and runtime data
* Audit history
* Version history
Use duplication to create process variants for different departments or to test significant changes without affecting the original process.
The duplicated process is created in the current work-in-progress (WIP) version of your project. Remember to commit your changes when ready.
### Copy to another project or library
Transfer a process definition to a different project or library within your FlowX.AI environment. This enables sharing reusable processes across multiple projects.
**To copy a process to another project**:
1. Click the three-dot menu (⋮) next to the process name
2. Select **Copy to another project/library**
3. Choose the destination project or library from the list
4. Optionally adjust the process name for the destination
5. Click **Confirm** to complete the copy operation
**Use cases**:
* **Create reusable components**: Move common processes to a shared library
* **Share across teams**: Copy processes to other team projects
* **Promote to production projects**: Transfer tested processes to production-ready projects
* **Create process templates**: Build a library of standard process templates
Ensure all dependencies (subprocesses, data types, integrations) exist in the destination project, or copy them separately. Missing dependencies will cause errors.
Copying a process creates an independent copy. Changes to the original won't affect the copied version and vice versa.
### See used resources
View all resources and dependencies that the process definition uses. This helps you understand the process's connections to other components and identify potential impacts when making changes.
**To view used resources**:
1. Click the three-dot menu (⋮) next to the process name
2. Select **See used resources**
3. Review the list of dependencies, which may include:
* Subprocesses and workflows
* UI templates and components
* Data model types
* Integration connectors
* Business rules and scripts
* Document templates
* Notification templates
**Benefits**:
* **Impact analysis**: Understand what will be affected by changes
* **Dependency tracking**: Ensure all required resources are available before deployment
* **Documentation**: Map relationships between processes and resources
* **Troubleshooting**: Identify missing or misconfigured dependencies
Review used resources before exporting or copying a process to ensure you include all necessary dependencies in the target environment.
### View audit log
Access the comprehensive change history for the process definition, showing who made changes, when, and what was modified.
**To view the audit log**:
1. Click the three-dot menu (⋮) next to the process name
2. Select **Audit log**
3. Review the audit entries, which include:
* Timestamp of each change
* User who made the change
* Application version
* Event type and subject
* Change status
**Audit log features**:
* **Filterable entries**: Search and filter by date, user, or event type
* **Complete audit trail**: Maintain compliance with regulatory requirements
* **Change tracking**: Identify when specific modifications were introduced
* **Troubleshooting**: Trace issues back to specific changes
Learn more about audit logging capabilities
### View history
Access the version history of the process definition to see how it evolved across different committed versions.
**To view version history**:
1. Click the three-dot menu (⋮) next to the process name
2. Select **View history**
3. Review the list of versions
4. Select two versions to compare changes side-by-side
**History capabilities**:
* **Version comparison**: See exactly what changed between any two versions
* **Change tracking**: Identify when specific features were added or modified
* **Rollback reference**: Understand previous configurations if you need to revert changes
* **Documentation**: Track the evolution of your process over time
Version history shows committed versions only. Changes in the current work-in-progress version appear after you commit the project version.
Complete guide to version management
### Delete a process
Remove a process definition from your project when it's no longer needed.
**To delete a process**:
1. Click the three-dot menu (⋮) next to the process name
2. Select **Delete**
3. Confirm the deletion in the dialog that appears
**Use with extreme caution**: Deleting a process definition is a significant action with the following consequences:
* The process definition is removed from the current work-in-progress (WIP) version
* You cannot delete a process that's part of a committed version
* Other processes that reference this one as a subprocess may break
* The deletion can be recovered only from previous committed versions
**Before deleting a process**:
1. ✓ **Check for dependencies**: Use "See used resources" to identify processes that reference this one
2. ✓ **Review running instances**: Verify no critical process instances are currently active
3. ✓ **Backup if needed**: Export the process definition before deletion if you might need it later
4. ✓ **Update documentation**: Remove references to the deleted process from your documentation
**Impact of deletion**:
| Aspect | Impact |
| ----------------------- | ---------------------------------------------------------- |
| **Current WIP version** | Process is removed immediately |
| **Committed versions** | Previous versions remain unchanged |
| **Running instances** | Existing instances continue with their original definition |
| **Dependent processes** | May show errors or validation warnings |
| **Historical data** | Process instance data in reporting is not affected |
Deleted processes can be recovered by accessing previous committed versions through version history, but any uncommitted changes will be lost.
## Best practices
**Process Definition Design Tips**:
* Start with a simple skeleton process with START and END nodes before adding complexity
* Create a logical flow from left to right in your diagram for better readability
* Group related activities into subprocesses to keep the main process clean
* Use clear naming conventions for nodes and actions
* Document your process design decisions within node descriptions
* Test your process with simulated data before publishing
## Next steps
After creating your process definition, you can:
Learn how to add and configure different node types
Build interactive UIs for your process
Comprehensive guide to process configuration and settings
Transfer processes between environments
## Frequently Asked Questions
Yes, a process definition can have multiple START nodes, each with different starting conditions as long as they are on different swimlanes. This allows the same process to be initiated in different ways depending on the context.
Process definition cannot contain multiple start nodes on the same swimlane.
To modify an existing process, navigate to the Processes section in your project, find the process you want to edit, and click on it. Then click the "Edit Process" button to open it in the Process Designer.
Yes, you can create reusable components as subprocesses, which can then be called from multiple main processes. This promotes reusability and maintainability. You can also duplicate existing processes or copy them to other projects using the contextual menu operations described in the Managing process definitions section above.
Yes, FlowX.AI allows you to export and import process definitions. Use the **Export** option from the process contextual menu to create a downloadable package. The export includes the process definition JSON, metadata, and version information in a structured format. See the [Export a process](#export-a-process) section above for detailed instructions.
Use the **See used resources** option from the process contextual menu to view all dependencies including subprocesses, UI templates, data model types, integrations, and more. This helps with impact analysis before making changes and ensures all dependencies are available when exporting or deploying the process.
# Creating a new project
Source: https://docs.flowx.ai/5.1/docs/flowx-designer/managing-a-project-flow/creating-a-project
Learn how to create and configure a new project in FlowX.AI Designer
The first step in building applications with FlowX.AI is creating a project. Projects serve as organized workspaces containing all the resources needed for your business solutions, including process definitions, UI components, and integrations.

## What is a project?
A project in FlowX.AI is an organized workspace that groups all the resources required to implement a business solution. It's not just a collection of processes - it's a comprehensive container that manages the entire lifecycle of your application.
A project in FlowX.AI is an organized workspace that groups all the resources required to implement a business solution. It's not just a collection of processes - it's a comprehensive container that manages the entire lifecycle of your application.
Manage all resources, processes, and dependencies in one place, reducing context-switching
Track changes with robust versioning for processes, resources, and configurations
Deploy consistent builds across development, QA, and production environments
Ensure clarity with structured resources and reduce configuration errors
## Project lifecycle
In FlowX.AI, a project follows a well-defined lifecycle from creation to deployment:
Define basic project properties and settings
Add and configure all necessary components
Capture project state at significant milestones
Create immutable deployment package from a version
Release to development, QA, or production environments
This documentation covers the first two steps of creating and configuring a new project.
## Creating a project
Log in to FlowX.AI Designer and navigate to the **Projects** section from the main navigation.
You'll need appropriate permissions to create new projects. If you don't see the Projects section, contact your FlowX administrator.
Click the **+ New Project** button to open the project creation dialog.

Configure the basic properties for your project:
* **Project Name**: Enter a descriptive name that clearly identifies your business solution
* **Platform Type**: Select the platform you want to use for your project:
* Omnichannel
* Web only
* Mobile only
Set up additional parameters that define how your project will function:
* **Default Theme**: Choose a theme to apply a consistent look and feel
* **Number Formatting**:
* **Min/Max Decimals**: Configure how numbers are displayed
* **Date Format**: Choose short or long date formats
* **Currency Format**: Set display as ISO code (USD) or symbol (\$)
* **Languages**:
* Set a default language (e.g., English)
* Add additional languages for localization support
Project language settings serve two important purposes:
* They fill the default state for preview in the UI Designer
* They enable you to create translatable values in enumerations and substitution tags

## Configuring project resources
After creating your project, you'll need to configure various resources before you can build and deploy your application. These resources form the foundation of your solution.
Your project includes these key resource sections:
Define business processes and subprocesses that orchestrate your application workflows
Create application interfaces, components, and screen layouts for your processes
Configure enumerations, substitution tags, and media for consistent content delivery
Set up views, stages, and allocation rules for workflow orchestration
Connect to external systems with API endpoints and workflow configurations
Add libraries containing reusable resources shared across projects
Manage media files, fonts, themes, and other assets used across your application
Define environment-specific parameters for deployment flexibility
**Resource Inventory**: Your project can include the following components:
**Process Resources**:
* Process definitions with BPMN diagrams
* Action configurations and task settings
* Subprocess definitions and connections
**UI Resources**:
* Screen layouts and component configurations
* Form definitions and validation rules
* Navigation flows and interaction patterns
**Content Resources**:
* Enumerations for dropdown menus and selections
* Substitution tags for dynamic content
* Media assets (images, videos, documents)
**Integration Resources**:
* API endpoint configurations
* Data mappings and transformations
* Workflow definitions for system interactions
**Supporting Resources**:
* Themes and styling assets
* Configuration parameters for environments
* Library dependencies for shared functionality
**Configuration Best Practices**:
* Begin with process definitions before configuring supporting resources
* Use clear, consistent naming conventions across all resources
* Configure reusable components in libraries when they'll be used in multiple projects
* Test individual components before integrating them into the complete workflow
* Set up environment variables for settings that differ between environments
* Create versions after completing significant resource configurations
Process definitions are the core of your application, defining the user journey and business logic:
* Navigate to the **Processes** section
* Click **+ New Process** to create a new process
* Use the BPMN editor to design your process flow
* Configure actions, forms, and integration points
Create the screens and components users will interact with:
* Navigate to the **UI Designer** section
* Create screens for each user-facing step in your processes
* Configure forms, buttons, and other interactive elements
* Design responsive layouts for different device types
Set up connections to external systems and services:
* Define API endpoints for backend integrations
* Configure authentication and security settings
* Create workflows for complex integration scenarios
* Test connections to ensure proper data exchange
Define environment-specific variables:
* Add parameters that will differ between environments
* Set default values for development
* Mask sensitive information like passwords and API keys
* Organize parameters by functional area

## Project lifecycle management
After configuring your project resources, you'll need to prepare it for deployment through versioning and building:
When your project configuration reaches a milestone:
* Create a version to capture the current state
* You can create multiple versions and commit them before creating a build
* Versions can be modified until they are committed
* Committed versions are locked and cannot be changed
To deploy your project to an environment:
* Create a build from any committed version
* Builds are immutable and serve as deployable packages
* Each build contains exactly one version of a project
* Once a build is created, its contents (processes, enumerations, substitution tags, integrations) cannot be edited - you'll need to create a new project version for changes
Deploy your build to the target environment:
* Development for testing
* QA for validation
* Production for end-users
Configuration parameters set for specific environments will be applied during deployment.
## Best practices
Projects contain all your process definitions and resources. Use clear naming conventions and proper documentation to maintain organization as your project grows.
* **Project Naming**: Use clear, descriptive names that reflect business purpose
* **Project Scope**: Keep projects focused on specific business domains
* **Documentation**: Add comprehensive descriptions to your project and components
* **Version Control**: Make effective use of the built-in versioning capabilities
* **Configuration Management**: Use environment variables for deployment-specific settings
* **Dependency Management**: Carefully manage library dependencies to avoid conflicts
* **Testing**: Validate changes in development before promoting to production
## Next steps
After creating your project, you can proceed to:
Define your first business process within the project
## Frequently asked questions
To create a new version, navigate to the project dashboard, select "Create New Version," and make any changes. Once finalized, commit the version to lock it.
Creating a build captures a snapshot of the project version, consolidating resources into a single deployable package. Builds are immutable and cannot be edited once created.
Yes, projects support multiple locales. You can define regional settings, such as date formats and currencies, to cater to different environments.
A Project Version is a snapshot of resources and configurations that can be modified, tracked, and rolled back. A Build is a deployable package created from a committed version, and it is immutable once deployed.
Go to your project settings, navigate to dependencies, and select the desired library. Choose the build you want to use, and its resources will be accessible within your project.
No, a build is immutable. To make changes, modify the project version, create a new version, and deploy a new build.
Use a controlled environment like Dev or UAT to test new builds of the library before updating the dependency in your main project. This allows you to validate changes and ensure they don't negatively impact your project.
When a dependency is updated to a newer build, any resources that were modified in the library will reflect the latest version. Projects have control over when to update, so older versions remain stable until the dependency is manually updated.
# Creating a User interface
Source: https://docs.flowx.ai/5.1/docs/flowx-designer/managing-a-project-flow/creating-a-user-interface
Learn how to design and configure engaging user interfaces for your process flows using FlowX.AI Designer.
FlowX.AI allows you to create rich, interactive user interfaces for your process flows without extensive coding. Using the UI Designer, you can configure screens with various components and navigation patterns to create intuitive user experiences.

## Understanding UI design in FlowX.AI
In FlowX.AI, user interfaces are primarily associated with **User Task** nodes in your process flow. Each User Task can represent a screen or part of a screen in your application. The UI Designer provides a visual editor where you can add, arrange, and configure UI components to create your desired interface.
Comprehensive guide to the UI Designer and available components
Learn more about different navigation patterns and structures
## Creating a process with user interfaces
1. Open **FlowX.AI Designer** and navigate to your project
2. Go to the **Processes** section and click **+ New Process**
3. Give your process a descriptive name and click **Create**
Plan your user interface flow before starting. Consider how many screens you need and how users will navigate between them.
1. Add a **Start Node** to your process canvas
2. Add **User Task** nodes for each screen in your application
3. Connect the nodes in the sequence users will navigate through them
4. Add an **End Node** to complete your process

Each User Task node represents a screen or a significant UI interaction in your application. Design your process flow to match your intended user journey.
1. With your process open in edit mode, click the **Navigation** tab
2. Click the **+ Add** button to create a new navigation area
3. Select **Page** as the navigation type (or another type based on your needs)
4. Name your navigation area (e.g., "Main Application Page")
5. Assign the relevant User Task nodes to this navigation area

**Available Navigation Area Types:**
* **Stepper**: Breaks progress into logical, numbered steps for intuitive navigation
* **Tab Bar**: Allows users to switch between different sections or views
* **Page**: Displays full-page content for an immersive experience
* **Modal**: Overlays that require user interaction before returning to the main interface
* **Zone**: Groups specific navigation areas or tasks, like headers and footers
* **Parent Process Area**: Supports subprocess design under a parent hierarchy
## Configuring the UI
All visual properties of UI elements and navigation areas are configured using the FlowX.AI UI Designer, which provides a visual editor for building your interfaces.


### Selecting navigation type
To begin, you need to define the type of navigation for your application:
1. In the UI Designer, go to the navigation configuration section
2. Select one of the following navigation types:
* **Single page form**: For simple, one-page applications
* **Wizard**: For multi-step processes with clear progression

For this example, we'll use the **Wizard** type, which is ideal for multi-step processes like applications or onboarding flows.
## Designing the first screen
Let's configure the first User Task node to create an engaging and functional screen:
1. In your process diagram, select the first **User Task** node
2. Click the **UI Designer** button in the properties panel
3. This will open the visual UI Designer for this specific node
1. From the component palette, drag a **Card** component onto the canvas
2. The Card component will serve as a container for your form elements
3. Configure the card's appearance using the properties panel (size, padding, etc.)
1. Drag a **Form** component into the Card
2. Forms help organize inputs and handle data binding
3. Configure the form's properties as needed
1. Drag an **Input** component into the Form
2. Configure the input's properties:
* Set a label (e.g., "Full Name")
* Choose the input type (text, number, email, etc.)
* Configure validation rules if needed
* Set the data binding to store user input

1. Drag a **Button** component into the Form
2. Configure the button text (e.g., "Continue" or "Next")
3. Set up the button's action to trigger process advancement
Before the button will work, you need to configure an action on the User Task node itself. This action will be triggered when the button is clicked.

### Testing the first screen
1. Save your UI design
2. Start the process to test the UI
3. The Card with the Form and Input field should be displayed as configured

## Designing the second screen
Follow a similar process to design your second screen:
1. Select the second **User Task** node in your process
2. Open the **UI Designer**
3. Add a **Card** component
4. Add other UI components as needed (text, inputs, buttons, etc.)

1. Add a button to submit the form or continue to the next step
2. Configure actions on the User Task node as needed
3. Consider adding a "Back" button if appropriate for your flow
## Testing the complete flow
Once you've configured all your screens, test the complete process flow:

## Available UI components
FlowX.AI provides a rich set of UI components to create engaging interfaces:
Cards, containers and grids for organizing content
Inputs, checkboxes, radio buttons, selects, switches, sliders, segmented buttons and date pickers
Buttons, links, tabs, and accordions for user interaction
Text, images, icons, and media elements for displaying information
Tables for showing structured data
Steppers, and pagination controls
Other components for building complex interfaces
## Best practices
**When designing user interfaces:**
* **Use consistent styling** across all screens for a cohesive user experience
* **Group related inputs** within logical sections or cards
* **Implement proper validation** to prevent errors and guide users
* **Provide clear feedback** on actions with success and error messages
* **Design with accessibility** in mind using proper labels and ARIA attributes
* **Test your UI** on different screen sizes to ensure responsive design
* **Keep navigation intuitive** with clear paths forward and back
* **Use data binding** to maintain state across screens
## Next steps
After creating your user interface, you can:
Learn how to move a token backwards in the flow
# Exporting and importing projects
Source: https://docs.flowx.ai/5.1/docs/flowx-designer/managing-a-project-flow/export-import-a-process-definition
Learn how to transfer projects between environments using the export and import functionality in FlowX.AI Designer.
Moving projects between environments is a common requirement in enterprise software development. FlowX.AI provides robust export and import functionality to help you promote your projects from development to testing and production environments.
In recent versions of FlowX.AI, the export/import functionality has moved from the process definition level to the project level, allowing for more comprehensive and consistent transfers between environments.
## Project vs. process export/import
Modern versions of FlowX.AI use **project-level** export and import operations rather than process-level ones. This approach ensures that all related resources, dependencies, and configurations are transferred together, maintaining the integrity of your application.
This documentation covers the updated project export/import approach. If you're using an older version of FlowX.AI that still handles exports at the process definition level, some details may differ.
## Exporting a project
1. Open **FlowX.AI Designer** and go to the **Projects** section
2. Select the project you want to export
1. Open the project actions menu (typically a three-dot or "More" icon)
2. Select the **Export** option

The screenshot above shows the legacy process export UI. The project export interface may look different but follows similar principles.
Depending on your version, you may have options to:
1. Export the entire project or specific versions
2. Include or exclude certain resources
3. Select dependency handling options
1. Click the **Export** button to generate the export package
2. The system will create a downloadable file containing your project
3. Save this file to your local system
Use a clear naming convention for your export files to help identify their contents later, such as `[project-name]_[version]_[environment]_[date].zip`.
## Importing a project
1. Open **FlowX.AI Designer** in the target environment
2. Go to the **Projects** section
1. Look for an **Import Project** or similar button
2. Click this button to start the import process

1. The system will open a file browser dialog
2. Navigate to and select your previously exported file
3. Click **Open** or **Select** to proceed
Before completing the import, the system will display information about what's being imported:
1. Project details and versions
2. Potential conflicts with existing content
3. Dependency status
Pay careful attention to any warnings about version conflicts or missing dependencies, as these might require manual resolution.
1. Review all information carefully
2. Make any necessary adjustments to import options
3. Click **Import** or **Confirm** to complete the process

## Import scenarios
When importing a project, you may encounter different scenarios depending on whether the project already exists in the target environment and what versions are present.
### New project import
If the project does not exist in the target environment, it will be created with all its resources, and you'll see all versions from the export file.

### Existing project with no additional versions
If the project exists but doesn't have versions beyond those in the import file, the system will update the existing project with any changes from the import file.

### Existing project with additional versions
If the target environment has versions not present in the import file, or if versions have diverged, you'll need to resolve these conflicts during import.

Be cautious when overwriting versions, as this can impact any running processes or deployed applications that use those versions.
## Best practices for export/import
**When transferring projects between environments:**
* **Plan your promotion path** - Establish a clear workflow for moving from development to testing to production
* **Use consistent naming** - Name your projects, versions, and export files consistently across environments
* **Document dependencies** - Keep track of dependencies between projects and libraries
* **Test after import** - Always validate your project in the new environment after import
* **Version control** - Consider using external version control systems in addition to FlowX.AI's built-in versioning
* **Incremental imports** - For large projects, consider importing incrementally rather than all at once
* **Backup before import** - Always back up the target environment before performing significant imports
## Common issues and solutions
**Issue**: Import fails due to version incompatibility between environments.
**Solution**: Ensure all environments are running compatible versions of FlowX.AI. If necessary, upgrade the older environment before attempting import.
**Issue**: Imported project references libraries or resources not present in the target environment.
**Solution**: Export and import dependencies first, or update the project to use dependencies available in the target environment.
**Issue**: Conflicts between imported versions and existing versions.
**Solution**: Carefully review the differences and decide whether to overwrite or preserve existing versions. Consider merging changes manually for complex conflicts.
**Issue**: Hard-coded environment-specific values in processes or configurations.
**Solution**: Use environment variables and configuration parameters instead of hard-coded values to ease transitions between environments.
## Next steps
After importing your project, you should:
Ensure all process definitions, UI components, and other resources imported correctly
Adjust any environment-specific settings for the new environment
Validate that all process flows work as expected in the new environment
Create a build from your imported project for deployment
# Handling decisions in the flow
Source: https://docs.flowx.ai/5.1/docs/flowx-designer/managing-a-project-flow/handling-decisions-in-the-flow
Learn how to implement conditional branching in your processes using exclusive gateways to create dynamic, decision-driven workflows.
Business processes often require making decisions based on data and conditions. FlowX.AI's exclusive gateway nodes allow you to create branching paths in your process flow, directing the execution based on specific conditions and business rules.

## What is an exclusive gateway?
An exclusive gateway (also known as an XOR gateway) creates conditional branches in your process flow. It directs the process token to exactly one of the outgoing paths based on evaluated conditions. Think of it as an "if-then-else" decision point in your process.
Complete reference for exclusive gateway configuration
Learn more about implementing decision logic
## How exclusive gateways work

Exclusive gateways function as decision points in your process:
1. When the process flow reaches an exclusive gateway, it evaluates conditions associated with each outgoing path
2. The first condition that evaluates to `true` determines which path is taken
3. Only one path is followed, even if multiple conditions could evaluate to `true`
4. A default path can be specified to be taken if no conditions are met
Best practice is to always provide a default path to ensure your process doesn't get stuck if none of the specified conditions are met.
## Creating a flow with exclusive branches
1. Open **FlowX.AI Designer** and navigate to your project
2. Go to the **Processes** section and select your process or create a new one
3. Click the **Edit Process** button to open the Process Designer
1. Add a **Start Node** to your process canvas (if creating a new process)
2. Add a node before your decision point (typically a task or user task node)
3. Ensure the necessary data for your decision is available in the process at this point
The decision conditions will evaluate data that's already in your process context, so make sure any required data is collected or calculated before reaching the gateway.
1. From the node palette, drag an **Exclusive Gateway** node onto your canvas
2. Connect your previous node to this gateway
3. Give your gateway a descriptive name that indicates its decision purpose (e.g., "Evaluate Credit Score")
You must connect all outgoing paths from the exclusive gateway before configuring the decision conditions.
1. Add the task nodes that will be the targets for each decision branch
2. Connect the exclusive gateway to each of these nodes using sequence flows
3. Name each sequence flow to indicate the condition (e.g., "Premium Card Path", "Standard Card Path")

1. Select one of the sequence flows (arrows) from the gateway
2. In the properties panel, navigate to the **Condition** section
3. Select a **scripting language** from the dropdown (e.g., MVEL, JavaScript)
4. Enter your condition expression, for example:
```javascript theme={"system"}
input.get("application.client.creditScore") >= 700
```
5. Repeat for each outgoing path with the appropriate condition:
```javascript theme={"system"}
input.get("application.client.creditScore") < 700
```
Conditions are evaluated in the order they appear in the Designer. The first condition that evaluates to `true` determines the path taken, so order matters!
If your branches need to converge back to a single flow:
1. Add another **Exclusive Gateway** after your branch tasks
2. Connect each branch endpoint to this converging gateway
3. Continue the process flow from this gateway
A converging exclusive gateway doesn't require conditions since it's merely joining paths rather than splitting them.
1. Add any additional nodes needed after the decision branches
2. Ensure your process eventually reaches an **End Node**
3. Save your process definition
## Condition expression examples
Here are some example condition expressions for different decision scenarios:
```javascript theme={"system"}
// Check if age is over 18
input.get("customer.age") >= 18
// Check if balance is sufficient
input.get("account.balance") > input.get("transaction.amount")
// Check if score is within a range
input.get("application.score") >= 600 && input.get("application.score") < 750
```
```javascript theme={"system"}
// Check customer type
input.get("customer.type") == "premium"
// Check if country is in EU
["DE", "FR", "IT", "ES"].contains(input.get("customer.country"))
// Check if name starts with specific letters
input.get("customer.lastName").startsWith("A")
```
```javascript theme={"system"}
// Check multiple conditions with AND
input.get("customer.verified") == true && input.get("customer.active") == true
// Check multiple conditions with OR
input.get("application.status") == "pending" || input.get("application.status") == "review"
// Complex condition with nested logic
(input.get("customer.age") >= 21 || (input.get("customer.age") >= 18 && input.get("customer.parentalConsent") == true)) && input.get("customer.verified") == true
```
```javascript theme={"system"}
// Check if membership is expired
new java.text.SimpleDateFormat("yyyy-MM-dd").parse(input.get("membership.expiryDate")).before(new java.util.Date())
// Check if account is older than 1 year
dateDiffInDays(new java.text.SimpleDateFormat("yyyy-MM-dd").parse(input.get("account.openDate")), new java.util.Date()) > 365
```
## Best practices
**When implementing decision logic:**
* **Use clear, descriptive names** for gateways and sequence flows to document the decision logic
* **Keep conditions simple and focused** on a single aspect of the decision
* **Ensure conditions are mutually exclusive** when possible to avoid ambiguity
* **Always provide a default path** to handle unexpected scenarios
* **Test each decision branch** with various input data to verify correct routing
* **Document complex decision logic** in the process documentation or node descriptions
* **Consider using business rule actions** before the gateway for complex evaluations
## Common patterns
The simplest decision pattern with two outcomes - a condition is either met or not met
Multiple conditions evaluated in sequence, with one path chosen based on the first match
Branching based on approval status, typically with approve/reject/review paths
Evaluation of multiple criteria to determine if a process can proceed
## Next steps
After implementing decision logic in your process, you can:
Learn how to create parallel process branches with parallel gateways
# Moving a token backwards in a process
Source: https://docs.flowx.ai/5.1/docs/flowx-designer/managing-a-project-flow/moving-a-token-backwards-in-a-process
Learn how to implement "Back" functionality in your processes to allow users to return to previous steps while preserving data.
While most process flows progress in a forward direction, FlowX.AI provides powerful capabilities for moving backwards in a process flow. This feature allows users to revisit previous steps without losing their progress or data, enhancing the flexibility and user-friendliness of your applications.

## What is token resetting?
In FlowX.AI, a **token** represents the current position within a process instance. It moves from one node to another as the process executes, carrying process data and state information. Normally, tokens advance forward through the process flow, but sometimes you need to allow users to go back to previous steps.
Learn more about tokens and how they drive process flow
Understand how processes execute in FlowX.AI
## Why use backwards navigation?
Allows users to correct mistakes or review previous inputs without starting over
Creates more natural and less rigid process flows that adapt to user needs
Maintains important data while allowing selective changes to specific fields
Decreases process abandonment rates by allowing users to navigate freely
## How token resetting works
When a user navigates backwards in a process:
1. The current token is marked as **aborted**
2. A **new token** is created at the target node (the previous step)
3. Data is selectively copied from the original token to the new one
4. Any subprocesses started between the original and new positions are aborted
5. The process continues from the reset position with the new token
The token can only be reset to specific actions on specific nodes that have been configured to allow backwards navigation.
## Configuring backwards navigation
First, determine which nodes in your process should allow users to navigate back to them. Typically, these are:
* Key decision points
* Form submission steps
* Points where users might need to correct previous inputs
* The beginning of logical sections in your process
1. Select the node that should be a target for backwards navigation
2. Add or edit an action on this node
3. In the action configuration, enable the **Allow BACK on this action?** option

Only configure "back" functionality on actions that make logical sense as return points in your process. Too many back points can make process state management complex.
When a token is reset, you need to decide which data to retain and which to discard. Configure this using:
1. **Remove the following objects from current state**: Specify process keys that should be deleted when navigating back to this action
2. **Copy the following objects from current state**: Specify process keys that should retain their data from before the navigation
Carefully consider which data to preserve. Generally, you want to keep contextual or reference data while allowing changes to the specific data related to the step being revisited.
Add navigation controls in your user interface:
1. Add a "Back" button to relevant screens
2. Configure the button to trigger the action with back functionality
3. Ensure the UI updates appropriately when the user navigates back

## Use cases for backwards navigation
In applications with multi-step forms or wizards, backwards navigation allows users to review and edit their inputs across different steps before final submission.
When users make selections that lead down specific process paths, back functionality lets them change their mind and explore alternative options.
If validation occurs after a form submission and errors are found, users can navigate back to fix issues while preserving other valid inputs.
In complex workflows like loan applications or onboarding processes, users often need to review previous sections before completing the process.
## Best practices
**When implementing backwards navigation:**
* **Be selective** about which nodes allow back functionality
* **Consider data dependencies** between steps to avoid inconsistent states
* **Provide clear UI indicators** for steps users can navigate back to
* **Test thoroughly** to ensure data is properly preserved or reset
* **Consider subprocess implications** as they will be aborted during reset
* **Document back navigation points** for easier maintenance
* **Use intuitive button labeling** ("Back", "Previous Step", etc.)
## Technical considerations
**Keep in mind these technical aspects when implementing back functionality:**
1. **Performance Impact**: Token resetting involves creating new tokens and copying data, which may impact performance in complex processes
2. **Subprocess Handling**: Any subprocesses active between the current and target positions will be aborted
3. **Data Consistency**: Ensure your data model can handle partial updates without creating inconsistencies
4. **Action Sequencing**: Consider the order of actions that might be re-executed after navigating back
# Initiating/starting processes
Source: https://docs.flowx.ai/5.1/docs/flowx-designer/managing-a-project-flow/starting-a-process
Learn the different methods for starting process instances in FlowX.AI, including user interaction, automated triggers, and system integration options.
Once you've designed your process definitions, you'll need to know how to start process instances. FlowX.AI provides multiple ways to initiate processes, from manual user-triggered starts to fully automated system-initiated flows.
The most common way to start processes through user interaction
Start processes through Kafka events from other systems
Schedule processes to start automatically at specific times
Trigger processes through message events from other processes
## Starting a process via user interface
Manual Start using start parameters (JSON data) are limited to 1MB
When starting a process manually via the **FlowX Designer UI**, you’ll be prompted to enter a JSON payload (in the "JSON Object" editor). This is subject to the same infrastructure limits as any other process start.
* Payloads must be **under 1MB** total
* If exceeded, the request will fail with:
```http theme={"system"}
413 Content Too Large
```

### Affected layers
| Layer | Limit | Notes |
| ---------------------- | --------------------------------------- | ----------------------------------- |
| NGINX/Ingress | 1MB (default if not configured) | `client_max_body_size` |
| Kafka → Runtime bridge | \~1MB total (default if not configured) | Applies when starting via Kafka too |
### Tips
For larger inputs, consider (as last resort, not recommended) increasing the limits for the affected layers.
## Starting a process via Kafka
One of the most powerful ways to initiate processes is through Kafka messaging, which allows systems to communicate and trigger processes without direct user interaction.
1. Open **FlowX.AI Designer** and navigate to your project
2. Select an existing process definition or create a new one that will send the Kafka message
1. Add a **Send Message Task** node to your process flow
2. Attach a **Kafka Send Action** to this node
This task will send the message that initiates another process. You can place it at any appropriate point in your process flow.
1. In the Kafka Send Action configuration, specify the topic linked to the `KAFKA_TOPIC_PROCESS_START_BY_NAME` environment variable
2. This variable is shared between the **application-manager** and **runtime-manager** deployments

To verify the topic in FlowX Designer, navigate to: **Platform status → FlowX Components → application-manager-mngt -> kafkaTopicHealthCheckIndicator → details → configuration → topic → process → start-by-name**

Add any required data in the message body that should be passed to the new process:
```json theme={"system"}
{"test": "something"}
```
This data will be available to the process being started, providing it with initial context or parameters.
All Kafka-triggered process starts go through the runtime HTTP API, which enforces strict 1MB payload limits.
#### What does this mean?
* The `variables` field in the Kafka message **must not exceed 1MB**
* This includes base64 or pretty-printed formats
#### Why?
These limits are enforced across:
| Layer | Limit | Description |
| -------------------------- | ----------- | -------------------------------------- |
| NGINX/Ingress | 1MB | `client_max_body_size` |
| Runtime Manager (Undertow) | 1MB | `max-http-post-size` |
| Kafka Process Start | \~1MB total | Translates into a REST call internally |
#### Recommendations:
* If absolutely required, increase `max-http-post-size` via:
```yaml theme={"system"}
server:
undertow:
max-http-post-size: 2MB
```
1. Expand the **Advanced Configuration** section
2. In the headers section, add these required headers:
* `Fx-ProcessName`: The name of the process you want to start
* `Fx-AppId`: The ID of the project (application) where the process resides
* `jwt`: Your JWT token for authentication

The headers should look something like this:
```json theme={"system"}
{
"Fx-ProcessName": "test_kafka",
"Fx-AppId": "afcc6452-f50e-4d95-ae3b-6b35caed68bd",
"jwt": "your_jwt"
}
```
**Don't know where to find these values?** Check the [Finding Identifiers and Parameters](../../platform-deep-dive/integrations/finding-identifiers-and-parameters) guide for step-by-step instructions on locating Application IDs, Process Names, JWT tokens, and more.
Without an active policy and proper authentication, the process may not start even if the Kafka message is correctly configured.
1. Run your process to send the Kafka message
2. To monitor the results, you can use tools like AKHQ to check the response on the `KAFKA_TOPIC_PROCESS_START_BY_NAME_OUT` topic

## Timer start event
Timer Start Events allow you to schedule processes to start automatically at defined times or intervals, enabling automated workflows without manual intervention.
1. Open **FlowX.AI Designer** and navigate to your project
2. Select an existing process definition or create a new one
3. Add a **Start Timer Event** to your process instead of a regular Start node

Configure the timer according to your requirements:
1. **Date Specific**: Set a specific date and time for the process to start
2. **Cycle**: Configure a recurring schedule using cron expressions
Starting processes through registered timers requires sending a process start message to Kafka, which needs a service account and authentication. See [Service Accounts](../../../setup-guides/access-management/configuring-an-iam-solution#scheduler-service-account) for details.
For more detailed information about Timer Start Events, refer to the [Start Timer Event](../../building-blocks/node/timer-events/timer-start-event) documentation.
## Message catch start event
Message Catch Start Events allow one process to initiate another through message-based communication, creating dependencies and workflows between processes.
1. Open **FlowX.AI Designer** and create or edit the process that will send the message
2. Add a **Message Throw Intermediate Event** node at the point where you want to trigger the other process
3. Configure data that will be used for correlation (e.g., a key value like 'key1')

4. Configure the message correlation in the node properties:

1. Create or edit the process that should be started by the message
2. Add a **Start Message Catch Event** node as the starting point
3. Configure the node with:
* The same message name used in the throw event (e.g., 'start\_correlation')
* The correlation key in the Receive data tab (e.g., 'key1')
Run the sender process and watch as it automatically triggers the receiver process when the Message Throw Event is reached.

Message correlation is essential for message-based communication between processes. It's achieved through the message name (which must be identical in both throw and catch events) and the correlation key (or value).
## Best Practices
**When implementing process initiation:**
* **Choose the appropriate method** based on your use case (user-triggered, scheduled, event-based, etc.)
* **Consider authentication requirements** for system-initiated processes
* **Use correlation keys thoughtfully** to ensure reliable message delivery
* **Test your initiation methods** thoroughly in a development environment
* **Monitor process starts** to identify any failures or performance issues
* **Document your initiation methods** for easier maintenance and troubleshooting
## Next Steps
After setting up your process initiation methods, you can:
Define the data structure for your process instances
Create user interfaces for human-interactive processes
Add decision logic to your processes
Connect your processes to external systems
# FlowX.AI Designer
Source: https://docs.flowx.ai/5.1/docs/flowx-designer/overview
The FlowX.AI Designer is a collaborative, no-code, web-based application development environment, designed to facilitate the creation of web and mobile applications without the need for coding expertise.
# Overview
The **FlowX.AI Designer** is a powerful, collaborative platform that empowers you to create sophisticated web and mobile applications without coding expertise. Let's explore the key capabilities available in the Designer:

Workspaces provide isolated environments for organizing projects and controlling access:
* Create dedicated spaces for different teams or departments
* Manage user access and permissions at workspace level
* Organize projects by business unit or use case
* Maintain separation between development contexts
* Control visibility and collaboration boundaries

Projects serve as comprehensive workspaces that group all resources, dependencies, and configurations needed for specific use cases. They provide:
* Centralized resource management
* Version control capabilities
* Build deployment across environments
* Collaborative editing workflows
* Modular organization of processes and assets

The process designer allows you to:
* Create and edit processes using BPMN 2.0 standards
* Configure nodes with business rules and actions
* Set up user tasks and system integrations
* Establish decision logic and execution paths
* Test and debug process flows

Create intuitive user interfaces and manage content with:
* Drag-and-drop UI component assembly
* Advanced navigator with layer management
* Theme customization capabilities
* Media library organization
* Font and styling controls

Extend functionality with plugins and integrations:
* Task management capabilities
* Document generation and templates
* Notification system configuration
* Integration mapping and monitoring
* API connection management
## Key features & capabilities
Organize projects into isolated workspaces with dedicated access control, enabling team separation and structured collaboration across departments.
Create and manage comprehensive workspaces with centralized resources, version control, and modular components that enable efficient collaboration.
Design, debug, and monitor processes using BPMN 2.0 standards with powerful tracking and performance analytics.
Manage enumerations, substitution tags, languages, media, fonts, and themes with comprehensive organization tools.
Create intuitive interfaces with an advanced navigator, component library, and flexible styling options.
Extend functionality with task management, notification, and document generation plugins for comprehensive solutions.
Configure and monitor integrations between the FlowX Engine, plugins, and external systems with visual mapping tools.
Track system health, component versions, and performance metrics with comprehensive monitoring tools.
Accelerate development with AI-powered suggestions, optimization recommendations, and contextual help.
Depending on your access rights, some features and tabs might not be visible. For more information, check [Configuring access rights for Admin](../../setup-guides/access-management/configuring-access-rights-for-admin) section.
## Detailed component overview

Workspaces are the top-level organizational unit in FlowX.AI Designer, providing isolated environments where teams can collaborate on projects with controlled access and visibility.
### Key Capabilities
Create dedicated workspaces for different teams, departments, or business units. Each workspace acts as an independent container with its own projects and resources.
Configure workspace-level permissions to control who can view, edit, or manage projects within each workspace. Administrators can assign users and groups specific roles.
Group related projects together within a workspace for better organization and discoverability. Projects inherit workspace-level settings and permissions.
Enable focused collaboration by bringing together stakeholders who need to work on related projects, while maintaining separation from other teams.
### Benefits
* **Isolation**: Keep different teams' work separate and secure
* **Flexibility**: Organize workspaces by department, product line, or any business structure
* **Security**: Control access at the workspace level for enhanced governance
* **Clarity**: Reduce clutter by showing users only relevant workspaces and projects
Learn more about configuring workspace access rights
A project groups resources that represent a project's entire lifecycle. It's not just a collection of processes; it's an organized workspace containing all dependencies required for that project. It enables:
* Centralized resource management
* Version control with history tracking
* Build deployment across environments
* Collaborative workflows with simultaneous editing
* Modular organization of processes and assets

A library is a specialized project type designed to store and share reusable resources across multiple projects:
* Share processes, enumerations, and media assets
* Enable centralized resource management
* Provide version-controlled dependency management
* Support modular development approaches
* Include comprehensive dependency tracking
* Offer robust import/export functionality
A **process definition** is uniquely identified by its name and version number. The process designer provides:
* [Process definition](../building-blocks/process/process-definition) management
* Versioning history with comparison capabilities
* Debugging tools for process execution
* Version comparison for change identification
* BPMN 2.0 standard compliance

The complete list of active **process instances** is visible from the FlowX.AI Designer. Monitor and manage running process instances with:
* Filtering by process definition names
* Search by unique process ID
* View current process status and data
* [Token](../building-blocks/token) instance and content inspection
* [Subprocess](../building-blocks/process/subprocess) management
* Real-time monitoring with performance metrics
* Advanced filtering for process management

Data & Localization
Manage static value definitions that can be used in UI components or templates with bulk import/export capabilities.
Generate dynamic content across the platform with context-aware tag suggestions for localization.
Configure language-specific enumeration values with comprehensive character set support.
Connect to multiple data sources for [enumeration values](../platform-deep-dive/core-extensions/content-management/enumerations) with third-party system integration.
Media & Styling
Centrally manage various media files with metadata tagging and optimization capabilities.
Upload and manage font files including variable fonts with subset creation for performance.
Personalize application appearance with atomic design principles and multi-device previewing.

You need to deploy the CMS service in your infrastructure before you can start defining and using custom content types.

Track and assign activities with prioritization, history tracking, and performance analytics. The Task Manager provides a business-oriented view of processes with assignment-level interactions.

Create, edit, and activate/deactivate notification templates for multiple channels (SMS, email, push notifications) with scheduling, monitoring, and personalization capabilities.

Generate documents based on custom templates with process data, convert between formats, split documents, add barcodes/signatures, and manage version control with conditional template variables.

Manage environment-specific settings with:
* Key-value parameter definition
* Environment-specific value configuration
* Parameter grouping and categorization
* Environment comparison tools
* Import/export capabilities
The maximum length of a parameter input value is 255 characters.

Administrate users, roles and groups through:
* Integration with Keycloak/[RH-SSO](https://access.redhat.com/products/red-hat-single-sign-on)
* Role-based access control
* Granular permission management
* User onboarding templates
* Group organization

Configure and monitor connections between:
* [FlowX Process engine](../platform-deep-dive/core-components/flowx-engine)
* [Platform plugins](../platform-deep-dive/plugins/custom-plugins/)
* External adapters and systems
* Scenario-specific configurations (OTP, documents, notifications)
* Visual mapping tools

Quickly check the health status of all FlowX services and custom connectors with:
* Health status monitoring
* Component version checking
* Performance metrics and resource utilization statistics
* System alerts
* Historical data for trend analysis

The UI Designer provides a comprehensive environment for creating intuitive user interfaces with:
* Enhanced UI layer panel for intuitive design element management
* Improved drag and drop functionality for precise component placement
* Flexible root component management for form groups and containers
* Clear component hierarchy visualization with navigation controls
* Rich component library with customization options
* Integration with themes and styling capabilities
Learn more about UI Designer capabilities and components
## Next steps
Learn how to create and manage a process from scratch
# Building with FlowX.AI
Source: https://docs.flowx.ai/5.1/docs/getting-started/building-your-first-proc
Learn how to build with FlowX.AI.
[Create a workspace](../projects/workspaces).
[Create a project](../projects/managing-applications/application).
[Design a BPMN Process](../flowx-designer/managing-a-project-flow).
Define and manage a process flow using [**FLOWX Process Designer**](../building-blocks/process/process).
Run a process instance with [**FlowX Engine**](../platform-deep-dive/core-components/flowx-engine).
Create the **Front-End Application**.
Connect **Plugins**.
## FlowX.AI implementation methodology
The implementation of FlowX.AI follows a structured approach comprising several phases, using a hybrid methodology that has proven effective in past implementations. These phases include:
* Mobilization
* Analysis & Solution Design
* Project Execution
* Production & Go-live
* Transition to Business as Usual (BaU)
These phases address various aspects of the implementation process, ensuring a comprehensive and successful deployment of FlowX.AI solutions.
Explore our Academy course on Implementation Methodology for in-depth insights:
* What are the project stages in a FlowX implementation?
* What are the key roles of an implementation team?
* What are the main responsibilities of each role in the team?
## Designing the BPMN Process: Requesting a New Credit Card from a Bank App
Let's initiate by designing the BPMN process diagram for a sample use case: requesting a new credit card from a bank app.
## Sample Process Steps
Taking a **business process example** of a credit card application, it involves the following steps:
Create a business process example of a credit card application.
A user initiates a request for a new credit card - ***Start Event***
The user fills in a form with their personal data - ***User Task***
The bank system performs a credit score check automatically using a send event that communicates with the credit score adapter, followed by a receive event to collect the response from the adapter - ***Automatic Task***
The process bifurcates based on the credit score using an ***Exclusive Gateway***
Each branch entails a service task that saves the appropriate credit card type to the process data - ***Automatic Task***
The branches reconvene through a ***Closing Gateway***
The user views the credit card details and confirms - ***User Task***
After user confirmation, the process divides into two parallel branches - ***Parallel Gateway***. One registers the request in the bank's systems (bank system adapter/integration), and the other sends a confirmation email (notification plugin) to the user
An additional automatic task follows: a call to an external API to compute the distance between the user's address and the bank locations ([Google Maps Distance Matrix API](https://developers.google.com/maps/documentation/distance-matrix/overview)) - ***Automatic Task***
A task is utilized to sort the location distances and present the top three to the user - ***Automatic Task***
The user selects the card pickup point from the bank location suggestions - ***User Task***
A receive task awaits confirmation from the bank that the user has collected the new card, concluding the process flow - ***End Event***
## Sample Process Diagram
Here's what the **BPMN** diagram illustrates:

# FlowX.AI Documentation
Source: https://docs.flowx.ai/5.1/docs/introduction
Build and orchestrate intelligent business processes with FlowX.AI
**Popular topics:** [Building your first process](/5.1/docs/getting-started/building-your-first-proc) · [Platform architecture](/5.1/docs/platform-overview/flowx-architecture) · [BPMN best practices](/5.1/docs/building-blocks/process/process) · [Release notes](/release-notes/overview) · [Setup guides](/5.1/setup-guides/setup-guides-overview)
## Documentation sections
New to FlowX.AI? Start here to build your first process and learn the platform fundamentals.
Learn how to use FlowX.AI components, features, and integrations to build powerful business applications.
Understand the platform architecture, frameworks, standards, and core components.
Explore the visual development environment for designing processes and user interfaces.
Set up and configure FlowX.AI in your own environment with deployment and configuration guides.
Explore REST APIs, client SDKs for Angular, React, iOS, and Android, and integration options.
Advanced topics, plugins, integrations, and detailed technical documentation.
Release notes, version history, supported environments, and technical references.
## What's new
Check out the latest features and improvements
Latest release notes
Build your first process
Learn the architecture
# FlowX.AI architecture
Source: https://docs.flowx.ai/5.1/docs/platform-overview/flowx-architecture
FlowX.AI is a comprehensive, event-driven platform designed to accelerate digital transformation by enabling rapid development of web and mobile applications without extensive coding. The architecture consists of several interconnected components that work together to provide a seamless experience for both developers and end users.

## Core components
The FlowX.AI platform is built on a microservices architecture, with each component serving a specific purpose in the overall ecosystem:
### FlowX.AI Designer
The **FlowX.AI Designer** is a collaborative, no-code/full-code web-based application development environment that serves as the central workspace for creating and managing processes, UIs, integrations, and other application components.
**Key capabilities:**
* Design processes using industry-standard [BPMN 2.0](./frameworks-and-standards/business-process-industry-standards/intro-to-bpmn) notation
* Configure user interfaces for both generated and custom components
* Define business rules and validations via [DMN](./frameworks-and-standards/business-process-industry-standards/intro-to-dmn) or [MVEL](./frameworks-and-standards/business-process-industry-standards/intro-to-mvel) scripting
* Create visual integration connectors to external systems
* Design and manage data models
* Add extensibility through [custom plugins](../platform-deep-dive/plugins/custom-plugins)
* Manage user access roles and permissions
The FlowX Designer is a web application that runs in the browser, residing outside a FlowX deployment, serving as the administrative interface for the entire platform.
The no-code/full-code capabilities allow both business users (analysts, product managers) and experienced developers to collaboratively build applications, reducing the typical development cycle from months to days.
### Microservices architecture
FlowX.AI is built on a suite of specialized microservices that provide the foundation for the platform's capabilities. These microservices communicate through an event-driven architecture, primarily using Kafka for messaging, enabling scalability, resilience, and extensibility:
#### FlowX.AI Engine
The **FlowX.AI Engine** is the core orchestration component of the platform, serving as the central nervous system that executes process definitions, manages process instances, and coordinates communications between all platform components.

**Key responsibilities:**
* Executing business processes based on BPMN 2.0 definitions
* Creating and managing process instances throughout their lifecycle
* Coordinating real-time interactions between users, systems, and data
* Orchestrating the event-driven communication across the platform
* Dynamically generating and delivering UI components based on process state
* Handling integration with external systems via Kafka messaging
The Engine is built on [Kafka](./frameworks-and-standards/event-driven-architecture-frameworks/intro-to-kafka-concepts), providing high-throughput, low-latency event processing. This architecture enables FlowX.AI to maintain a responsive user experience (0.2s response time) even when integrating with slow legacy systems by buffering load and managing asynchronous communication.
**Technical infrastructure:**
* PostgreSQL database for process definitions and instance data
* MongoDB for runtime build information
* Redis for caching process definitions and improving performance
* Multiple script engine support including Python, JavaScript, and MVEL
* Elasticsearch integration for efficient data indexing and searching
The Engine works closely with the **Advancing Controller** to ensure efficient process instance progression, particularly in scaled environments.
#### FlowX.AI Application Manager
The **Application Manager** is responsible for managing the application lifecycle, including:
* Creating, updating, and deleting applications and their resources
* Managing versions, manifests, and configurations
* Serving as a proxy for front-end resource requests
* Handling application builds and deployments
This microservice maintains a comprehensive data model for applications, including all their components, versions, and dependencies, ensuring consistency across environments.
#### FlowX.AI Runtime Manager
The **Runtime Manager** works in conjunction with the Application Manager to:
* Deploy application builds to runtime environments
* Manage runtime configurations and environment-specific settings
* Monitor and manage active application instances
* Handle the runtime data and state of deployed applications
#### FlowX.AI Integration Designer
The **Integration Designer** provides a visual interface for creating and managing integrations with external systems:
* Define REST API endpoints and authentication methods
* Create and configure integration workflows
* Map data between FlowX.AI processes and external systems
* Test and monitor integrations in real-time
This microservice simplifies the complex task of connecting to various enterprise systems, allowing for secure, scalable, and maintainable integrations without extensive coding.
#### FlowX.AI Content Management
The **Content Management** microservice handles all taxonomies and structured content within the platform:
* Manage enumerations (dropdown options, categories)
* Store and serve localization content and translations
* Organize media assets and reference data
* Centralize content that needs to be shared across applications
This Java-based service uses MongoDB for flexible storage of unstructured content, making it the go-to place for all shared taxonomies and content definitions.
#### FlowX.AI Scheduler
The **Scheduler** microservice handles time-based operations within processes:
* Set process expiration dates and reminders
* Trigger time-based events and activities
* Manage recurring tasks and scheduled operations
* Support delayed actions and follow-ups
It communicates with the FlowX Engine through Kafka, creating time-based events that can be processed when needed, similar to a reminder application for business processes.
#### FlowX.AI Admin
The **Admin** microservice is responsible for:
* Storing and editing process definitions
* Managing user roles and permissions
* Configuring system-wide settings
* Providing administrative functions for the platform
This service connects to the same database as the FlowX Engine, ensuring consistency in process definitions and configurations.
#### FlowX.AI Data Search
The **Data Search** microservice enables search capabilities across the platform, allowing users to find data within process instances:
* Searching for data across processes and applications using indexed keys
* Indexing and retrieving information based on specific criteria
* Supporting complex queries with filtering by process status, date ranges, and more
* Enabling cross-application data discovery and access
This service leverages Elasticsearch to execute efficient searches. It works by indexing process data automatically when process status changes or at specific trigger points, making the information searchable without impacting performance. The service communicates with the FlowX Engine through Kafka topics, receiving search requests and returning results that can be displayed in applications.
#### FlowX.AI Events Gateway
The **Events Gateway** microservice centralizes and manages the real-time communication between backend services and frontend clients through Server-Sent Events (SSE):
* Processes events from various sources like the FlowX Engine and Task Management
* Routes and distributes messages to appropriate components based on their destination
* Publishes events to frontend renderers enabling real-time UI updates
* Integrates with Redis for efficient event distribution and ensuring messages reach the correct instance with the SSE connection

This component is crucial for maintaining the real-time, responsive nature of FlowX applications. It ensures that all UI updates, notifications, and system changes are immediately reflected across the platform without requiring page refreshes or manual polling. The Events Gateway reads messages from Kafka topics and distributes them appropriately, enabling features like instant form rendering when reaching user tasks or displaying real-time configuration errors.
### FlowX.AI SDKs
The platform provides SDKs for different client platforms:
* **Web SDK (Angular)**: For rendering process screens in web applications
* **Android SDK**: For native Android application support
* **Custom Component SDK**: For developing reusable UI components
These SDKs communicate with the FlowX Engine to render dynamic UIs and orchestrate user interactions based on process definitions.
### FlowX.AI plugins
The platform's functionality can be extended through plugins:
* **Notifications Plugin**: For sending and managing notifications
* **Documents Plugin**: For document generation and management
* **OCR Plugin**: For optical character recognition and document processing
* **Task Management Plugin**: For handling human tasks and assignments

Plugins provide modular extensions to the core platform, allowing for customization without modifying the base architecture.
## Platform infrastructure
### Advancing Controller
The **Advancing Controller** is a critical supporting service for the FlowX.AI Engine that enhances process execution efficiency, particularly in scaled deployments:
* Manages the distribution of workload across Engine instances
* Facilitates even redistribution during scale-up and scale-down scenarios
* Utilizes database triggers in PostgreSQL or Oracle Database configurations
* Prevents process instances from getting stuck if a worker pod fails
* Performs cleanup tasks and monitors worker pod status
The Advancing Controller works in close coordination with the Engine to ensure uninterrupted process advancement. It must run concurrently with the Engine for optimal performance, particularly in production environments where reliability is crucial.
### Authorization & session management
FlowX.AI recommends **Keycloak** or **Azure AD (Entra)** for identity and access management:
* Create and manage users and credentials
* Define groups and assign roles
* Secure API access through token-based authentication
* Integrate with existing identity providers
Every communication from client applications passes through a public entry point (API Gateway), which validates authentication tokens before allowing access to the platform. The system supports OAuth2 authentication with multiple configuration options for securing microservice communication.
### Integrations
FlowX.AI can connect to external systems through custom integrations called connectors
These integrations can be developed using any technology stack, with the only requirement being a connection to Kafka. This flexibility allows for seamless integration with:
* Legacy APIs and systems
* Custom file exchange solutions
* Third-party services and platforms
## Technical foundation
### Data flow and event-driven communication
The FlowX.AI platform uses an event-driven architecture based on Kafka for asynchronous communication between components:
1. **Process Initiation**: Client applications initiate processes through the API Gateway
2. **Event Processing**: The FlowX Engine processes events and coordinates activities
3. **Integration Orchestration**: External system interactions are managed through integration workflows
4. **UI Generation**: Dynamic user interfaces are generated and delivered to client applications
5. **Data Management**: Process data is stored and managed throughout the execution lifecycle
This event-driven approach enables the platform to handle complex, long-running processes while maintaining responsiveness and scalability. Each microservice communicates through predefined Kafka topics following a consistent naming convention (e.g., `ai.flowx.dev.core.trigger.advance.process.v1`), allowing for loosely coupled but highly cohesive system architecture.
### Script engine support
FlowX.AI supports multiple scripting languages for business rules, validations, and data transformations:
* **MVEL**: Default scripting language for business rules
* **Python**: Supported in Python 3 (GraalPy)
* **JavaScript**: Available using GraalJS for high-performance execution
This flexibility allows developers to use the most appropriate language for different use cases while maintaining performance and security.
## Deployment and scalability
FlowX.AI is designed for containerized deployment, typically using Kubernetes:
* Microservices can be scaled independently based on demand
* Stateless components allow for horizontal scaling
* Kafka provides resilient message handling and event streaming
* Redis supports caching and real-time event distribution
* Database configurations support both PostgreSQL and Oracle Database
### Monitoring and health checks
The platform includes comprehensive monitoring and health check capabilities:
* Prometheus metrics export for performance monitoring
* Kubernetes health probes for service availability
* Database connection health checks
* Kafka cluster health monitoring
These features ensure that the platform remains reliable and observable in production environments, with the ability to detect and resolve issues proactively.
## Conclusion
FlowX.AI offers a comprehensive, event-driven platform for rapidly developing and deploying digital applications without extensive coding. Its microservices architecture, combined with industry-standard technologies and a user-friendly design environment, enables organizations to accelerate their digital transformation initiatives while maintaining flexibility, scalability, and integration with existing systems.
# Intro to BPMN
Source: https://docs.flowx.ai/5.1/docs/platform-overview/frameworks-and-standards/business-process-industry-standards/intro-to-bpmn
The core element of the platform is a process. Think of it as a representation of your business use case, for example making a request for a new credit card, placing an online food order, registering your new car or creating an online fundraiser supporting your cause.
To easily design and model process flows, we use the standard **BPMN 2.0** graphical representation.
## What is Business Process Model and Notation (BPMN)?
Business Process Model and Notation (BPMN) is a graphical representation for specifying business processes in a business process model.
It is **the most widely used standard for business process diagrams**. It is intended to be used directly by the stakeholders who design, manage and realize business processes, but at the same time be precise enough to allow BPMN diagrams to be translated into software process components.
This is why we chose it for modeling the process flows.
## BPMN 2.0 elements
A BPMN business process flow is represented as a set of process elements connected by sequences. Here are the most common types of elements:
### Events
Events describe something that happens during the course of a process. There are three main events types: start events, intermediate events, and end events. These three types are also defined as either catching events (they react to a trigger) or throwing events (they are triggered by the process).

### Activities
An activity represents a unit of work to be performed by the business process. An activity can be atomic (a task) or can represent a group of more activities (a subprocess).

### Gateways
Gateways are used to control how a process flows. They act as a decision point that picks which sequence flow should the [**process instance**](../../../projects/runtime/active-process/process-instance) take. This is based on the result of the evaluation of condition(s) specified (in case of exclusive gateways) or they can be used to split a process into more branches (in case of parallel gateways).

### Pools and lanes
Pools and lanes are used in order to group the process steps by process participants. To show that certain user roles are responsible for performing specific process steps you can divide the process using lanes.

## BPMN basic concepts
Let's get into a bit more details on the main types of BPMN process elements.
### Events
Events are signals that something happens within a process, including its start and end and any interactions with the process environment.
Types of Events:
* Start Events
* End Events
* Intermediate Events
### Start and End events
**Start & End events**
| Start Event Icon | End Event Icon |
| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
|  |  |
| Event that triggers the process | Event that defines the state that terminates the process |
### Intermediate events
An intermediate event occurs between a start and an end event. It is represented by a circle with a double line, indicating its ability to both catch and throw information.
#### Message events
Message events serve as a means to incorporate messaging capabilities into business process modeling. These events are specifically designed to capture the interaction between different process participants by referencing messages.
### Activities
#### Task
An atomic activity within a process flow, created when the activity cannot be broken down further. A task belongs to one lane.
| User task | Service task |
| :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
|  |  |
| A task that requires human action | A task that uses a web service, automated application, or other kinds of service in completing the task |
#### User Task
A task performed by the user without aid from a business process execution engine or application, requiring a certain action in the application.
#### Service Task
Executed by a business process engine. The task defines a script that the FlowX Engine can interpret and execute, completing when the script finishes. It can also run a [**business rule**](../../../building-blocks/actions/business-rule-action/business-rule-action) on the process data.
### BPMN Subprocesses
In BPMN, a subprocess is a compound activity that represents a collection of other tasks and subprocesses. Generally, we create BPMN diagrams to communicate processes with others. To facilitate effective communications, we really do not want to make a business process diagram too complex. By using subprocesses, you can split a complex process into multiple levels, which allows you to focus on a particular area in a single process diagram.
### Gateways
Gateways allow to control as well as merge and split the **process flow**.
#### Exclusive gateways
In business processes, you typically need to make choices — **business decisions**. The most common type of decision is choosing **either/or**. Exclusive Gateways limit the possible outcome of a decision to a single path, and circumstances choose which one to follow.
#### Parallel gateways
In many cases, you want to split up the flow within your business process. For example the sales and risk departments may examine a new mortgage application at the same time. This reduces the total cycle time for a case. To express parallel flow in BPMN, you use a **parallel gateway**.
| Exclusive gateway (XOR) | Parallel gateway (AND) |
| :---------------------------------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------: |
|  |  |
|
defines a decision point
|
no decision making
all outgoing branches are activated
|
**Closing gateway**
* Closes gateways by connecting branches with no logic involved
* The symbol used is determined by the initial gateway type.
* Parallel gateways:
* These gateways wait for all input tokens and merge them into a single token.
* Are aware of all preceding token flows, know the paths selected, and expect tokens from these paths.
## In depth docs
For comprehensive insights into BPMN and its various node types, explore our course at FlowX Academy:
* What's BPMN (Business Process Model Notation) and how does it work?
* How is BPMN used in FlowX?
# Intro to DMN
Source: https://docs.flowx.ai/5.1/docs/platform-overview/frameworks-and-standards/business-process-industry-standards/intro-to-dmn
As we've seen in the previous chapter, Business Process Model and Notation BPMN is used to define business processes as a sequence of activities. If we need to branch off different process paths, we use gateways. These have rules attached to them in order to decide on which outgoing path should the process continue on.
In version 4.7.2, we've deprecated the **DMN (Decision Model and Notation)** business rule actions.

For more information on how to define DMN gateway decisions, check the [**Exclusive gateway node**](../../../building-blocks/node/exclusive-gateway-node) section.
We needed a convenient way of specifying the **business rules** and we picked two possible ways of writing business rules:
* defining them as DMN decisions
You can define a DMN Business Rule Action directly in **FlowX Designer** . For more information, check the [**DMN business rule action**](../../../building-blocks/actions/business-rule-action/dmn-business-rule-action) section.
* adding [MVEL](./intro-to-mvel) scripts
### What is Decision Model and Notation (DMN)?
**Decision Model and Notation** (or DMN) is a graphical language that is used to specify business decisions. DMN acts as a translator, converting the code behind complex decision-making into easily readable diagrams.
**The Business Process Model and Notation** is used to create the majority of process models **(BPMN)**. The DMN standard was developed to complement BPMN by providing a mechanism for modeling decision-making represented by a Task within a process model. DMN does not have to be used in conjunction with BPMN, but it is highly compatible.
FLOWX.AI supports [DMN 1.3](https://www.omg.org/spec/DMN/1.3/) version.
### DMN Elements
There are 4 basic elements of the **Decision Model and Notation**:
* [Decision](#decision)
* [Business Knowledge Model](#business-knowledge-model)
* [Input Data](#input-data)
* [Knowledge Source](#knowledge-source)

#### Decision
It’s the center point of a DMN diagram and it symbolizes the action that determines as output the result of a decision.
**Decision service**
A decision service is a high-level decision with well-defined inputs that is made available as a service for invocation. An external application or business process can call the decision service (BPMN).
#### Business Knowledge Model
It portrays a specific knowledge within the business. It stores the origin of the information. Decisions that have the same logic but depend on different sub-input data or sub-decisions use business knowledge models to determine which procedure to follow.
**Example:** a decision, rule, or standard table.
#### Input Data
This is the information used as an input to the normal decision. It’s the variable that configures the result. Input data usually includes business-level concepts or objects relevant to the business.
**Example:** Entering a customer’s tax number and the amount requested in a credit assessment decision.
#### Knowledge Source
It’s a source of knowledge that conveys a kind of legitimacy to the business.
**Example**: policy, legislation, rules.
### DMN Decision Table
A decision table represents decision logic which can be depicted as a table in Decision Model and Notation. It consists of inputs, outputs, rules, and hit policy.
| Decision table elements | |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Inputs | A decision table can have one or more input clauses, that represent the attributes on which the rule should be applied. |
| Outputs | Each entry with values for the input clause needs to be associated with output clauses. The output represents the result that we set if the rules applied to the input are met. |
| Rules | Each rule contains input and output entries. The input entries are the condition and the output entries are the conclusion of the rule. If each input entry (condition) is satisfied, then the rule is satisfied and the decision result contains the output entries (conclusion) of this rule. |
| Hit policy | The hit policy specifies what the result of the decision table is in cases of overlapping rules, for example, when more than one rule matches the input data. |
**Hit Policy examples**
unique result
only one rule will match, or no rule
unique result
the order matter
continues with the first rule that matches
rule outputs are prioritized
rules may overlap, but only match with the highest output priority counts
unique results
multiple rules can be satisfied
all satisfied rules must generate the same output, otherwise the rule is violated
multiple results
the rules are evaluated in the order they are defined
the satisfied rules can generate different outputs
multiple results
the rules are evaluated in an arbitrary order
the satisfied rules can generate different outputs
can contain aggregators - that apply an aggregation operation on all the outputs resulted from the rule evaluation:
SUM
MIN
MAX
COUNT
### DMN Model
DMN defines an XML schema that allows DMN models to be used across multiple DMN authoring platforms.
You can use this XML example with FLOWX Designer, adding it to a Business Rule Action - using an MVEL script. Then you can switch to DMN if you need to generate a graphical representation of the model.
### Using DMN with FLOWX Designer
As mentioned previously, DMN can be used with FLOWX Designer for the following scenarios:
* For defining gateway decisions, using [exclusive gateways](../../../building-blocks/node/exclusive-gateway-node)
* For defining [business rules actions](../../../building-blocks/actions/business-rule-action/business-rule-action) attached to a [task node](../../../building-blocks/node/task-node)
### In depth docs
# Intro to MVEL
Source: https://docs.flowx.ai/5.1/docs/platform-overview/frameworks-and-standards/business-process-industry-standards/intro-to-mvel
We can also specify the business rules logic using MVEL scripts. As opposed to DMN, with MVEL you can create complex business rules with multiple parameters and sub-calculations.
## What is MVEL?
**MVFLEX Expression Language** (MVEL) is an expression language with a syntax similar to the Java programming language. This makes it relatively easy to use in order to define more complex business rules and that cannot be defined using DMN.
The runtime allows MVEL expressions to be executed either interpretively, or through a pre-compilation process with support for runtime byte-code generation to remove overhead. We pre-compile most of the MVEL code in order to make sure the process flow advances as fast as possible.
## Example
```java theme={"system"}
if( input.get("user.credit_score") >= 700 ) {
output.setNextNodeName("TASK_SET_CREDIT_CARD_TYPE_PREMIUM");
} else {
output.setNextNodeName("TASK_SET_CREDIT_CARD_TYPE_STANDARD");
}
```
## In depth docs
# Intro to Elasticsearch
Source: https://docs.flowx.ai/5.1/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch
Elasticsearch itself is not inherently event-driven, it can be integrated into event-driven architectures or workflows. External components or frameworks detect and trigger events, and Elasticsearch is utilized to efficiently index and make the event data searchable.
This integration allows event-driven systems to leverage Elasticsearch’s powerful search and analytics capabilities for real-time processing and retrieval of event data.
## What is Elasticsearch?
Elasticsearch is a powerful and highly scalable open-source search and analytics engine built on top of the [Apache Lucene](https://lucene.apache.org/) library. It is designed to handle a wide range of data types and is particularly well-suited for real-time search and data analysis use cases. Elasticsearch provides a distributed, document-oriented architecture, making it capable of handling large volumes of structured, semi-structured, and unstructured data.
## How it works?
At its core, Elasticsearch operates as a distributed search engine, allowing you to store, search, and retrieve large amounts of data in near real-time. It uses a schema-less JSON-based document model, where data is organized into indices, which can be thought of as databases. Within an index, documents are stored, indexed, and made searchable based on their fields. Elasticsearch also provides powerful querying capabilities, allowing you to perform complex searches, filter data, and aggregate results.
## Why it is useful?
One of the key features of Elasticsearch is its distributed nature. It supports automatic data sharding, replication, and node clustering, which enables it to handle massive amounts of data across multiple servers or nodes. This distributed architecture provides high availability and fault tolerance, ensuring that data remains accessible even in the event of hardware failures or network issues.
Elasticsearch integrates with various programming languages and frameworks through its comprehensive RESTful API. It also provides official clients for popular languages like Java, Python, and JavaScript, making it easy to interact with the search engine in your preferred development environment.
## Indexing & sharding
### Indexing
Indexing refers to the process of adding, updating, or deleting documents in Elasticsearch. It involves taking data, typically in JSON format, and transforming it into indexed documents within an index. Each document represents a data record and contains fields with corresponding values. Elasticsearch uses an inverted index data structure to efficiently map terms or keywords to the documents containing those terms. This enables fast full-text search capabilities and retrieval of relevant documents.
### Sharding
Sharding, on the other hand, is the practice of dividing index data into multiple smaller subsets called shards. Each shard is an independent, self-contained index that holds a portion of the data. By distributing data across multiple shards, Elasticsearch achieves horizontal scalability and improved performance. Sharding allows Elasticsearch to handle large amounts of data by parallelizing search and indexing operations across multiple nodes or servers.
Shards can be configured as primary or replica shards. Primary shards contain the original data, while replica shards are exact copies of the primary shards, providing redundancy and high availability. By having multiple replicas, Elasticsearch ensures data durability and fault tolerance. Replicas also enable parallel search operations, increasing search throughput.
Sharding offers several advantages. It allows data to be distributed across multiple nodes, enabling parallel processing and faster search operations. It also provides fault tolerance, as data is replicated across multiple shards. Additionally, sharding allows Elasticsearch to scale horizontally by adding more nodes and distributing the data across them.
The number of shards and their allocation can be determined during index creation or modified later. It is important to consider factors such as the size of the dataset, hardware resources, and search performance requirements when deciding on the number of shards.
For more details, check Elasticsearch documentation:
## Leveraging Elasticsearch for advanced indexing with FlowX.AI
The integration between FlowX.AI and Elasticsearch involves the indexing of specific keys or data from the [**UI Designer**](../../../building-blocks/ui-designer/) to [process definitions](../../../building-blocks/process/process-definition). The indexing process is initiated by the [FlowX Engine](../../../platform-deep-dive/core-components/flowx-engine) which sends the data to Elasticsearch, where data is then indexed in the "process\_instance" index.
There are two methods available for indexing data: Kafka and HTTP.
* **Kafka**: Data is sent to be indexed through a Kafka topic using the new strategy. Deploy the [**Kafka Connect with Elasticsearch Sink Connector**](../../../../setup-guides/flowx-engine-setup-guide/configuring-elasticsearch-indexing/elasticsearch-indexing.mdx#kafka-connect) in the infrastructure to utilize this method.
* **HTTP**: Data is indexed by establishing a direct connection from the FlowX Engine to Elasticsearch. Use HTTP calls to connect directly from the FlowX Engine to Elasticsearch.
To ensure effective indexing of process instances' details, a crucial step involves defining a mapping that specifies how Elasticsearch should index the received messages. This mapping is essential as the process instances' details often have specific formats. The process-engine takes care of this by automatically creating an index template during startup if it doesn't already exist. The index template acts as a blueprint, providing Elasticsearch with the necessary instructions on how to index and organize the incoming data accurately. By establishing and maintaining an appropriate index template, the integration between FLOWX.AI and Elasticsearch can seamlessly index and retrieve process instance information in a structured manner.
### Kafka transport strategy
[Kafka](../event-driven-architecture-frameworks/intro-to-kafka-concepts) transport strategy implies process-engine sending messages to a Kafka topic whenever there is data from a process instance to be indexed. Kafka Connect is then configured to read these messages from the topic and forward them to Elasticsearch for indexing.
This approach offers benefits such as fire-and-forget communication, where the process-engine no longer needs to spend time handling indexing requests. By decoupling the process-engine from the indexing process and leveraging Kafka as a messaging system, the overall system becomes more efficient and scalable. The process-engine can focus on its core responsibilities, while Kafka Connect takes care of transferring the messages to Elasticsearch for indexing.
To optimize indexing response time, Elasticsearch utilizes multiple indices created dynamically by the Kafka Connect connector. The creation of indices is based on the timestamp of the messages received in the Kafka topic. The frequency of index creation, such as per minute, hour, week, or month, is determined by the timestamp format configuration of the Kafka connector.
It's important to note that the timestamp used for indexing is the process instance's start date. This means that subsequent updates received for the same object will be directed to the original index for that process instance. To ensure proper identification and indexing, it is crucial that the timestamp of the message in the Kafka topic corresponds to the process instance's start date, while the key of the message aligns with the process instance's UUID. These two elements serve as unique identifiers for determining the index in which a process instance object was originally indexed.
For more details on how to configure process instance indexing through Kakfa transport, check the following section:
# Intro to Kafka concepts
Source: https://docs.flowx.ai/5.1/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-kafka-concepts
Apache Kafka is an open-source distributed event streaming platform that can handle a high volume of data and enables you to pass messages from one end-point to another.
Kafka is a unified platform for handling all the real-time data feeds. Kafka supports low latency message delivery and gives a guarantee for fault tolerance in the presence of machine failures. It can handle many diverse consumers. Kafka is very fast, and performs 2 million writes/sec. Kafka persists all data to the disk, which essentially means that all the writes go to the page cache of the OS (RAM). This makes it very efficient to transfer data from a page cache to a network socket.
### Benefits of using Kafka
* **Reliability** − Kafka is distributed, partitioned, replicated, and fault-tolerant
* **Scalability** − Kafka messaging system scales easily without downtime
* **Durability** − Kafka uses Distributed commit log which means messages persist on disk as fast as possible
* **Performance** − Kafka has high throughput for both publishing and subscribing messages. It maintains a stable performance even though many TB of messages are stored.
## Key Kafka concepts
### Events
Kafka encourages you to see the world as sequences of events, which it models as key-value pairs. The key and the value have some kind of structure, usually represented in your language’s type system, but fundamentally they can be anything. Events are immutable, as it is (sometimes tragically) impossible to change the past.
### Topics
Because the world is filled with so many events, Kafka gives us a means to organize them and keep them in order: topics. A topic is an ordered log of events. When an external system writes an event to Kafka, it is appended to the end of a topic.
In FLOWX.AI, Kafka handles all communication between the [FlowX Engine](../../../platform-deep-dive/core-components/flowx-engine) and external plugins and integrations. It is also used for notifying running process instances when certain events occur. More information about KAFKA configuration on the section below:
### Producer
A producer is an external application that writes messages to a Kafka cluster, communicating with the cluster using Kafka’s network protocol.
### Consumer
The consumer is an external application that reads messages from Kafka topics and does some work with them, like filtering, aggregating, or enriching them with other information sources.
## In-depth docs
# Intro to Kubernetes
Source: https://docs.flowx.ai/5.1/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-kubernetes
Kubernetes is an open-source container orchestration platform that automates many of the manual processes involved in containerized application deployment, management, and scaling.
The purpose of Kubernetes is to orchestrate containerized applications to run on a cluster of hosts. **Containerization** enables you to deploy multiple applications using the same operating system on a single virtual machine or server.
Kubernetes, as an open platform, enables you to build applications using your preferred programming language, operating system, libraries, or messaging bus. To schedule and deploy releases, existing continuous integration and continuous delivery (CI/CD) tools can be integrated with Kubernetes.
## Benefits of using Kubernetes
* A proper way of managing containers
* High availability
* Scalability
* Disaster recovery
## Key Kubernetes Concepts
### Node & PODs
A Kubernetes node is a machine that runs containerized workloads as part of a Kubernetes cluster. A node can be a physical machine or a virtual machine, and can be hosted on-premises or in the cloud.
A pod is composed of one or more containers that are colocated on the same host and share a network stack as well as other resources such as volumes. Pods are the foundation upon which Kubernetes applications are built.
Kubernetes uses pods to run an instance of your application. A pod represents a single instance of your application.
Pods are typically ephemeral, disposable resources. Individually scheduled pods miss some of the high availability and redundancy Kubernetes features. Instead, pods are deployed and managed by Kubernetes *Controllers*, such as the Deployment Controller.
### Service & Ingress
**Service** is an abstraction that defines a logical set of pods and a policy for accessing them. In Kubernetes, a Service is a REST object, similar to a pod. A Service definition, like all REST objects, can be POSTed to the API server to create a new instance. A Service object's name must be a valid [RFC 1035](https://www.ietf.org/rfc/rfc1035.txt) label name.
**Ingress** is a Kubernetes object that allows access to the Kubernetes services from outside of the Kubernetes cluster. You configure access by writing a set of rules that specify which inbound connections are allowed to reach which services. This allows combining all routing rules into a single resource.
**Ingress controllers** are pods, just like any other application, so they’re part of the cluster and can see and communicate with other pods. An Ingress can be configured to provide Services with externally accessible URLs, load balance traffic, terminate SSL / TLS, and provide name-based virtual hosting. An Ingress controller is in charge of fulfilling the Ingress, typically with a load balancer, but it may also configure your edge router or additional frontends to assist with the traffic.
FlowX.AI offers a predefined NGINX setup as Ingress Controller. The [NGINX Ingress Controller](https://www.nginx.com/products/nginx-ingress-controller/) works with the [NGINX](https://www.nginx.com/resources/glossary/nginx/) web server (as a proxy). For more information, check the below sections:
### ConfigMap & Secret
**ConfigMap** is an API object that makes it possible to store configuration for use by other objects. A ConfigMap, unlike most Kubernetes objects with a spec, has `data` and `binaryData` fields. As values, these fields accept key-value pairs. The `data` field and `binaryData` are both optional. The data field is intended to hold UTF-8 strings, whereas the `binaryData` field is intended to hold binary data as base64-encoded strings.
The name of a ConfigMap must be a valid [DNS subdomain name](https://www.ietf.org/rfc/rfc1035.txt).
**Secret** represents an amount of sensitive data, such as a password, token, or key. Alternatively, such information could be included in a pod specification or a container image. Secrets are similar to ConfigMaps but they are designed to keep confidential data.
### **Volumes**
A Kubernetes volume is a directory in the orchestration and scheduling platform that contains data accessible to containers in a specific pod. Volumes serve as a plug-in mechanism for connecting ephemeral containers to persistent data stores located elsewhere.
### **Deployment**
A deployment is a collection of identical pods that are managed by the Kubernetes Deployment Controller. A deployment specifies the number of pod replicas that will be created. If pods or nodes encounter problems, the Kubernetes Scheduler ensures that additional pods are scheduled on healthy nodes.
Typically, deployments are created and managed using `kubectl create` or `kubectl apply`. Make a deployment by defining a manifest file in YAML format.
## Kubernetes Architecture
Kubernetes architecture consists of the following main parts:
* Control Plane (master)
* kube-apiserver
* etcd
* kube-scheduler
* kube-controller-manager
* cloud-controller-manager
* Node components
* kubelet
* kube-proxy
* Container runtime
## Install tools
### kubectl
`kubectl` makes it possible to run commands against Kubernetes clusters using the `kubectl` command-line tool. `kubectl` can be used to deploy applications, inspect and manage cluster resources, and inspect logs. See the `kubectl` [reference documentation ](https://kubernetes.io/docs/reference/kubectl/)for more information.
### kind
`kind` command makes it possible to run Kubernetes on a local machine. As a prerequisite, Docker needs to be installed and configured. What `kind` is doing is to run local Kubernetes clusters using Docker container “nodes”.
## In depth docs
# Intro to NGINX
Source: https://docs.flowx.ai/5.1/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-nginx
NGINX is a free, open-source, high-performance web server with a rich feature set, simple configuration, and low resource consumption that can also function as a reverse proxy, load balancer, mail proxy, HTTP cache, and many other things.
### How NGINX is working?
NGINX allows you to hide a server application's complexity from a front-end application. It uses an event-driven, asynchronous approach to create a new process for each web request, with requests handled in a single thread.
### Using NGINX with FlowX Designer
[**The NGINX Ingress Controller for Kubernetes**](https://kubernetes.github.io/ingress-nginx/) - `ingress-nginx` is an ingress controller for Kubernetes using NGINX as a reverse proxy and load balancer.
Ingress allows you to route requests to services based on the host or path of the request, centralizing a number of services into a single entry point.
The [ingress resource](https://www.nginx.com/products/nginx-ingress-controller/nginx-ingress-resources/) simplifies the configuration of **SSL/TLS** **termination**, **HTTP load-balancing**, and **layer routing**.
For more information, check the following section:
#### Integrating with FlowX Designer
FlowX Designer is using NGINX ingress controller for the following actions:
1. For routing calls to plugins
2. For routing calls to the [FlowX Engine](../../../platform-deep-dive/core-components/flowx-engine):
* Viewing current instances of processes running in the FlowX Engine
* Testing process definitions from the FlowX Designer - route the API calls and SSE communications to the FLOWX engine backend
* Accessing REST API of the backend microservice
3. For configuring the Single Page Application (SPA) - FlowX Designer SPA will use the backend service to manage the platform via REST calls
In the following section, you can find a suggested NGINX setup, the one used by FlowX.AI:
### Installing NGINX Open Source
For more information on how to install NGINX Open Source, check the following guide:
# Intro to Redis
Source: https://docs.flowx.ai/5.1/docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-redis
Redis is a fast, open-source, in-memory key-value data store that is commonly used as a cache to store frequently accessed data in memory so that applications can be responsive to users. It delivers sub-millisecond response times enabling millions of requests per second for applications.
It is also used as a Pub/Sub messaging solution, allowing messages to be passed to channels and for all subscribers to that channel to receive that message. This feature enables information to flow quickly through the platform without using up space in the database as messages are not stored.
Redis offers a primary-replica architecture in a single node primary or a clustered topology. This allows you to build highly available solutions providing consistent performance and reliability. Scaling the cluster size up or down is done very easily, this allows the cluster to adjust to any demands.
## In depth docs
# Projects
Source: https://docs.flowx.ai/5.1/docs/projects/managing-applications/application
Projects group all resources and dependencies needed to implement an use case.

## Overview
A project groups resources that represent a project's entire lifecycle. It's not just a collection of processes; it's an organized workspace containing all dependencies required for that project, from themes and templates to integrations and other resources. Projects enable you to:
* Create Versions of a project to manage changes over time.
* Deploy Builds for consistent environments.
* Organize Resources to ensure clarity and reduce errors.

## Core features
Projects provide a single view of all resources referenced in a process, enabling you to manage everything from one central workspace. This approach reduces context-switching and keeps configuration focused.
Projects support the definition of multiple locales, allowing for easy handling of regional content and settings. Enumerations, substitution tags, and media can be localized to meet specific environment requirements.
Projects support a robust versioning mechanism that tracks changes to processes, resources, and configurations. The Project Version captures a snapshot of all included resources, while the Build consolidates everything into a deployable package. Each build contains only one version of a project, ensuring a consistent deployment.
Projects can leverage Libraries, which act similarly to projects but are designed for resource sharing across projects. A library can contain reusable components like processes or templates that can be included in other projects. Dependencies between projects and libraries are managed carefully to ensure compatibility.
## Config
Config mode is the environment where you set up, adjust, and manage your project's resources, processes, and configurations. It's the workspace where you fine-tune every aspect of the project before it's ready for deployment. Think of it as the design phase, where the focus is on setup, organization, and preparation.
## Project components
### Processes
* **Processes**: Process definitions that drive the project's core functionality and share a project's resources.

* **Subprocesses**: Processes that can be invoked within the main process. These can either be part of the same project or imported from a library set as a dependency for the project.

### Content Management System (CMS)
* **Enumerations**: Predefined sets of options or categories used across the project. These are useful for dropdown menus, filters, and other selection fields.

* **Substitution tags**: Here you have system predefined substitution tags and dynamic placeholders that allow for personalized content, such as user-specific data in notifications or documents.

* **Media Library**: A collection of images, videos, documents, and other media assets accessible within the project.

### Task Management
* **Views**: Views are configurable interfaces that present task-related data based on specific business process definitions. They allow users to create tailored visualizations of task information, utilizing filters, sorting options, and custom parameters to focus on relevant data.
* **Stages**: The phases that a task goes through within a workflow (e.g., Pending, In Progress, Completed).
* **Allocation Rules**: Criteria for assigning tasks within workflows based on predefined rules (e.g., user roles, availability).

### Integrations
* **Systems (API Endpoints)**: Configurations for connecting to external systems via REST APIs. These endpoints facilitate data exchange and integration with third-party platforms.

* **Workflows**: Workflows are configurable sequences of tasks and decision nodes that automate data processing, system interactions, and integrations, enabling efficient communication and functionality across different projects and services.
### Dependencies
Dependencies refer to the relationship between a project and the external resources it relies on, typically housed in a **Library**. These dependencies allow projects to access and utilize common assets, like processes, enumerations, or media files, from another project without duplicating content. By managing dependencies effectively, organizations can ensure that their projects remain consistent, efficient, and modular, streamlining both development and maintenance.
* **Libraries**: A library is a special type of project that stores reusable resources. Projects can declare a library as a dependency to gain access to the resources stored within it.

* **Build-Specific Dependencies**: When a a project adds a library as a dependency, it does so by referencing a specific build of that library

This build-specific dependency ensures that changes in the library do not automatically propagate to the dependent projects, providing stability and control over which version is in use.
* **Versioning**: Dependencies are versioned, meaning a project can rely on a particular version of a library's build. This versioning capability allows projects to remain insulated from future changes until they are ready to update to a newer version.

Read more about libraries by accessing this section
***
### Configuration Parameters
Configuration Parameters are essential components that allow projects to be dynamic, flexible, and environment-specific. They provide a way to manage variables and values that are likely to change based on different deployment environments (e.g., Development, QA, Production), without requiring hardcoded changes within the project. This feature is particularly useful for managing sensitive information and environment-specific settings.
* **Set environment-specific values**: Tailor your project's behavior depending on the target environment.
* **Store sensitive data securely**: Store API keys, passwords, or tokens securely using environment variables.
* **Centralize settings**: Manage common values in one place, making it easier to update settings across multiple processes or integrations.

***
### Project level settings
#### Name
The name of the project, which serves as the main identifier for your project within FlowX AI. This name is used to categorize and manage all associated resources.
#### Type
You have two options:
* **Application**: A standard project that will contain processes, resources, integrations, and other elements.
* **Library**: A reusable set of resources that can be referenced by multiple projects.
#### Platform type
You can specify the platforms for the project:
* **Omnichannel**: The project will support web, mobile, and other platforms.
* **Web**: The project will be restricted to web-based access.
* **Mobile**: The project will only be accessible via mobile platforms.
#### Default theme
Choose a theme to apply a consistent look and feel across the project. Themes manage colors, fonts, and UI elements for a unified visual experience. In the screenshot, "FlowXTheme" is selected as the default.
#### Number formatting
* **Min Decimals** and **Max Decimals**: Configure how numbers are displayed in the project by setting the minimum and maximum decimal points. This helps ensure data consistency when dealing with financial or scientific information.
* **Date Format**: Choose the format for displaying dates (e.g., short or long formats) to ensure the information is localized or standardized based on your project's requirements.
* **Currency Format**: Set whether currency is displayed using the ISO code (e.g., USD) or using a symbol (\$). This affects how financial information is presented across the project.
#### Languages
This section allows you to manage languages supported by the project.
* **Default Language**: You can set one language as the default, which will be the primary language for users unless they specify otherwise. In the screenshot, English (EN) is set as the default language.
* **Add Multiple Languages**: This enables multi-language support. Substitution tags and enumerations can be localized to provide a better experience for users in different regions.

Fore more information about localization and internationalization, check the following section:
## Creating and managing projects
A project's lifecycle includes the following stages:
* Start by defining the name and type (Omnichannel, Web, Mobile).

* Set up initial configurations like themes, languages, and formats.

* Inherit system-wide design assets like themes or fonts.
* Add processes, define templates, set up enumerations, and manage integrations.
* Configure environment-specific parameters like API URLs or passwords using environment variables.
* Reuse resources from libraries by setting up dependencies, allowing access to shared content.
* Submit your configured resources to a version.
* Once finalized, a version can be committed for stability.
* Create a build from a version when ready to deploy to a different environment.
* A build packages the project version for a consistent deployment.
* Each build is immutable and cannot be modified once created, ensuring runtime stability.
## FAQs
To create a new version, navigate to the project dashboard, select "Create New Version," and make any changes. Once finalized, commit the version to lock it.
Creating a build captures a snapshot of the project version, consolidating resources into a single deployable package. Builds are immutable and cannot be edited once created.
Yes, projects support multiple locales. You can define regional settings, such as date formats and currencies, to cater to different environments.
When modifying shared resources, FlowX AI enforces versioning. You can track which processes or resources are affected by a change and revert if necessary.
A Project Version is a snapshot of resources and configurations that can be modified, tracked, and rolled back. A Build is a deployable package created from a committed version, and it is immutable once deployed.
Go to your project settings, navigate to dependencies, and select the desired library. Choose the build you want to use, and its resources will be accessible within your project.
No, a build is immutable. To make changes, modify the project version, create a new version, and deploy a new build.
Each resource has a Resource Definition ID (consistent across versions) and a Resource Version ID (specific to each version). These ensure that the correct version of a resource is used at runtime.
**A:** Dependencies allow projects to share and reuse resources like processes, enumerations, and templates that are stored in libraries. By setting a library as a dependency, a project can access the resources it needs without duplication, fostering modular development.
**A:** Dependencies are version-controlled, meaning you can choose specific library builds to ensure stability. Each build version of a library captures the state of its resources, allowing projects to lock onto a particular version until they are ready to upgrade.
**A:** Yes, you can remove a dependency from the project. Go to the **Dependencies** section in the project workspace and select the dependency you want to remove. However, make sure that no critical resources in the project rely on that dependency.
**A:** Circular dependencies occur when two libraries depend on each other. This can lead to conflicts and unexpected behavior. It's best to keep dependencies modular and avoid tightly coupling libraries to prevent such issues.
**A:** Use a controlled environment like Dev or UAT to test new builds of the library before updating the dependency in your main project. This allows you to validate changes and ensure they don't negatively impact your project.
**A:** When a dependency is updated to a newer build, any resources that were modified in the library will reflect the latest version. Projects have control over when to update, so older versions remain stable until the dependency is manually updated.
# Dependencies
Source: https://docs.flowx.ai/5.1/docs/projects/managing-applications/dependencies
Manage dependencies between projects and libraries to enable resource sharing, modular development, and version control across your FlowX applications
Dependencies in FlowX enable projects and libraries to share and reuse resources, fostering modular development and reducing duplication. By establishing dependency relationships, you can access common assets like processes, enumerations, and media files from external libraries while maintaining version control and stability.
## Overview

Dependencies allow you to:
* **Share resources** across projects and libraries without duplication
* **Maintain version control** by referencing specific builds
* **Create modular architectures** with reusable components
* **Ensure stability** through controlled dependency management
* **Build hierarchical structures** with library-to-library dependencies
## Types of dependencies
**Project Dependencies** allow projects to reference and use resources from libraries.
### Key Features
* **Library Access**: Projects can add libraries as dependencies to access their resources
* **Build-Specific**: Dependencies reference specific builds of libraries for stability
* **Version Control**: Projects control when to upgrade to newer library versions
* **Resource Availability**: All resources from dependent libraries become available in the project
### Use Cases
* Shared UI components and templates
* Common business processes and subprocesses
* Standardized enumerations and configuration
* Reusable integration workflows

**Library Dependencies** enable libraries to depend on other libraries, creating hierarchical dependency structures.
### Key Features
* **Library-to-Library**: Libraries can now reference other libraries as dependencies
* **Dependency Tree**: Create complex hierarchical structures with multiple levels
* **Resource Inheritance**: Projects gain access to resources from the entire dependency hierarchy
* **Modular Design**: Break down complex functionality into smaller, focused libraries
### Use Cases
* Country-specific processes that use common base libraries
* Shared utility libraries used by multiple specialized libraries
* Hierarchical organization of business domains
* Team-based development with library ownership

## Dependency tree management
### Understanding dependency trees
A **dependency tree** represents the hierarchical structure of dependencies for a project or library. In FlowX 5.1, dependency trees can include multiple levels of library dependencies.

#### Example dependency tree
```
Mortgage Project
├── Enums Library (1.6.0)
├── Integrations Library (2.5.0)
│ ├── Commons Library (1.1.0)
│ └── Enums Library (1.6.0) # Transitive dependency
└── Subprocesses Library (1.3.0)
└── Enums Library (1.6.0) # Transitive dependency
```
### Dependency tree constraints
**Important Constraint**: FlowX 5.1 implements a **single-version constraint** for dependency trees. The same library cannot exist multiple times in a dependency tree with different builds.
#### Allowed scenarios
```
Mortgage Project
├── Subprocesses Library (1.3.0)
│ └── Enums Library (1.6.0)
└── Integrations Library (2.4.0)
└── Enums Library (1.6.0) # ✅ Same version - ALLOWED
```
This scenario is permitted because both references use the same build (1.5.0) of the Enums Library.
#### Blocked scenarios
```
Mortgage Project
├── Enums Library (1.6.0) # Direct dependency
└── Subprocesses Library (1.3.0)
└── Enums Library (1.5.0) # ❌ Different version - BLOCKED
```
This scenario is **blocked** because it would create a version conflict in the dependency tree.
```
Library A (1.0.0)
└── Library B (1.0.0)
└── Library A (1.1.0) # ❌ Circular reference - BLOCKED
```
Circular dependencies are **strictly prohibited** to prevent infinite loops and maintain dependency tree integrity.
### Conflict resolution
When dependency conflicts occur, you have several resolution options:
Update the direct library dependency to a version that uses the required transitive dependency version.
```
# Before (Conflict)
Project → Library A (1.0) → Commons (1.1)
→ Library B (2.0) → Commons (1.2) # Conflict
# After (Resolved)
Project → Library A (1.1) → Commons (1.2) # Updated A to use Commons 1.2
→ Library B (2.0) → Commons (1.2) # Now compatible
```
Create new builds of libraries that include the required dependency versions.
Reorganize your dependency structure to avoid conflicts, potentially by creating intermediate libraries.
## Managing dependencies
### Adding project dependencies
In your project workspace, go to the **Config** tab and select **Dependencies**.
Click **Add Dependency** and select the library you want to add.

Choose the specific build version of the library you want to use.
Only committed builds are available.
FlowX will automatically validate that the new dependency doesn't create conflicts in your dependency tree.
Review the dependency tree preview and confirm the addition. The library's resources will become available in your project.
### Adding library dependencies
Navigate to your library and go to the **Config** tab, then select **Dependencies**.
Click **Add Dependency** and select another library as a dependency.

FlowX will check for potential conflicts, including:
* Version conflicts with existing dependencies
* Circular dependency detection
* Transitive dependency validation
Preview the complete dependency tree to understand all transitive dependencies.
### Updating dependencies
When updating a single dependency:
1. Navigate to the **Dependencies** section
2. Select the dependency to update
3. Choose the new build version
4. FlowX validates the dependency tree for conflicts
5. If conflicts exist, resolve them before proceeding

For complex dependency trees, you may need to update multiple dependencies simultaneously:
1. Plan your update strategy to avoid intermediate conflicts
2. Update dependencies in the correct order (typically from leaf to root)
3. Use the dependency tree view to validate changes
4. Test in a development environment before applying to production

## Resource resolution
### Resource types and references
Different resource types use different referencing mechanisms:
| Resource Type | Reference Method | Example |
| --------------------------- | ---------------------- | ------------------------------ |
| **Process** | Resource Definition ID | `proc_customer_onboarding_123` |
| **Media Library Item** | Resource Definition ID | `media_logo_456` |
| **System/Workflow** | Resource Definition ID | `sys_crm_integration_789` |
| **Enumeration** | Name | `CUSTOMER_TYPES` |
| **Substitution Tag** | Name | `WELCOME_MESSAGE` |
| **Notification Template** | Name | `EMAIL_CONFIRMATION` |
| **Document Template** | Name | `CONTRACT_TEMPLATE` |
| **Configuration Parameter** | Name | `MAX_RETRY_COUNT` |
### Resource precedence rules
When multiple resources with the same name exist in the dependency tree:
Resources from the **highest level** (closest to the project) take precedence.
```
Project (Level 0)
├── Library A (Level 1) - contains ENUM_X
└── Library B (Level 1)
└── Library C (Level 2) - contains ENUM_X
# ENUM_X from Library A (Level 1) is used
```
If resources exist at the same level, the resource from the **newest build** (by build creation date) takes precedence.
The resolution is deterministic and consistent across environments.
**Best Practice**: Avoid duplicate resource names across libraries in your dependency tree to maintain control and predictability over resource usage at runtime.
## Build and deploy considerations
### Build export/import
When exporting or importing builds:
* **All dependent libraries** are included in the export package
* **Transitive dependencies** are automatically resolved and included
* **Version consistency** is maintained across environments
* **Dependency tree structure** is preserved during import
### Runtime behavior
At runtime:
* **Resource resolution** follows the established precedence rules
* **Dependency tree** is flattened for efficient resource lookup
* **Version consistency** ensures predictable behavior
* **Build immutability** guarantees that deployed builds remain stable
## Best practices
### Dependency design
**Keep dependencies modular**: Design libraries with clear, focused responsibilities to avoid monolithic structures.
**Plan your hierarchy**: Design your dependency tree structure before implementation to avoid conflicts later.
**Use semantic versioning**: Follow consistent versioning practices to make dependency management predictable.
**Avoid circular dependencies**: Design your library architecture to prevent circular references.
**Document dependencies**: Maintain clear documentation of library purposes and dependency relationships.
### Version management
**Lock to specific builds**: Always reference specific builds rather than "latest" versions for stability.
**Test dependency updates**: Use development environments to test dependency updates before production.
**Plan upgrade paths**: Consider the impact on dependent projects when updating library versions.
**Maintain backward compatibility**: When possible, maintain backward compatibility to ease library updates.
### Team collaboration
**Establish ownership**: Clearly define which teams own which libraries to coordinate updates.
**Communication protocols**: Establish processes for communicating library changes to dependent teams.
**Shared standards**: Agree on naming conventions and design patterns across library-owning teams.
## Troubleshooting
### Common dependency issues
**Problem**: Cannot add dependency due to version conflicts.
**Solutions**:
* Update existing dependencies to compatible versions
* Create new library builds with compatible dependency versions
* Restructure your dependency hierarchy to avoid conflicts
* Review your dependency tree for optimization opportunities
**Problem**: System prevents adding a dependency due to circular reference.
**Solutions**:
* Analyze your dependency structure to identify the circular path
* Extract common functionality into a separate base library
* Restructure libraries to create a proper hierarchy
* Consider if the circular dependency indicates a design issue
**Problem**: Expected resources are not available after adding dependencies.
**Solutions**:
* Verify the dependency was added with the correct build version
* Check if resources exist in the expected library build
* Review resource name conflicts that might affect precedence
* Ensure the library build contains the expected resources
**Problem**: Build export fails due to dependency problems.
**Solutions**:
* Validate all dependencies are using committed builds (not WIP)
* Ensure all transitive dependencies are available
* Check for missing or deleted library builds
* Review access permissions for all dependent libraries
## FAQ
Yes, libraries can have multiple dependencies, just like projects. Each dependency is managed independently and contributes to the overall dependency tree.
FlowX prevents deletion of libraries that are referenced as dependencies. You must remove all dependency references before a library can be deleted.
No, dependencies must reference committed builds, not WIP (Work in Progress) versions. This ensures stability and prevents issues with changing dependencies.
There's no enforced limit on dependency tree depth, but for maintainability and performance, it's recommended to keep trees reasonably shallow (typically 3-4 levels maximum).
* **Direct dependencies**: Libraries explicitly added as dependencies to your project or library
* **Transitive dependencies**: Libraries that are dependencies of your direct dependencies (automatically included)
1. Establish clear communication channels between teams
2. Plan library updates and coordinate with dependent teams
3. Use development environments to test impact of changes
4. Consider creating shared governance processes for critical libraries
No, FlowX enforces the single-version constraint. If you need a different version of a transitive dependency, you must update the direct dependency that includes it.
# Libraries
Source: https://docs.flowx.ai/5.1/docs/projects/managing-applications/libraries
Libraries are specialized projects that serve as reusable containers for resources that can be shared across multiple projects.

Unlike regular projects, which are intended for creating and managing specific workflows, libraries are designed to house common elements—like processes, enumerations, and media assets—that other projects may rely upon.
This makes libraries a cornerstone for establishing consistency and efficiency across various projects.
#### Key features
* **Resource Sharing**:
* Libraries facilitate the reuse of resources like processes, enumerations, and media assets across different projects. This allows for a more modular design, where commonly used elements are stored centrally.
* Resources in a library can be included in other projects by setting the library as a dependency.
* **Dependencies**:
* A project can add a library as a dependency, meaning it will have access to the resources stored in that library.
* Dependencies are managed through builds; each project can choose a specific version (build) of a library to depend on. This ensures that updates in the library do not automatically impact all projects unless intended.
* **Versioning**:
* Just like projects, libraries can be versioned. Each version of a library captures the state of its resources at a specific point in time.
* This versioning allows projects to lock dependencies to specific library versions, providing stability and predictability during runtime.
#### Managing libraries
1. **Creating a Library**:
* Libraries can be created similarly to projects. The creation process involves setting a name, defining the resources it will contain, and managing its configuration settings.
* Once created, resources can be added to the library incrementally, allowing for iterative development.

2. **Managing Library Resources**:
* Users can create, edit, delete, or version resources within the library. Resources include processes, enumerations, media files, and other elements that can be referenced by projects.
* A library can have multiple versions, each capturing the resource state. This allows backward compatibility with older project builds relying on specific library versions.

3. **Adding Library Dependencies to Projects**:
* In the project workspace, libraries can be set as dependencies under the **Dependencies** section.
* Users can select which build version of the library to reference. This allows projects to control how library changes affect them by choosing to update the dependency to newer library builds as needed.
Libraries can be added as a dependency only to Work-In-Progress (WIP) project versions.
#### Library build process
* **Builds in Libraries** are tagged versions, allowing a snapshot of the current library resources to be used by projects. Each build in a library captures the state of all its resources.
* Projects referencing a library can specify the exact build to use, ensuring that changes to the library do not inadvertently impact dependent projects.

#### Use cases
1. **Centralized Resource Management**:
* Organizations that need to maintain a standard set of processes or other resources can use libraries to store these centrally. Each project can then use the same library resources, ensuring consistency.
2. **Version-Controlled Dependency Management**:
* By utilizing builds and versioning within libraries, projects can safely depend on specific versions, reducing the risk of unexpected behavior due to resource updates.
3. **Streamlining Updates Across Projects**:
* When an update is required across multiple projects that rely on the same resources, it can be done by updating the library and releasing a new build. Each project can then choose to update to the new build when ready.
## Best practices
* Use libraries for resources that need to be standardized across multiple projects.
* Carefully manage dependencies and choose specific builds to avoid unexpected runtime behavior.
* Leverage versioning to maintain a clear history of resource changes, allowing rollbacks if necessary.
Libraries thus play a crucial role in modularizing the development process, enabling reusable and maintainable components across different projects. This leads to improved project organization, reduced redundancy, and simplified resource management.
## FAQs
**A:** In the project workspace, navigate to the **Dependencies** section. Select the library you want to add, choose the specific build version, and confirm. Once added, the resources from that library will be available for use within the project.
**A:** When a resource in a library is updated, dependent projects will not be affected unless the library build they reference is updated to a newer version. This allows projects to maintain stability by controlling when updates are adopted.
**A:** Yes, a project can depend on multiple libraries. Each library can be referenced by selecting the desired build version. However, ensure that dependencies are managed carefully to avoid conflicts or redundancy.
**A:** Before switching to a newer library build, test it in a development or staging environment to ensure compatibility. If everything functions as expected, update the project’s dependency to the new build in the **Dependencies** section.
# Versioning
Source: https://docs.flowx.ai/5.1/docs/projects/managing-applications/versioning
Easily track and manage your project's evolution with comprehensive versioning features.
Versioning enables you to manage changes, track progress, and collaborate effectively by capturing snapshots of your project's state at any point in time. The versioning system ensures that resources are grouped and tracked as part of the project, providing a comprehensive and structured approach to development.
## Project version
A **Project Version** is an editable snapshot of your project at a specific moment. It contains all resources (e.g., processes, integrations, templates) and configurations grouped under the project.

The tab above provides a summary of all accessible project versions and branches available in the current environment.
Resources within a project (e.g., processes, integrations, templates) are versioned as part of the project, not individually.
Certain resources are considered **global** and are not included in project-specific versioning. These resources are shared across projects and environments to maintain consistency and simplify their management. Examples of such global resources include:
* **Themes**: Predefined design themes used across multiple projects.
* **Fonts**: A library of fonts accessible globally.
* **Global Media Files**: Shared media assets.
* **Out of Office Settings**: Configurations for user availability and auto-responses that are managed at the platform level.
***
## Interface overview
### Left panel: version details
* **State**: Displays the current state of the version (e.g., `draft`, `committed`).
* **Branch**: Indicates the currently selected branch (e.g., `main`).
* **Last Saved By**: Shows the username of the person who last saved changes (e.g., "JS").
* **Last Saved At**: Displays the timestamp of the most recent save (e.g., "23 Jan 2025 at 10:11 AM").
* **ID**: A unique identifier for the version, with a copy button for convenience.
### Center panel: branch and commit graph
The graph visually organizes the project’s versioning structure, showing relationships between branches and commits.
* **Graph View**:
* Provides a visual representation of branches and commits.
* **Main Branch** (blue): The main development branch.
* **Secondary Branches** (yellow): Feature or development branches such as `branch3`, `branch4`, and `secondary_branch`.
* **Markers**:
* **Dotted Circles**: Represent draft versions.
* **Solid Circles**: Represent submitted versions.
### Right panel: submit messages
* Displays a chronological list of commit messages for the selected branch.
* **Details**:
* Commit messages (e.g., `v1`, `commit_secondary_branch`) are aligned with their respective branches.
* Each commit shows:
* The user responsible (e.g., "JS").
* The state of the commit (e.g., `draft`, `commited`).
### Top bar: global controls
* **Project Name**: Displays the current project name (`Docs_customer_onboarding`).
* **Branch Selector**: Dropdown to navigate between branches.
* **State Indicator**: Highlights the state of the current branch (e.g., `draft` for `main`).
* **Submit Changes to Version**: Button for submitting draft changes globally.
* **Config/Runtime Tabs**:
* **Config**: Likely for managing version configuration.
* **Runtime**: Likely for runtime options or monitoring.
***
## Core versioning operations
The table below summarizes key versioning operations and their functions:
| Operation | Description |
| ------------------- | ---------------------------------------------------------------------------------------- |
| **Create Project** | Creates a project and its initial draft version. |
| **Create Resource** | Adds a new resource in draft status to the current project version. |
| **Edit Resource** | Creates a deep copy of a resource for editing if the original is COMMITTED. |
| **Commit Project** | Updates the statuses of the project, its manifest, and resources to COMMITTED. |
| **Discard draft** | Deletes draft resources and the draft project version. |
| **Start New draft** | Creates a new draft version by copying the last COMMITTED project version. |
| **Create Branch** | Creates a new branch and a corresponding draft project version from the selected commit. |
### Detailed steps for operations
* A new project is created in draft (WIP) state.
* An initial draft project version is automatically generated.
* Adds a resource in draft status to the current project version.
* Updates the project manifest to include:
* **UUID** of the new resource.
* `last_change_time`: Set to the current timestamp.
* `last_committed_time`: Null (since the resource is WIP).
* **Scenario A**: Editing a draft Resource
* No new resource version is created.
* Updates the project manifest:
* `last_change_time`: Current timestamp.
* **Scenario B**: Editing a `COMMITTED` Resource
* A deep copy of the `COMMITTED` resource is created as draft.
* Updates the project manifest:
* Links to the new draft resource.
* `last_change_time`: Current timestamp.
* Commits the current draft project version:
1. **draft Resources**:
* Status: Updated to `COMMITTED`.
* `last_change_time` and `last_committed_time`: Set to the current timestamp.
2. **Project Version**:
* Status: Updated to `COMMITTED`.
* Deletes draft resources and the draft project version.
* Available only when there are changes after the last commit.
* Creates a new draft project version by copying:
* The last `COMMITTED` project version.
* Its manifest, linking to `COMMITTED` resources.
* Creates a new branch and draft project version:
* Copies the selected `COMMITTED` project version.
* Updates the manifest to reference existing `COMMITTED` resources.
***
## Lifecycle of a project version
1. **Create Project**: Automatically starts with a draft (work-in-progress) project version.
2. **Modify Resources**: Draft (WIP) resources can be edited directly, while `COMMITTED` resources are cloned into draft (WIP) before editing.
3. **Commit Changes**: Promotes the project version and its resources to `COMMITTED` status.
4. **Start New WIP**: Allows iterative development by creating a new draft version.
5. **Create Branch**: Enables parallel development with isolated draft versions.
***
## Starting a new version (draft)
You can initiate a new draft (work-in-progress) version while keeping the submitted version intact. A draft version is automatically created under the following circumstances:
* **New Project**: When you create a new project, a corresponding draft version is initiated. This ensures that ongoing changes are tracked separately from the submitted version.

* **New Branch Creation**: The creation of a new branch in the system also triggers the creation of a draft version (from a committed version only). This streamlines the process of branching and development, allowing for parallel progress without impacting the main submitted version.

* **Manual Draft Version Creation**: You have the flexibility to initiate a new draft version manually. This is particularly useful when building upon the latest version available on a branch.

***
## Advanced features
### Submitting changes
You can submit changes exclusively on work-in-progress (WIP) versions. Changes can be submitted using the designated action within the version menu. Upon triggering the submission action, a modal window appears, prompting you to provide a commit message.
A string of maximum 50 characters, mandatory for submission. Only letters, numbers, and characters \[] () . \_ - / are allowed.
The placeholder indicating work-in-progress is replaced with a "submitted" state within the graph view.
#### Updating submit messages
You have the flexibility to modify submit messages after changes are submitted. This can be accomplished using the action available in the version menu.
### Creating a new branch
Using versioning you can work on a stable copy of the project, isolated from ongoing updates by other users. You can create a new branch starting from a specific submit point.
The initiation of new branches is achieved using the dedicated action located in the left menu of the chosen submit point (used as the starting point for the branch).
A string of maximum 16 characters, mandatory for branch creation.
### Merging changes
You can incorporate updates made on a secondary branch into the main branch or another secondary branch. To ensure successful merging of changes, adhere to the following criteria:
* You can merge the latest version from a secondary branch into either its direct or indirect parent branch.

* Upon triggering the merge action, a modal window appears, giving the possibility to make the following selection:
* **Branch**: Displays the branches to which the current branch is a child (direct or indirect).
* **Message**: A string of maximum 50 characters (limited to letters), numbers and the following characters: \[] () . \_ - /.

The graph representation is updated to display the new version on the selected parent branch and the merged version is automatically selected, facilitating further development and tracking.
### Managing conflicts
The Conflict Resolution and Version Comparison feature provides a mechanism to identify and address conflicts between two process versions that, if merged, could potentially disrupt the integrity of a project.
The system displays both the version to be merged and the current version on a single screen, providing a clear visual representation of the differences. Conflicts and variations between the two versions are highlighted, enabling users to readily identify areas requiring attention.

Unless specified otherwise, changes from the source branch will be prioritized.
Not all changes are considered conflicts, changes in node positions are not treated as conflicts. Primary causes lie in identifying differences within business rules, expressions, and other scripts.
#### Merging without conflicts
Easily merge secondary branches into the main branch or other branches when no conflicts are detected. The updated merge modal includes:
* A clean, streamlined interface for branch selection.
* A mandatory, validated commit message field (max 50 characters).
* Real-time feedback for successful merges and updates to the branching graph.

#### Advanced conflict detection
The new **Conflicts Detected Modal** provides a detailed overview of conflicting changes, with features such as:
* Clear grouping by resource type (e.g., Processes, Enumerations, Media Library).
* Scrollable lists and clickable entries to resolve conflicts efficiently.
* A comprehensive comparison of source and target branch differences for context.

#### Resource-level conflict resolution
Resolve conflicts directly at the resource level with an intuitive interface:
* **JSON Comparisons:** Visualize differences with color-coded highlights (source: yellow, target: blue).
* **Navigation Support:** Quickly jump between differences for efficient resolution.
* **Progress Tracking:** Mark resources as “Reviewed” or “Seen” to monitor resolution progress.


#### Flexible merge overrides
Handle unresolved conflicts with the **Merge Anyway** option, which provides flexibility while maintaining control over outcomes:
* A confirmation modal explains how unresolved conflicts will be handled (e.g., prioritizing source branch changes).
* Allows merging to continue even when some conflicts remain unresolved.

### Read-only state
The Read-Only State feature allows you to access and view submitted versions of your projects while safeguarding the configuration from unintended modifications. By recognizing the visual indicators of the read-only state, you can confidently work within a controlled environment, ensuring the integrity of project's process definitions.

***
## Builds
* You can create multiple versions of a project committed before creating a build. You can create a build for any of the committed app versions;
* Once you create a build, you can't edit the contents of the build (enumerations, substitution tags, integrations). You'll need to create a new app version.
***
## Audit view
The "Open Audit View" provides you with a detailed audit log of actions related to work-in-progress (WIP) versions of a process. The primary goal is to ensure transparency and accountability for actions taken before the commit or save process.
You can quickly access and review the history of WIP versions, facilitating efficient decision-making and collaboration.

# Resources
Source: https://docs.flowx.ai/5.1/docs/projects/resources
Overview of Global and project resources, including their usage, dependencies, promotion, and configuration within the platform.
## Overview
Resources are categorized into **Global Resources** and **Project Resources**. Each type has unique characteristics that define its usage, dependencies, and promotion between environments. Understanding these distinctions ensures efficient project development, management, and deployment.
***
## Global resources
Global Resources are designed for **reuse across multiple projects** or business contexts.
These resources are often organized within **libraries**, enabling consistency and efficiency by providing a central repository of shared components.
### Key characteristics
* **Reusable**: Common design elements, themes, fonts, and other assets can be used in multiple projects.
* **Independent**: Global Resources exist outside individual projects, making them adaptable across different business cases.
* **No Dependencies**: These resources are not project-specific, making them versatile for broad use cases. Projects can reference libraries without requiring modifications to the core resources.
### Examples
#### Design assets
* **Themes**: Standardized themes for consistent styling.
* **Global Media Library**: Shared images, icons, and other assets.
* **Fonts**: Reusable font families to maintain branding.
#### Plugins
* **Languages**: Language packs or configurations that support multilingual capabilities across projects.
* **Templates**: Notification and document templates managed at a global level.
* **Out-of-Office Settings**: Platform-wide absence management settings.
#### General settings
* **Users**: User accounts and profiles that can be accessed across multiple projects.
* **Roles**: Defined roles that determine user permissions and access levels.
* **Groups**: User groupings that facilitate collective management and permissions.
* **Audit Log**: Logs that track changes and activities within the platform for security and compliance purposes.
#### Libraries
Organized resource containers including **enumerations**, **substitution tags**, and **CMS components** for multi-project use.
### Promotion workflow
* **Library Promotion**: Global Resources within libraries are promoted separately from projects. They are typically **imported into the Designer UI** in target environments as part of their own libraries.
* **Configuration Management**: When libraries are promoted, existing configurations, such as **generic parameters**, are replaced by project-level configurations in the target environment.
***
## Project resources
Project Resources are specific to a **business use case**. Unlike Global Resources, they belong to a single project, allowing for custom configurations and dependencies on libraries.
### Key characteristics
* **Project-Specific**: Tailored to a single project’s needs.
* **Library Dependencies**: Can reference and extend Global Resources.
* **Configurable**: Parameters can be updated in upper environments through environment variables or overrides.
### Examples
1. **Processes**: BPMN workflows customized for the project’s business logic.
2. **CMS Components**: Project-specific enumerations, substitution tags, and media items.
3. **Task Management**:
* **Views**: Configurable interfaces to display task-related data based on process definitions.
* **Stages**: Stages that allow task progression through different statuses.
* **Allocation rules**: Define how tasks are assigned to users or teams.
4. **Integration Designer**:
* **Systems**: A system is a collection of resources—endpoints, authentication, and variables—used to define and run integration workflows.
* **Workflows**: A workflow defines a series of tasks and processes to automate system integrations. Within the Integration Designer, workflows can be configured using different components to ensure efficient data exchange and process orchestration.
5. **Configuration Parameters**: Project-specific rendering settings like `applicationUuid`, `locale`, `language`, and `process parameters`.
6. **Project Builds**: Builds represent finalized versions of the project, including all associated metadata and linked library versions.
7. **Project Settings**: Configure various aspects of a project like platform type, default theme, formatting, etc.
### Promotion workflow
* **Build-Based Promotion**: Only **builds** (not commits) are promoted.
* **Design Asset Handling**: Referenced assets are created if missing but are not updated during import.
* **Configuration Parameters Overrides**: Environment variables replace default values in upper environments.
***
## Resources usage tracking
Track where resources are used to prevent unintended changes and ensure stability.


The **Resource Usage Tracking** feature provides real-time visibility into where and how resources are being used, preventing unintended changes and ensuring system stability.
**Key features**
* **View Dependencies** before making updates or deletions.
* **Understand Resource Interactions** across projects.
* **Prevent Issues** when modifying critical elements.
Each resource type includes a **Usage Overview modal**, which updates dynamically as references change.
### Process usage
1. **Access Usage Overview**
* Click the **Usage Overview icon** in the **Process List**.
2. **Usage Modal Details**
* Displays references by resource type (e.g., Process, UI Template, Workflow).
* Provides detailed context, including node configurations.
#### Deleting a process with references
* A **confirmation modal** warns users before deletion.
* The modal lists all affected references.
### Enumeration usage
1. **Access Usage Overview**
* Click the **Usage Overview icon** in the **Enumeration List**.
2. **Usage Modal Details**
* Shows where the enumeration is referenced (e.g., UI Designer, Data Model, Workflow)
### Media library usage
1. **Access Usage Overview**
* Click the **Usage Overview icon** in the **Media Library List**.
2. **Usage Modal Details**
* Displays where media files are used (e.g., UI Template, Process).
***
### Managing dependencies & tracking changes
* **Dynamic Updates**: Reference lists update automatically as resources change.
* **Dependency Checks**: Users see affected resources before deletion.
* **Bidirectional Tracking**: The **Usage Overview modal** also shows resources referenced **inside** a process.
## Copying resources
Use the **Copy to Another Project** feature to transfer resources while maintaining dependencies.

Choose the target project or library.

Select the target branch.

The system displays referenced resources and validates dependencies.


If necessary, copy all substitution tags from a project to the target project. Existing substitution tags in the target project with the same key will not be overwritten.


If an identifier already exists in the destination, you'll be prompted to either:
* **Keep Both**: Create a duplicate.
* **Replace**: Overwrite existing resource.
* **Use Destination**: Keep existing resource without copying.
**Handling conflicts:** The system automatically detects duplicate identifiers and provides a clear choice to avoid unintended overwrites.
### Supported resource types
The copy feature is available for the following resources:
* **Process definitions** (including referenced resources)
* **Systems**
* **Workflows**
* **Enumerations** (including child enumerations)
* **Media Library items**
* **Notification** and **Document** templates
## Duplicating resources
The **Duplicate Resource** feature allows users to quickly copy resources within the same project or library.
### Supported resource types
* **Processes**
* **Enumerations**
* **Media files (including Global media library files)**
* **Notification templates**
* **Document templates**
* **Views**
### Steps
Duplicate options are available from each resource’s three-dot menu (table row & secondary navigation).

When selected, a **"Duplicate" modal** opens with a prefilled name: *Copy of \[Resource Name]* (which can be edited).

***
## Resources overrides
Resource overrides enable **localization and customization** of core business applications across multiple regions while maintaining centralized updates from headquarters.
Resource overrides are **only available at the project level**. Libraries cannot contain resource overrides.
### Why use resource overrides?
Resource overrides are essential for organizations that need to:
* **Build and maintain a business application HQ** that expands to multiple countries
* **Customize the core application** for each country's specific requirements
* **Keep receiving updates from HQ** without losing local customizations
Think of resource overrides as a way to maintain a "master copy" at headquarters while allowing each region to adapt specific business logic, compliance requirements, or local regulations.
***
## Managing resource overrides
Resource overrides are configured through the **Dependencies** page in your project's main navigation. This interface provides comprehensive management capabilities for all your library resource customizations.
### Accessing resource overrides
From your project's main menu, click on **Dependencies** to access the configuration interface.
The Dependencies page contains two tabs:
* **Dependencies**: Manages project library dependencies
* **Resource Overrides**: Configures and manages all resource overrides
### Resource overrides interface
The Resource Overrides tab displays all configured overrides in a comprehensive table with the following columns:
* **Resource Type**: The type of resource being overridden (Process, Workflow, Enumeration)
* **Original Resource**: The name of the library resource being overridden
* **Original Library**: The library containing the original resource
* **Override Resource**: The name of the resource used as the override
* **Override Source**: The source of the override resource (library name or "Local" for project resources)
* **Actions**: Edit and delete options for each override

### Adding a new override
Click the **+** button to add a new editable row at the top of the table.

Choose from the available resource types:
* **Process**
* **Workflow**
* **Enumeration**
Changing the resource type will clear any selections in the Original Resource and Override Resource fields.
Select the library resource you want to override:
* Search through all available resources of the selected type
* Resources are grouped by their source library
* Already overridden resources appear disabled with a tooltip: *"An override already exists for \[resource name]"*
The **Original Library** field automatically populates with the selected resource's library.
Choose the resource to use as the override:
* Available resources include both local project resources and library resources
* Resources are grouped by source (project or library)
* Must match the selected resource type
The **Override Source** field automatically shows "Local" for project resources or the library name for library resources.
* **Save**: Validates required fields and persists the override
* **Cancel (X)**: Discards the new override without saving
Success message: "Resource override has been successfully added."
### Updating an existing override
Click the **Edit** icon on any override row to make it editable.
Update any of the override configuration fields following the same validation rules as adding a new override.
* **Save**: Applies your changes to the override
* **Cancel (X)**: Reverts to the original configuration
Success message: "Resource override has been successfully updated."
### Deleting an override
Deleting an override will revert the project to using the original library resource at runtime.
Click the **Delete** icon on the override you want to remove.
A confirmation modal appears asking you to confirm the deletion.
Click **Confirm Delete** to permanently remove the override.
Success message: "Resource override has been successfully deleted."
### Export and import with overrides
Resource overrides are automatically included when exporting and importing project versions or builds.
#### Export behavior
When exporting a project version or build:
* A JSON file containing all resource overrides is included in the export ZIP
* Override definitions include complete resource mapping information
* Both original and override resource metadata are preserved
#### Import behavior
When importing a project with resource overrides:
* All override configurations are restored from the JSON file
* Dependencies on referenced libraries are validated
* Override mappings are reestablished in the target environment
Always verify that required library dependencies are available in the target environment before importing projects with resource overrides.
### Enumeration override behavior
Enumerations have special handling due to their usage patterns across the platform:
#### Current enumeration resolution
* Enumerations are resolved **by name** at runtime
* If multiple enumerations exist with the same name in the dependency tree:
* The closest one to the project root is chosen
* If multiple exist at the same level, the one from the build with the most recent creation date is selected
#### Enumeration usage contexts
* **UI Components**: Radio buttons, dropdowns, and multi-select components reference enumerations by name
* **Kafka Actions**: Enumeration names are embedded in message request bodies
* **Data Sources**: Enumeration mapping in endpoint configurations for value transformation
* **CMS Translation**: Both Kafka and REST requests use enumeration names for translation services
**Current limitation**: For enumeration value transformation between different system codes, the enumeration must exist in the same library or project as the system configuration. Resource overrides will not work for cross-library enumeration transformations.
### Error handling and validation
The interface provides comprehensive error handling:
#### Validation errors
* **Required field missing**: *"This field is required"*
* **Duplicate override**: *"An override already exists for \[resource name]"*
#### System errors
* **Save error**: *"An error occurred while saving resource override. Please try again later."*
* **Update error**: *"An error occurred while updating resource override. Please try again later."*
* **Delete error**: *"An error occurred while deleting resource override. Please try again later."*
### Empty state
When no resource overrides are configured, the interface displays an empty state with guidance on how to create your first override.
***
## Technical concepts
Understanding the technical implementation of resource overrides helps ensure successful customization while maintaining system integrity.
### How resource overrides work
Resource overrides replace library resources at runtime while preserving the original library structure and dependencies.
#### Process overrides
When overriding processes from libraries:
* **Input/output mapping**: Ensure processes properly map input and output data
* **Node compatibility**: The override process must maintain compatibility with the original process structure
* **Data model validation**: Overrides are validated against the data model and number of nodes
You cannot completely replace a process with an entirely different process. The override must maintain the core structure and interface of the original process from the library.
#### Complex process scenarios
For processes with **multiple start nodes and end nodes**:
* Validation occurs on both data model structure and node count
* Each start/end node must have a corresponding match in the override
* Business logic can be customized while maintaining the process interface
#### Enumeration and workflow overrides
Unlike processes, **enumerations and workflows** offer more flexibility:
* Can override any enumeration with any other enumeration
* Workflow overrides allow complete replacement of business logic
* Useful for country-specific value lists and decision trees
### Override workflow
Ensure your project has a dependency on the library containing the resource to override.
Navigate to the library resource you want to customize for your project.
Use the override functionality to create a project-specific version while maintaining the library reference.
Modify the override to meet local requirements while preserving input/output compatibility.
Validate that the override works correctly with call activities and other dependent resources.
### Current limitations
Be aware of these limitations in the current implementation:
* **Runtime error detection**: Some overrides with errors may only be discovered at runtime rather than design time
* **Merge conflict visibility**: When comparing JSON configurations, you'll see UUIDs instead of human-readable resource names
* **Dynamic list updates**: If library resources change significantly, they may not appear in the available override list
* **Dependency validation**: If a start node is deleted in a newer library version and doesn't match your override dependency, the system will fail at runtime
### Best practices
* **Design with overrides in mind**: When creating library processes, consider which elements might need localization
* **Maintain interface compatibility**: Ensure overrides preserve the original process's input/output contract
* **Test thoroughly**: Validate overrides in a staging environment before production deployment
* **Version management**: Keep track of library versions and test override compatibility with updates
* **Documentation**: Document the specific business reasons for each override to help with maintenance
Start with a well-designed reference application in your library, then create minimal, targeted overrides rather than extensive modifications. This approach makes it easier to receive and integrate updates from headquarters.
***
## Use cases and examples
Resource overrides are particularly valuable in enterprise scenarios where centralized governance meets local customization needs.
### Multi-country application deployment
Consider a financial services company with headquarters developing a core onboarding application that needs to be deployed across different countries, each with unique requirements:
#### Architecture overview
The **reference application** (master copy) is maintained in a **library** at headquarters, containing:
* Core business logic
* Standard processes (e.g., client onboarding, overdraft management)
* Common UI components and workflows
* Base data models and enumerations
Each country has its own **project** with:
* Dependencies on the master library
* Country-specific overrides for local requirements
* Custom business rules and compliance logic
Country projects start processes using **call activities** that:
* Reference the master processes from the library
* Apply local overrides where needed
* Handle country-specific data transformations
#### Localization examples
Different countries often require customized logic for:
* **Exchange rates calculation**: Each country may use different formulas or data sources
* **Privacy policy collection**: Some countries have stricter data protection requirements
* **Compliance workflows**: Regulatory requirements vary by jurisdiction
* **Authentication methods**: Local preferences for OTP, biometric verification, etc.
### Common override scenarios
* **Regulatory compliance**: Adapting processes to meet local legal requirements
* **Language localization**: Customizing enumerations and UI elements for different markets
* **Business logic variations**: Implementing region-specific calculation methods or validation rules
* **Integration differences**: Connecting to different local systems or service providers
* **User experience adaptations**: Modifying workflows to match local business practices
# Active policy
Source: https://docs.flowx.ai/5.1/docs/projects/runtime/active-policy
The Active policy defines the strategy for selecting which build version of a project is active in the runtime environment.
This feature plays a key role in ensuring that the correct [**project**](../managing-applications/application) configuration is executed, managing how processes interact with specific builds, and controlling how changes propagate through environments. The active policy determines which project version is currently "live" and dictates how updates and new builds are adopted.

Active Policy supports both global policies that apply to all users and specific policy overrides for individual users or roles, allowing independent testing of different builds or branches.
## Key concepts
### Active build
* The active build is the currently selected version of a project that is deployed in the runtime environment. It is the version that all process executions will reference when initiated.
* While a global policy applies to all users by default, individual policy overrides can specify different active builds for specific users or roles.

### Policy types
* **Latest on Branch**: Configures the project to run the latest version on a specific branch. This is useful for environments like development or testing, where ongoing changes need to be reflected in real-time.
* **Build**: Points to a specific build from the available builds for the project. This policy ensures that only the selected build is used, preventing unexpected updates. It is typically used for UAT and Production environments.
### Policy hierarchy
* **Global Policy**: The default policy that applies to all users unless overridden.
* **Policy Overrides**: User-specific or role-specific policies that take precedence over the global policy for targeted users.
* Policy overrides enable independent testing of different builds or branches without affecting other users.
### Version control and flexibility
* Active Policy provides flexibility by allowing different users to work with different build versions simultaneously.
* By managing both global policies and overrides, you control which changes go live for which users and when, allowing for seamless testing and controlled rollouts.
## Global policy
The Global Policy section defines the default active policy that applies to all users unless specifically overridden by individual policy overrides.

Go to your project's **Runtime Settings** and select the **Active Policy** tab.
In the **Global Policy** section, choose your policy type:
* **Latest on Branch**: Always use the latest version on the selected branch
* **Build**: Usa specific build from the available builds for the project
Select the appropriate branch and build version based on your policy choice.
Click **Update** to apply the global policy changes.
The policy takes effect immediately for all users without specific overrides.
## Policy overrides
Policy Overrides allow you to define specific active policies for individual users or roles, enabling independent testing of different builds or branches without affecting the global policy.

Define policies for specific users or roles to simulate conditions and test branch behavior independently from the global policy.
### Managing policy overrides
The Policy Overrides section provides comprehensive tools for creating, managing, and monitoring user-specific and role-specific active policies.
#### Override table structure
The policy overrides are displayed in a table with the following columns:
* Override Type: Specifies whether the override applies to a **Username** or **Role**.
* Applies To: Indicates the specific Runtime User (by username) or Runtime Role (by role name) that this policy override applies to.
* Policy: Specifies the policy type to use for the override.
* Branch/Build Version: Specifies the branch or build version to use for the override.
* Priority: Specifies the priority of the override.
* Status: Shows whether the override is **Active** or **Inactive**.

#### Search and filter
Use the search functionality to quickly locate specific overrides:
* **Search by Username**: Enter a username to filter overrides for specific users
* **Search by Role**: Enter a role name to filter overrides for specific roles
* The search filters the table in real-time as you type
Click the **Add** button (+ icon) to create a new policy override.
Select whether the override applies to a **Username** or **Role**:
* **Username**: Choose a specific user from the dropdown
* **Role**: Select a role from the available options
Choose the policy type:
* **Latest on Branch**: Select the branch to use
* **Build**: Choose a specific build version
Assign a priority number to handle conflicts when multiple overrides could apply.
Priority is mandatory for role-based overrides and must be unique across all role overrides.
Lower numbers = higher priority. Use priority 0 for the most critical overrides.
Check **Enable this override** to activate it immediately, or leave unchecked to create it in an inactive state.
Click **Create Override** to save the new policy override.
The override appears in the table and takes effect immediately if enabled.
#### Override management actions
Each override in the table provides several management options:
**Edit Override**
* Click the edit icon to modify override settings
* Update policy type, target build/branch, or priority
* Changes take effect immediately upon saving
**Contextual Menu Actions**
* **Activate/Deactivate**: Toggle the override on or off without deleting it
* **Delete**: Permanently remove the override
Deleting an override immediately reverts affected users to the global policy. Ensure this change is intentional.
## Key features
### Environment-specific control
* Each environment can have its own global policy and set of policy overrides
* Control what version of the project runs for different user groups at each stage of development
### User-specific testing
* Policy overrides enable individual users or roles to test different builds independently
* Developers can work and test their ongoing work simultaneously without conflicts
* QA teams can test specific builds while production users remain on stable versions
### Priority-based resolution
* When multiple overrides could apply, priority determines which takes precedence
* Fine-grained control over policy application in complex scenarios
* Clear hierarchy: User overrides > Role overrides > Global policy
### Rollback capability
* Easily revert to previous builds by updating the global policy or specific overrides
* Quick rollback minimizes disruption and maintains system stability
* Independent rollback for specific users without affecting others
### Branch-specific management
* Support for branch-based policies in both global settings and overrides
* Parallel development with different active branches for different user groups
* Flexible testing scenarios across multiple development streams
## Benefits
* **Controlled Rollouts**: Gradual deployment to specific users or roles before wider release
* **Independent Testing**: Users can test different builds simultaneously without conflicts
* **Enhanced Stability**: Risk mitigation through targeted deployment and easy rollback
* **Flexible Development**: Support for parallel development streams and testing scenarios
* **User-Centric Control**: Granular policy management at the user and role level
* **Priority Management**: Clear resolution when multiple policies could apply
## Permissions and access control
Active Policy management requires appropriate permissions to ensure secure and controlled access to policy configuration.
Access to Active Policy settings should be strictly controlled as changes can affect production environments and user experience.
### Required permissions
* **View Active Policy**: Required to view current global policy and policy overrides
* **Manage Global Policy**: Required to modify the global active policy settings
* **Manage Policy Overrides**: Required to create, edit, activate/deactivate, and delete policy overrides
* **Admin Access**: Full access to all active policy features and settings
### Permission enforcement
* Unauthorized actions are blocked with clear denial messages
* All policy changes are audited with user identification and timestamps
* Role-based access ensures users can only perform actions within their authorization level
Contact your system administrator if you need additional permissions to manage active policies.
## Technical details
### Policy resolution hierarchy
When a user accesses the runtime environment, the system resolves their active policy using this hierarchy:
1. **User-specific overrides** (highest priority)
2. **Role-specific overrides** (if no user override exists)
3. **Global policy** (default fallback)
### Priority-based override resolution
* When multiple role overrides could apply to a user, the override with the lowest priority number takes precedence
* User-specific overrides always take precedence over role-based overrides regardless of priority
* Priority numbers must be unique for role-based overrides and are mandatory
* Priority is particularly important when users are assigned multiple roles, ensuring deterministic policy resolution
* Priority numbers help resolve conflicts in complex role hierarchies
In scenarios where a user has multiple roles (e.g., DEVELOPER and QA\_TESTER), the system uses the role override with the lowest priority number to determine their active policy.
### Project context and resource references
* The active policy system determines how resource references are handled during process execution
* At runtime, the system identifies the active build based on the resolved policy for each user
* Ensures correct resource definitions are used based on user-specific or global policies
### Metadata and versioning
* Each policy (global and overrides) includes comprehensive metadata:
* Build ID and version tags
* Branch references and commit information
* User/role assignments and priority settings
* Creation and modification timestamps
### Audit and monitoring
* All policy changes are logged with detailed audit information:
* User performing the action
* Timestamp of the change
* Before and after values
* Action type (create, update, delete, activate, deactivate)
* Audit logs are accessible to authorized users for compliance and troubleshooting
### Storage and management
* Active policies and overrides are stored separately from build data
* Policy changes don't affect build integrity
* Efficient policy resolution at runtime with minimal performance impact
* Scalable architecture supports complex override scenarios
## Example use cases
### Scenario 1: Feature testing with user overrides
A development team collaborates on a project where all features are merged into the `main` branch.
To support this workflow, set a policy override for each developer, pointing to the feature branch they are currently working on. When a developer merges their branch, update their override to either deactivate it or assign it to their next active feature branch. This approach ensures developers can test their work in isolation without impacting the main environment or other users.
Set the global policy to use the latest build on the `main` branch. This ensures all users without overrides receive the most up-to-date production version by default.
Set a policy override for each developer, assigning it to the feature branch they are currently working on:
* **Override Type**: User
* **Applies To**: Individual developer (e.g., `alice@company.com`)
* **Policy**: Latest on Branch
* **Branch**: Developer's active feature branch (e.g., `feature/alice-new-payment-flow`)
* **Priority**: 1
When a developer merges their branch, update their override to either:
* **Deactivate** the override if no new feature branch is active, or
* **Reassign** the override to the next feature branch they are working on
This approach ensures each developer can test their changes independently, and their override always reflects their current work.
Developers can now test the new feature while production users continue using the stable build.
No impact on production users during feature development and testing.
### Scenario 2: Gradual rollout with priority management
Rolling out a new version to different user groups:
Create high-priority override for QA team:
* **Role**: `QA_TESTER`
* **Policy**: Build `v2.2.0-rc1`
* **Priority**: 0 (highest)
Create override for beta users:
* **Role**: `BETA_USER`
* **Policy**: Build `v2.2.0-rc1`
* **Priority**: 1
After successful testing, update the global policy to `v2.2.0` and remove overrides.
Controlled rollout minimizes risk and ensures thorough testing.
### Scenario 3: Emergency rollback
Quickly roll back from a problematic build by downgrading the global active policy:
A critical issue is discovered in the current production build `v2.3.0`.
Update the global active policy to point to the previous stable build (e.g., `v2.2.5`).
All users will immediately use the stable build, ensuring a consistent and safe rollback.
After resolving the issue, update the global policy to the new stable build (e.g., `v2.3.1` or a fixed `v2.3.0`).
For emergency rollbacks, prefer downgrading the global active policy instead of using overrides. This approach is simpler, avoids confusion, and ensures all users are aligned on the same stable version.
## Conclusion
The Active Policy feature in FlowX.AI provides comprehensive control over project version management through both global policies and granular policy overrides. This dual-layer approach enables:
* **Flexible Testing**: Independent testing of different builds and branches by different user groups
* **Controlled Deployment**: Gradual rollouts with priority-based conflict resolution
* **Enhanced Stability**: Quick rollback capabilities and isolated testing environments
* **User-Centric Management**: Granular control at both user and role levels
By combining global policies with targeted overrides, Active Policy ensures that the right users access the right project versions at the right time, making it an essential tool for modern development and deployment workflows.
Start with simple global policies and gradually introduce overrides as your testing and deployment needs become more complex.
# Failed process start (exceptions)
Source: https://docs.flowx.ai/5.1/docs/projects/runtime/active-process/failed-process-start
Exceptions are types of errors meant to help you debug a failure in the execution of a process.

Exceptions can be accessed from multiple places:
* **Failed process start** tab from **Active process** menu in FlowX.AI Designer.
* **Process Status** view, accessible from **Process instances** list in FlowX.AI Designer.

If you open a process instance and it does not contain exceptions, the **Exceptions** tab will not be displayed.
### Exceptions data
When you click **view** button, a detailed exception will be displayed.

* **Process Definition**: The process where the exception was thrown.
* **Source**: The source of the exception (see the possible type of [sources](#possible-sources) below).
* **Message**: A hint type of message to help you understand what's wrong with your process.
* **Type**: Exception type.
* **Cause Type**: Cause type (or the name of the node if it is the case).
* **Process Instance UUID**: Process instance unique identifier (UUID).
* **Token UUID**: The token unique identifier.
* **Timestamp**: The default format is - `yyyy-MM-dd'T'HH:mm:ss.SSSZ`.
* **Details**: Stack trace (a **stack trace** is a list of the method calls that the process was in the middle of when an **Exception** was thrown).
#### Possible sources
### Exceptions type
Based on the exception type, there are multiple causes that could make a process fail. Here are some examples:
| Type | Cause |
| :----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Business Rule Evaluation | When executing action rules fails for any reason. |
| Condition Evaluation | When executing action conditions. |
| Engine |
When the connection with the database fails
when the connection with [Redis](../../../platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-redis) fails
|
| Definition | Misconfigurations: process def name, subprocess parent process id value, start node condition missing. |
| Node | When an outgoing node can’t be found (missing sequence etc). |
| Gateway Evaluation |
When the token can’t pass a gateway for any reason, possible causes:
Missing sequence/node
Failed node rule
|
| Subprocess | Exceptions will be saved for them just like for any other process, parent process ID will also be saved (we can use this to link them when displaying exceptions). |
# Process instance
Source: https://docs.flowx.ai/5.1/docs/projects/runtime/active-process/process-instance
A process instance is a specific execution of a business process that is defined on the FlowX.AI platform. Once a process definition is added to the platform, it can be executed, monitored, and optimized by creating an instance of the definition.

## Overview
Once the desired processes are defined in the platform, they are ready to be used. Each time a process needs to be used, for example each time a customer wants to request a new credit card, a new instance of the specified process definition is started in the platform. Think of the process definition as a blueprint for a house, and of the process instance as each house of that type being built.

The **FlowX.AI Engine** is responsible for executing the steps in the process definition and handling all the business logic. The token represents the current position in the process and moves from one node to the next based on the sequences and rules defined in the exclusive gateways. In the case of parallel gateways, child tokens are created and eventually merged back into the parent token.
Kafka events are used for communication between FlowX.AI components such as the engine and integrations/plugins. Each event type is associated with a Kafka topic to track and orchestrate the messages sent on Kafka. The engine updates the UI by sending messages through sockets.
## Checking the Process Status
To check the status of a process or troubleshoot a failed process, follow these steps:
1. Open **FlowX.AI Designer**.
2. Go to **Processes → Active Process → Process instances**.
3. Click **Process status** icon.

## Understanding the Process Status data
Understanding the various elements within process status data is crucial. Here's what each component entails:
* The **Status** field indicates the state of the process instance, offering distinct values:
| Status | Indicates the state of the process instance. Offers distinct values: |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| **CREATED** | Visible if there's an error during process creation. Displays as `STARTED` if there were no errors during creation. |
| **STARTED** | Indicates the current running status of the process. |
| **DISMISSED** | Available for processes with subprocesses, seen when a user halts a subprocess. |
| **EXPIRED** | This status appears when the defined "expiryTime" expression in the process definition elapses since the process was initiated (`STARTED`). |
| **FINISHED** | Signifies successful completion of the process execution. |
| **TERMINATED** | Implies a termination request has been sent to the instance. |
| **ON HOLD** | Marks a state where the process is no longer editable. |
| **FAILED** | Occurs if a CronJob triggers at a specific hour, and the instance isn't finished by then. |
* **Active process instance**: The UUID of the process instance, with a copy action available.
* **Variables**: Displayed as an expanded JSON.

* **Tokens**: A token represents the state within the process instance and describe the current position in the process flow.

For more information about token status details, [here](../../../building-blocks/token).
* **Subprocesses**: Displayed only if the current process instance generated a [subprocess](../../../building-blocks/process/subprocess) instance.
* **Exceptions**: Errors that let you know where the process is blocked, with a direct link to the node where the process is breaking for easy editing.

For more information on exceptions, check the following section:
[Exceptions](../active-process/failed-process-start)
* **Audit Log**: The audit log displays events registered for process instances, tokens, tasks, and exceptions in reverse chronological order by timestamp.

### Color coding
In the **Process Status** view, some nodes are highlighted with different colors to easily identify any failures:
* **Green**: Nodes highlighted with green mark the nodes passed by the [token](../../../building-blocks/token).
* **Red**: The node highlighted with red marks the node where the token is stuck (process failure).

## Starting a new process instance
To start a new process instance, a request must be made to the [FlowX.AI Engine](../../../platform-deep-dive/core-components/flowx-engine). This is handled by the web/mobile application. The current user must have the appropriate role/permission to start a new process instance.

To be able to start a new process instance, the current user needs to have the appropriate role/permissions:
When starting a new process instance, we can also set it to [inherit some values from a previous process instance](../../../platform-deep-dive/core-components/flowx-engine#orchestration).
## Troubleshooting possible errors
If everything is configured correctly, the new process instance should be visible in the UI and added to the database. However, if you encounter issues, here are some common error messages and their possible solutions:
Possible errors include:
| Error Message | Description |
| ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
| *"Process definition not found."* | The process definition with the requested name was not set as published. |
| *"Start node for process definition not found."* | The start node was not properly configured. |
| *"Multiple start nodes found, but start condition not specified."* | Multiple start nodes were defined, but the start condition to choose the start node was not set. |
| *"Some mandatory params are missing."* | Some parameters set as mandatory were not included in the start request. |
| `HTTP code 403 - Forbidden` | The current user does not have the process access role for starting that process. |
| `HTTP code 401 - Unauthorized` | The current user is not logged in. |
# Builds
Source: https://docs.flowx.ai/5.1/docs/projects/runtime/builds
The Build feature allows for the creation of deployable packages of a project, encapsulating all its resources into a single unit.
A build is a snapshot of a specific project version, packaged and prepared for deployment to a runtime environment. The concept of builds plays a crucial role in ensuring that the correct version of a project, with all its configurations and dependencies, runs consistently across different environments (e.g., Dev, UAT, Production).
#### Key concepts
1. **Project Version vs. Build**
* **Project Version** is the editable snapshot of a project's state at a specific point in time. It contains all the resources (like processes, integrations, templates, etc.) and configurations grouped within the project.
* A **Build** is the deployable package of a project version. It is the compiled and immutable state that contains all the project resources transformed into executable components for the runtime environment.
2. **Single Version Rule**
* A build can only represent a single version of a project. If you have multiple versions of a project, each one can have a unique build. This ensures that you can clearly manage which version of the project is running in a specific environment without conflicts.
3. **Consistency and Deployment**
* Builds ensure that when you deploy a project to a different environment (like moving from Dev to UAT), the exact configuration, processes, templates, integrations, and all associated resources remain consistent.
* Builds are immutable—once created, a build cannot be altered. Any updates require creating a new version of the project and generating a new build.
#### Creating a build
1. **Develop the Project**
* First, work on the project in the Config mode. This involves creating processes, adding resources, and configuring integrations. Multiple versions of the project can be created and saved as drafts.
2. **Submit Changes to Version**
* When the project is ready for deployment, submit the changes to create a specific version of the project. This step involves finalizing the current configuration, grouping all resources and changes, and marking them under a specific version ID.
3. **Generate a Build**
* In the project settings, select the version you want to deploy and generate a build. This step compiles the selected project version into a package, converting all the resource definitions into executable components for the runtime environment.
* You can specify build metadata such as version tags, which help identify and manage builds during deployment.
4. **Publish the Build**
* Once the build is generated, it can be published. The published build is now available for execution in the chosen runtime environment, making it the active version that responds to process and integration calls.
#### Key features
1. **Immutability**
* Builds are immutable, ensuring that once a build is created, it reflects a fixed state of the project. This immutability prevents accidental changes and ensures consistency.
2. **Checksum and Integrity**
* Each build includes a checksum or identifier to verify its integrity. This ensures that the deployed build matches the expected configuration and no changes have been made post-build.
3. **Runtime Dependency**
* The runtime environment relies on builds to determine the active project configuration. This means the runtime does not directly interact with the editable project versions but uses builds to maintain stability and reliability.
4. **Version Control**
* Builds are version-controlled, and each build corresponds to a specific project version. This means you can trace exactly which project configuration is active in a particular environment at any time.
#### Benefits
* **Consistency Across Environments**: Builds ensure that the same version of an project runs in different environments, avoiding discrepancies between development and production.
* **Reduced Errors**: Immutable builds reduce the risk of runtime errors caused by unexpected changes.
* **Simplified Rollbacks**: If an issue is detected with a current build, previous builds can be deployed seamlessly, providing an efficient rollback strategy.
* **Streamlined Deployment**: Builds allow for a straightforward deployment process, reducing the complexity of transferring configurations and resources between environments.
#### Build management
1. **Creating a Build**
* Go to the project settings.
* Select the project version you want to deploy.
* Click the **Create Build** button and follow the prompts to configure build settings, including adding metadata or tags.
2. **Viewing and Managing Builds**
* Access the list of builds for a specific project through the Builds section.
* Each build entry provides details like version number, creation date, creator, and status (e.g., Draft, Published).
3. **Publishing a Build**
* Once a build is verified and ready, publish it to make it the active build in the desired environment.
* Only one build can be active per environment at any given time.
#### Technical details
1. **Manifest and Metadata**
* Each build contains a manifest that lists all the resources included, their version IDs, and their resource definitions.
* Metadata helps identify which project version the build is derived from, providing traceability.
2. **Separation of Design and Runtime**
* Builds serve as a bridge between the design (config) view and the runtime view. The config view is where changes are made and managed, while the runtime view uses builds to execute stable, tested versions of projects.
3. **Storage**
* Builds are stored in a dedicated storage system to ensure they are separate from the editable project versions. This storage supports easy retrieval and deployment of builds.
#### Example use case
Imagine you have a project for customer onboarding with multiple processes, templates, and integrations. After completing development and final testing, you:
* Submit changes to create **Version 1.0** of the project.
* Create a build for **Version 1.0**.
* Deploy this build to the UAT environment for final stakeholder review.
* If any adjustments are needed, you go back to the project, make changes, and submit them as **Version 1.1**.
* Create a new build for **Version 1.1**, ensuring that the changes are encapsulated separately from the previous version.
Once everything is approved, you can publish **Version 1.1 Build** to the Production environment, ensuring all environments are aligned without manual reconfiguration.
#### Conclusion
The Build feature is essential for managing projects across multiple environments. It provides a clear and organized pathway from development to deployment, ensuring consistency, integrity, and stability throughout the project's lifecycle.
# Configuration parameters overrides
Source: https://docs.flowx.ai/5.1/docs/projects/runtime/configuration-parameters-overrides
The Configuration parameters overrides feature allows you to set environment-specific values for certain parameters within a project.
This features enables flexibility and customization, making it possible to tailor a project’s behavior and integration settings according to the needs of each environment (e.g., Dev, UAT, Production). By defining overrides, users can easily manage variables like API endpoints, authentication tokens, environment-specific URLs, and other settings without altering the core project configuration.
#### Key concepts
1. **Configuration Parameters**
* Configuration parameters are placeholders used throughout a project to store key settings and values. These parameters can include anything from URLs, API keys, and credentials to integration-specific details.
* Parameters can be defined at the project level and referenced throughout processes, business rules, integrations, and templates.
If an override is needed for a configuration parameter defined in a library, it must be applied within the project where the library is used as a dependency. This ensures a clear distinction between library defaults and project-specific configurations while maintaining flexibility.
Overrides applied in a project take precedence over the values defined in the library.
2. **Environment Overrides**
* Overrides are specific values assigned to configuration parameters for a particular environment. This ensures that an project behaves appropriately for each environment without requiring changes to the project itself.
* Each environment (Development, UAT, Production) can have a unique set of overrides that replace the default parameter values when the project is deployed.
3. **Variable Precedence**
* Process Variables Override Configuration Parameters:
* If a process variable and a configuration parameter share the same name, the process variable takes precedence at runtime.
* If the process variable is null or undefined, the configuration parameter’s value is used as a fallback.
* Best Practice: Avoid naming process variables the same as configuration parameters to prevent unexpected overrides or conflicts.
4. **Centralized Management**
* Configuration parameters and their overrides are managed centrally within the project’s settings. This allows for quick adjustments and a clear overview of how each environment is configured.
#### Workflow for managing Configuration parameter overrides
1. **Defining Configuration Parameters**
* Go to the project settings and navigate to the **Configuration Parameters** section.
* Define parameters that will be used across the project, such as:
* **CRM URL**: Base URL for CRM integration.
* **API Key**: Secure key for external service authentication.
* **Environment URL**: Different base URLs for various environments (Dev, UAT, Production).
2. **Setting Up Environment-Specific Overrides**
* Access the **Overrides** section for configuration parameters.
* For each environment (e.g., Dev, UAT), assign specific values to the defined parameters. For example:
* Dev Environment: `CRM_URL` → `https://dev.crm.example.com`
* UAT Environment: `CRM_URL` → `https://uat.crm.example.com`
* Save the environment-specific overrides. These values will take precedence over the default settings when deployed in that environment.
3. **Applying Overrides at Runtime**
* When a project is deployed to a specific environment, the system automatically applies the relevant overrides.
* Overrides ensure that the configuration aligns with environment-specific requirements, like endpoint adjustments or security settings, without altering the core setup.
#### Key features
1. **Flexibility Across Environments**
* Easily adjust configuration parameters without changing the core application, ensuring that the project adapts to the target environment seamlessly.
2. **Centralized Parameter Management**
* Configuration parameters and their environment-specific overrides are managed centrally within the project settings, providing a single source of truth.
3. **Dynamic Integration Adaptation**
* Environment-specific overrides allow integrations to connect to different endpoints or use different credentials based on the environment, supporting a smoother development-to-production workflow.
4. **Improved Security**
* Sensitive data, such as API keys or credentials, can be stored as environment-specific overrides, ensuring that development and testing environments do not share the same sensitive values as production.
5. **Avoid Variable Naming Conflicts**
* Best Practice: Use distinct names for process variables and configuration parameters to avoid unintentional overrides. If process variables are undefined or null, they will default to the corresponding configuration parameter’s value.
#### Benefits
* **Simplified Deployment**: Overrides eliminate the need for manual configuration changes during deployment, streamlining the process and reducing the risk of errors.
* **Environment Consistency**: Each environment can have its own tailored settings, ensuring consistent behavior and performance across all stages.
* **Secure Configuration**: Overrides keep sensitive parameters isolated to the appropriate environments, enhancing security and minimizing the risk of exposure.
* **Ease of Maintenance**: Centralized management of parameters and overrides simplifies adjustments when changes are needed, minimizing maintenance overhead.
#### Managing Configuration parameters overrides
1. **Creating a Parameter**
* In the project settings, navigate to the **Configuration Parameters** section.
* Define a new parameter by specifying its name, type, and default value.
* This parameter will be used as a placeholder throughout the project, referenced in processes, templates, and integrations.
2. **Assigning Overrides**
* Access the **Overrides** tab for the configuration parameters.
* Choose the environment (e.g., Dev, UAT, Production) and assign a specific override value for each parameter.
* Confirm the changes to apply the overrides for the selected environment.
3. **Viewing and Editing Overrides**
* From the project’s settings, you can review all environment-specific overrides in one place.
* Edit existing overrides or add new ones as needed to adapt to changes in environment requirements.
#### Technical details
1. **Parameter Resolution at Runtime**
* During runtime, the system retrieves the active configuration parameters for the project. If overrides are set for the environment, they replace the default values.
* This resolution ensures that the correct parameters are used, based on the environment in which the application is running.
2. **Integration with Business Rules and Processes**
* Configuration parameters can be directly referenced in business rules and processes. Overrides ensure that these references point to the correct environment-specific values during execution.
For more information on how to use configuration parameters in business rules, see [Extracting values from configuration parameters](../../building-blocks/actions/business-rule-action/extracting-additional-data#extracting-values-from-configuration-parameters)
3. **Storage and Management**
* Configuration parameters and their overrides are stored centrally, and the values are retrieved dynamically during runtime. This centralized approach ensures that updates to parameters are automatically reflected in the application without needing a new build.
#### Example use case
Imagine you have an application that integrates with a third-party CRM system. You:
* Define a `CRM_URL` parameter with a default value for the development environment.
* Create overrides for UAT and Production environments with their respective URLs.
* When the application is deployed to the UAT environment, the system automatically uses the UAT-specific CRM URL for all integration points without changing the project’s core configuration.
* When it's time to deploy to Production, the system uses the production-specific overrides, ensuring that the application connects to the right CRM instance.
# Scheduled processes
Source: https://docs.flowx.ai/5.1/docs/projects/runtime/scheduled-processes
Automate the initiation of process instances using predefined timer settings. Scheduled Processes trigger new process instances on specific dates, times, or intervals without manual intervention. A scheduler is generated for the published version of any process started by a Start Timer Event nodes.
## Overview
The **Scheduled Processes** feature automatically triggers process instances using Timer Start Events. In the **Runtime** tab, you can view scheduled processes and activate/deactivate timers without a redeployment. This feature is especially useful in upper environments, where you might need to pause or resume cron jobs without modifying the project build.
Check this section for more details about Timer Start Events and how to configure them.

## Key components
### 1. List of scheduled processes
The **Scheduled Processes** tab displays all timers that trigger process instances. Each row in the list shows:
* **Process Name:** The process linked to the timer.
* **Swimlane Name:** In multi-swimlane processes, each swimlane may have its own timer.
* **Timer Name:** The name of the timer node.
* **Timer Type:**
* **Date-based:** Triggers at a specific date and time.
* **Cycle-based:** Repeats at defined intervals (for example, every 10 seconds).
* **Location:** The execution environment (e.g., **Local**).
From this interface, you can view timer details or activate/deactivate timers as needed.
### 2. Timer Events schedule
To view a timer’s configuration, click the **View** icon next to the scheduled timer in the list.

### 3. Activating and deactivating timers
Manage timer activation directly from the UI:

* **Activate:** Click the activate button in the Scheduled Processes tab.
* **Deactivate:** Click the same button to suspend the timer.
You cannot edit timer configurations in the **Runtime** tab. To modify settings, update the process definition and redeploy.
***
## Use cases
A Timer Start Event can be scheduled to **automatically trigger** an onboarding process at a predefined time.
**Example**: Process starts on **January 28, 2025, at 12:14 PM**, sending onboarding notifications.
A Cycle timer can execute a job **every 10 seconds for 60 repetitions**, ensuring periodic execution.
A cycle timer with a cron expression can generate a report at **1 AM every day**.
***
## Additional notes
* **Runtime Timer Control:**\
Manage timers in the **Runtime** tab without changing the application build. Previously, timer activation was controlled by a checkbox in the **Start Timer node**, which is now read-only after deployment.
* **Timers in Multi-Swimlane Processes:**\
Each swimlane can have its own timer. The **Scheduled Processes** tab displays each timer separately for clear management.
* **Exporting and Importing Builds:**\
Timer activation settings are not editable during build export/import. All timer management occurs in the **Runtime** tab.
# Workspaces
Source: https://docs.flowx.ai/5.1/docs/projects/workspaces
Workspaces enable organizations to manage multiple business contexts within one FlowX instance while maintaining logical data isolation.

**Scope**: New access management and permission mechanism applies only to FlowX Designer access. Runtime permissions through Keycloak roles (at process level) remain unchanged.
### Key benefits
Onboard new business verticals in days instead of weeks with shared platform capabilities
Provide secure separation between different business contexts while allowing controlled resource sharing
Implement granular permissions with role-based access control (RBAC) and access control lists (ACLs)
## Key concepts
### Workspace
A workspace is a logical grouping of entities and assets defined in FlowX that are only available to a subset of users who are given explicit access. Each workspace operates independently, ensuring data and configuration separation between different business contexts.
### Multi-workspace user access
Users can be granted access to multiple workspaces and can switch between them as needed. When a user has access to multiple workspaces, they can select which workspace to enter after authentication.
### Data isolation
Workspaces provide logical data isolation, meaning that resources (projects, libraries, themes, etc.) are scoped to specific workspaces and cannot be accessed from other workspaces without explicit sharing configurations.
### Additional terminology
* **Group**: A collection of users who share common characteristics, responsibilities, or access needs within a system. Groups are used to simplify access control by managing permissions collectively rather than assigning them individually to each user.
* **Permissions**: Define what actions can be performed on resources. They are fine-grained access controls that specify privileges for a resource type, such as: read process, edit process, delete process.
* **Roles**: Collections of permissions grouped together based on job functions or responsibilities. They simplify permission management by assigning a set of permissions to users instead of managing them individually.
**Role assignment rule**: Roles are never assigned directly to users or groups. A user or group is assigned a role ONLY when given access to a workspace OR a project/library. **Exception**: `org_admin` role is the only one assigned to users directly at the organization level.
When a user has multiple roles assigned in the context of a workspace or project, their access level is the union of all permissions from all roles associated with the user.
## Workspace use cases
**Isolation Level**: High
Different use cases, projects, permissions, and users between business verticals (e.g., retail vs. corporate vs. investment banking).
**Shared Resources**:
* Shared users across business lines
* Shared library builds
* Shared themes (configurable)
**Example**: A multinational bank with separate workspaces for Retail Banking, Corporate Banking, and Investment Banking, each with its own processes but sharing common user authentication and compliance libraries.
**Isolation Level**: Medium
Same business line across different regions, subject to local regulations.
**Shared Resources**:
* Libraries and common processes
* Some shared users with multi-region access
**Example**: An insurance company with workspaces for US, EU, and APAC operations, sharing global insurance processes but maintaining region-specific compliance and regulatory processes.
**Isolation Level**: Highest
Complete separation for different customers or organizations.
**Shared Resources**: None
**Example**: A consulting firm providing FlowX services to multiple clients, with completely isolated workspaces for each client organization.
## How workspaces work
### Authentication and access flow
User logs in using OAuth 2.0 through the configured identity provider (Keycloak or client's existing provider). Authenticated users are saved with subject ID in FlowX database.
System fetches the user's workspace permissions and available workspaces
If user has access to multiple workspaces, they select which workspace to enter
FlowX Designer loads with workspace-specific content, projects, and permissions
### Workspace selection experience
The workspace selection experience varies based on user access:
**Direct Navigation**: Users with access to only one workspace are automatically redirected to the projects page within their workspace.
**UI Behavior**: The workspace dropdown selector is disabled since no selection is needed.
**Session Flow**: Streamlined experience with no additional selection steps required.
**Homepage Display**: Users see a "Your Workspaces" homepage after authentication.
**Workspace Layout**:
* Workspaces displayed in alphabetical order
* 3 workspace tiles per row
* Name truncation with "..." for long names
* Hover tooltips show full workspace names
**Navigation to Organization Admin view**: when a logged in user is an organization admin, Organization Settings button appears on Select Workspace page in top right corner.
**Empty State Display**: Users without access to any workspace see an informational message instead of the workspace list.
**Message Content**: "You're not assigned to a workspace yet" or similar notification

**Next Steps**: User must wait for an organization admin to grant workspace access before they can proceed
This scenario commonly occurs for new users from LDAP/Active Directory after their first login, before an admin assigns workspace access.
#### Session management
**Session Persistence**: Workspace selection is saved for the user session. On subsequent visits within the same session, users are automatically redirected to their previously selected workspace.
#### Error handling and access denied scenarios
**Trigger**: User attempts to access a workspace they don't have permissions for, or workspace ID is incorrect
**System Response**: User is redirected to `workspace/403` error page
**Common Causes**:
* Workspace access was revoked
* User navigated to an invalid workspace ID
* Workspace was deleted or renamed
**Resolution**: Contact workspace admin or organization admin to restore access
**Trigger**: User attempts to access a specific resource (project, library, etc.) they don't have permissions for
**System Response**: User is redirected to `403` error page
**Common Causes**:
* Insufficient project-level permissions
* Resource is restricted to specific roles or groups
* Project access was revoked
**Resolution**: Request access from the project owner or workspace admin
### Resource management
**Complete Separation**: Projects cannot be exported from one workspace to another on the same environment
**Workspace Scoping**: Each project is tagged with its workspace ID and only accessible within that workspace
**Independent Lifecycle**: Projects in different workspaces can have the same names and follow independent versioning
**Critical Constraint**: Having the same project or library configuration in multiple workspaces on the same FlowX instance is NOT permitted
**Import Behavior**: Projects created from version or build import are created with access only for the currently logged in user with 'Project Owner' role. Workspace admins are also able to view projects. Access can be extended to required users subsequently.
**Runtime Permissions**: Permissions for Runtime section are received by users with workspace role. Users inherit runtime permissions from workspace role for ALL projects/libraries they have access to.
**Build Sharing**: Library builds can be reused across workspaces on the same environment
**Controlled Access**: Libraries from other workspaces can be added as dependencies if permissions allow
**Version Management**: Single version constraint applies across workspace boundaries for shared libraries
**Workspace Access**: All builds created in workspace for any library have 'public' access within workspace. When adding library dependencies, all libraries with builds are available as dependencies.
**Cross-Workspace Sharing**: Library builds can be shared across workspaces using export/import mechanism
**Important**: Library builds from Workspace A can be imported into Workspace B on same environment. However, in FlowX 5.1 the libraries containing only builds will not be viewable to workspace users outside Dependencies page.
**Library Creation**: Libraries are created only with version import (not created when importing a build of a library).
**Workspace Themes**: Each workspace can have its own themes and branding
**Shared Themes**: Themes can be shared between workspaces when configured appropriately
**Brand Consistency**: Maintain consistent branding across business units or customize per workspace
**Default Theme**: Default theme can be set in each workspace. When creating a project or library, the project/library version inherits the workspace default theme as the configured theme in Version settings.
**Export/Import**: Themes can be shared across workspaces using export/import.
**Media Files**: Each workspace can create and manage workspace specific media files, not accessible to be used by other workspaces. However, when exporting themes, media files will also be exported and can be imported easily in other workspace together with the theme.
**Fonts**: Fonts can be uploaded only in Organization Settings section, and all uploaded fonts will be shared by all workspaces.
### Additional workspace features
#### Command Center (AI Agents)
AI Agents permission is a project level permission starting in FlowX 5.1 release. **Consequence**: Command center will be available only on projects or libraries pages.
#### Audit Logs
Audit log entry in main menu for every workspace will be available only for users with Workspace Admin role. The reason for this is that global audit log includes all logs for all projects/libraries in workspace.
## Access control
### Role-based access control (RBAC)
For detailed role permissions and setup instructions, see [Workspaces Access Rights](../../setup-guides/access-management/workspaces-access-rights).
* **Project editor** - Can modify project content, processes, and configurations. Includes all Project Viewer permissions.
* **Project viewer** - Read-only access to project content and processes. Cannot make modifications.
* **Workspace user** - View only access to workspace entities. Can create projects, but only sees projects they have explicit access to.
* **Owner** - Automatically assigned to project creators. Full control over project settings, access management, and can delete the project.
* **Theme editor** - Extends workspace user role to include permissions to manage themes and associated resources (global media files).
* **Workspace admin** - Manages all workspace level resources including users, roles, themes. Can configure access and content, but cannot manage organization-wide settings.
* **Runtime editor** - Enables users to test runtime functionality and manage runtime policies without full configurator permissions. Commonly used by QA teams and testers who need to manage "change active policy" operations and test processes during runtime without broader editing capabilities.
Roles are specific to each workspace - a user can have different roles in different workspaces
In FlowX 5.1 release, only pre-defined roles will be available to use for workspace and project/library access.
#### Detailed role permissions
To add a user to a workspace, and to assign a role to the user, you need to go to **Organization settings** page and select your desired workspace, then add the user to the workspace and assign the role to the user.
* **Workspace admin**: Manages all workspace level resources including users, roles, themes. Can configure access and content, but cannot manage organization-wide settings.
Workspace admins will be able to view and edit ALL projects and libraries in workspace, regardless of project/library access settings.
* **Workspace user**: View only access to workspace entities. Can create projects, but only sees projects they have explicit access to.
* **Theme editor**: Extends workspace user role to include permissions to manage themes and associated resources (global media files).
* **Runtime editor**: Enables users to test runtime functionality and manage runtime policies without full configurator permissions. Commonly used by QA teams and testers who need to manage "change active policy" operations and test processes during runtime without broader editing capabilities.

### User groups
User groups simplify permission management by allowing you to assign permissions to groups rather than individual users.
* **Default Groups**: Each workspace includes an "Everyone in workspace" default group
* **Custom Groups**: Create groups based on teams, departments, or project requirements
* **Inherited Permissions**: Users automatically inherit permissions from their group memberships
### Access control lists (ACLs)
Grant fine-grained control over individual resources within a workspace, allowing exceptions to general role permissions.
**Example**: A user with `project_viewer` role can be granted edit access to a specific project without becoming a full `configurator`.
Provide specific users or groups access to individual resources without requiring full platform permissions.
**Use Case**: External consultants can be given access to specific projects they're working on without broader workspace access.
Resource creators can manage access to their specific resources without requiring full admin intervention.
**Benefit**: Project owners can add team members to their projects without needing admin approval for each addition.
### Project-level access control
Projects and libraries support fine-grained access control through dedicated project roles that work alongside workspace-level permissions.
Automatically assigned to project creators. Full control over project settings, access management, and can delete the project.
Can modify project content, processes, and configurations. Includes all Project Viewer permissions.
Read-only access to project content and processes. Cannot make modifications.
#### Creating a project
Create a new project by clicking the **+** icon in the top-right corner of the Projects page.
The currently logged-in user is automatically assigned as Project Owner with full access rights.
Project owners can subsequently add users or groups with Project Editor or Project Viewer roles as needed.

#### Access management inheritance
* **Project Editor role** automatically includes Project Viewer permissions
* **Multiple roles**: Users can have both workspace-level and project-level roles simultaneously
* **Permission union**: When users have multiple roles, their access is the combination of all permissions from all assigned roles
## Organization administration
### Organization admin role
The `org_admin` role is the only role assigned directly to users at the organization level, not workspace level.
Organization admins will be able to see all workspaces and have the same permissions as Workspace Admins inside each workspace. Multiple users can have this role assigned. Role can be assigned/revoked by other org admins.
### User management
Users are created in FlowX only after their first login in FlowX Designer.
Organization users page lists only users created in FlowX (after first login or manually created by organization admins). User details page shows Workspace access summary.
#### User creation scenarios
**Sync Behavior**: Users from customer's LDAP/Active Directory are not automatically created in FlowX.
**Onboarding Steps**:
1. User logs into FlowX Designer for the first time
2. They are redirected to a "You're not assigned to a workspace yet" message page
3. User account is now created in FlowX and appears in the Users list in Organization Settings
4. Organization admin assigns workspace access with appropriate role (Workspace User, Workspace Admin, Theme Editor, or Runtime Editor)
5. On next login, user will have access to assigned workspaces
Users synced from LDAP will only appear in FlowX after their first login attempt.
**Prerequisites**: Only available when using Keycloak as the authentication provider.
**Creation Process**:
1. Organization admin clicks the + icon in Users section
2. Enter user details (name, email, password, runtime roles)
3. User is immediately created in both Keycloak and FlowX Designer
4. Organization admin can immediately assign workspace access
5. User can log in directly without the initial "no workspace" flow
This method is primarily for internal use and may not be available in all FlowX 5.1 deployments. If direct user creation is needed, users should be created directly in Keycloak.
### Additional organization settings
#### Runtime roles and groups
Legacy Roles and Groups pages (for managing roles and groups only in Keycloak) are accessible in Organization Settings section and renamed **Runtime Roles** and **Runtime Groups**.
Will be used going forward to manage any roles needed for process permission configuration.
All workspaces will share the same list of runtime roles and groups.
If Keycloak is not used as authentication provider, Runtime Roles and Runtime Groups pages will return errors in FlowX 5.1.
#### Set environment info
Configuring client and environment information is available only in Organization settings section under Platform status page.
## Workspace management
### Creating and managing workspaces
Only users with organization administrator permissions can create new workspaces
Set workspace name, description, and basic settings during creation
Add initial users and assign appropriate roles to get started

Deleting a workspace is not available in FlowX 5.1.
### User management within workspaces
* **Direct Assignment**: Add users directly to workspace with specific roles
* **Group Membership**: Add users to groups that inherit workspace permissions
* **Multi-Workspace Access**: Users can be members of multiple workspaces
* **Multiple Roles**: Users can have multiple roles within a workspace
* **Role Inheritance**: Roles can inherit permissions from other roles
* **Workspace Scoping**: User roles are specific to each workspace
* **Visual Interface**: See all users, groups, and their permissions at a glance
* **Quick Adjustments**: Easily modify permissions and access levels
* **Audit Capabilities**: Track who has access to what resources
## Migration and compatibility
### Initial setup requirements
**Critical Setup Step**: Before starting any FlowX 5.1 environment, the initial organization admin must be configured.
Complete setup instructions are available in the [Workspaces Setup Guide](../../setup-guides/authorization-setup-guide).
1. To create the first user in FlowX Designer with organization admin role, an environment variable `SPRING_LIQUIBASE_PARAMETERS_DEFAULTORGADMINUSERNAME` needs to be configured with the username of the user from Identity Store (Keycloak/ other Identity Store from where the users are used to login in FlowX.AI).
2. If request to Keycloak fails, the fallback is to use `SPRING_LIQUIBASE_PARAMETERS_DEFAULTORGADMINUSERSUBJECTID` to create the organization admin user. Value that must be set is the ***subject identifier***. (***sub*** in *JWT token OR* user’s id in Keycloak).
This step is important for creating any environment, no matter if there's a pre-existing env or a newly created one.
**IMPORTANT**: Instruct DeevOps team to set this user id **BEFORE** system startup. Otherwise the authorization-service startup will fail. Ensure the correct value is set. The correct value is the subject id of the user, value that will be populated by the authorization service in the access token used for FlowX login.
When upgrading to FlowX 5.1, a default workspace is automatically created containing all your existing resources.
**What Happens During Migration:**
* All existing projects, libraries, and themes are moved to a default workspace
* All existing functionality continues to work without changes
**Default workspace details:**
* Name: **"Default workspace"** (can be changed following the migration)
* UUID: **"00000000-0000-0000-0000-000000000001"**
**What gets migrated:**
* All active process instances will be migrated under default workspace
* Failed process start instances migration
* Workflow instances migration
* Scheduled processes migration
* Audit logs migration
Out of office and Fonts will not be migrated under default workspace, as they are managed at organization level.
For clients who need inactive process instances migrated, we'll provide migration script which will be run post migration.
**Post-migration manual steps:**
**Important**: Existing users will not be migrated; they will need to log into FlowX so that their user is created.
* Organization admin will need to provide individual access to workspace for each user
* Access to projects and libraries should be additionally configured as per workspace requirements
* Existing admin roles and groups used for FlowX Designer access are deprecated and should be **removed** post-migration from Keycloak
Step is optional, but encouraged so that the role list for runtime permissions is manageable. List of deprecated roles (which can be removed) will be provided in documentation.
**Initial Setup Process:**
1. Configure the first workspace administrator user
2. Create the initial workspace
3. Set up users and role assignments
4. Begin creating projects and processes
## Best practices
### Workspace design
Define workspaces based on clear business, regulatory, or organizational boundaries
Use consistent naming conventions for workspaces, roles, and resources
Document workspace purposes, user access patterns, and governance policies
Plan workspace structure to accommodate future growth and organizational changes
### Permission management
* **Principle of Least Privilege**: Grant minimum necessary permissions
* **Group-Based Management**: Use groups for permission management rather than individual assignments
* **Regular Audits**: Periodically review and audit workspace permissions
* **Clear Ownership**: Establish clear ownership models for workspace resources
### Resource sharing
* **Controlled Sharing**: Implement clear policies for resource sharing between workspaces
* **Dependency Management**: Track and manage dependencies between shared resources
* **Version Control**: Maintain version control for shared libraries and themes
## Common use cases
**Scenario**: Large bank with retail, corporate, and investment banking divisions
**Workspace Structure**:
* Retail Banking Workspace
* Corporate Banking Workspace
* Investment Banking Workspace
* Shared Compliance Workspace (for common libraries)
**Benefits**: Division autonomy while sharing compliance processes and user management
**Scenario**: Insurance company operating in multiple countries
**Workspace Structure**:
* US Operations Workspace
* EU Operations Workspace
* APAC Operations Workspace
**Benefits**: Region-specific regulatory compliance while sharing global insurance processes
## Limitations and considerations
### Current limitations
**Cross-Workspace Project Export**: Projects cannot be exported from one workspace to another on the same environment.
* **Resource Isolation**: Direct access to resources from other workspaces is not possible
* **Single Environment Sharing**: Library sharing only works within the same FlowX environment
* **Permission Inheritance**: Workspace permissions don't automatically inherit across workspace boundaries
### FlowX 5.1 specific limitations
**Additional limitations in current releases**:
* Move projects or libraries to another workspace feature is not available. Initially (when upgrading to FlowX 5.1), all existing projects and libraries are migrated to Default Workspace.
* Workspace import/export is out of scope; each FlowX environment will have a default workspace configured initially and workspaces are managed independently on each instance.
* Library builds from other workspaces are only visible on the Dependencies page after import, not as full library entries in the workspace.
### Planning considerations
* **Change Management**: Organizational alignment needed for governance models
* **User Training**: Users need to understand workspace selection and navigation
* **Governance Policies**: Clear policies needed for resource sharing and access management
* **Migration Planning**: Existing customers should plan workspace structure before creating additional workspaces
***
## Related documentation
* [Workspaces Setup Guide](../../setup-guides/authorization-setup-guide)
* [Workspaces Access Rights](../../setup-guides/access-management/workspaces-access-rights)
# AI Analyst
Source: https://docs.flowx.ai/5.1/ai-platform/ai-core/ai-analyst
Builds and optimizes BPMN processes using AI to generate, validate, and enhance workflows based on user-provided documents
## Description
The AI Analyst is an intelligent agent that transforms various inputs into Business Process Model and Notation (BPMN) processes. It can generate complete workflows from text prompts, images, or documents, as well as modify existing BPMN processes. The agent uses advanced AI to interpret requirements and convert them into structured JSON representations that the FlowX.AI platform can interpret and visualize as proper BPMN diagrams.
## Capabilities
The AI Analyst offers two main categories of capabilities:
### Generate New Processes
1. **Generate from Prompt**
* Creates a complete BPMN process based on natural language descriptions
* Transforms textual requirements into a structured workflow
* Produces a JSON representation containing nodes (with name and type) and links between nodes
```mermaid theme={"system"}
%%{
init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#f1774a',
'primaryTextColor': '#000',
'primaryBorderColor': '#000',
'lineColor': '#6b6b6b',
'secondaryColor': '#f3b861',
'tertiaryColor': '#bababa'
}
}
}%%
graph TD;
Start([Start]):::primary
Check_Prompt[Check Prompt]:::secondary
Classify_Image[Classify Image]:::tertiary
Generate_Process[Generate Process]:::secondary
Generate_from_Node[Generate from Node]:::tertiary
Generate_between_Nodes[Generate between Nodes]:::tertiary
PostProcessing[PostProcessing]:::secondary
END([END]):::primary
subgraph Parallel_Processing [Parallel Processing]
Process_Swimlanes[Process Swimlanes]:::tertiary
Split_Image[Split Image]:::tertiary
Image_Analysis[Image Analysis]:::tertiary
Generate_Prompt[Generate Prompt]:::tertiary
end
Start ==> Check_Prompt;
Start --> Classify_Image;
Classify_Image --> Parallel_Processing;
Parallel_Processing --> Generate_Process;
Check_Prompt ==> Generate_Process;
Check_Prompt --> Generate_from_Node;
Check_Prompt --> Generate_between_Nodes;
Generate_Process ==> PostProcessing;
Generate_from_Node --> PostProcessing;
Generate_between_Nodes --> PostProcessing;
PostProcessing ==> END;
%% Styling
classDef primary fill:#f1774a,stroke:#000,stroke-width:1px,color:#000;
classDef secondary fill:#f3b861,stroke:#000,stroke-width:1px,color:#000;
classDef tertiary fill:#bababa,stroke:#000,stroke-width:1px,color:#000;
```
2. **Generate from Image**
* Extracts BPMN process information from uploaded images
* Identifies swimlanes and components in diagram images
* Can process various image resolutions (from small \< 4K to large > 8K)
* Accepts optional text descriptions for additional context
* Combines visual recognition with language processing for accurate interpretation
```mermaid theme={"system"}
%%{
init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#f1774a',
'primaryTextColor': '#000',
'primaryBorderColor': '#000',
'lineColor': '#6b6b6b',
'secondaryColor': '#f3b861',
'tertiaryColor': '#bababa'
}
}
}%%
graph TD;
Start([Start]):::primary
Classify_Image[Classify Image]:::secondary
Check_Prompt[Check Prompt]:::tertiary
Generate_Process[Generate Process]:::secondary
Generate_from_Node[Generate from Node]:::tertiary
Generate_between_Nodes[Generate between Nodes]:::tertiary
Post_Processing[Post Processing]:::secondary
END([END]):::primary
subgraph Parallel_Processing [Parallel Processing]
Process_Swimlanes[Process Swimlanes]:::secondary
Split_Image[Split Image]:::secondary
Image_Analysis[Image Analysis]:::secondary
Generate_Prompt[Generate Prompt]:::secondary
end
Start ==> Classify_Image;
Start --> Check_Prompt;
Classify_Image ==> Parallel_Processing;
Parallel_Processing ==> Generate_Process;
Check_Prompt --> Generate_Process;
Check_Prompt --> Generate_from_Node;
Check_Prompt --> Generate_between_Nodes;
Generate_Process ==> Post_Processing;
Generate_from_Node --> Post_Processing;
Generate_between_Nodes --> Post_Processing;
Post_Processing ==> END;
%% Styling
classDef primary fill:#f1774a,stroke:#000,stroke-width:1px,color:#000;
classDef secondary fill:#f3b861,stroke:#000,stroke-width:1px,color:#000;
classDef tertiary fill:#bababa,stroke:#000,stroke-width:1px,color:#000;
classDef secondary-highlight fill:#f3b861,stroke:#8a2be2,stroke-width:2px,color:#000;
```
3. **Generate from Document**
* Extracts process descriptions from uploaded documents
* Analyzes textual content to identify workflow components and relationships
* Creates a structured representation of the described process
### Edit Existing Processes
1. **Generate Process from BPMN File**
* Imports and interprets existing BPMN files
* Converts external BPMN formats into FlowX.AI-compatible representations
2. **Generate In-between Nodes**
* Adds missing steps between existing nodes in a workflow
* Enhances process completeness and logical flow
3. **Generate from Node**
* Expands a process by adding subsequent steps after a specified node
* Allows incremental development of complex workflows
4. **Edit Existing Process**
* Modifies components of an existing process based on user instruction
* Updates node properties, connections, or process structure
## User Experience
The AI Analyst is accessed through the FlowX.AI Platform interface. Users can:
1. Select the desired capability from the AI Analyst section
2. Provide input in the appropriate format (text prompt, image, document, or BPMN file)
3. Add additional context or requirements if needed
4. Review the generated process in a visual BPMN format
5. Make adjustments through the "Edit" capabilities if necessary
6. Implement the final workflow in their project
The interaction follows a human-in-the-loop approach, allowing for quality checks and iterative improvements to ensure the generated process meets requirements.
## Anatomy
The AI Analyst architecture integrates multiple AI components to process different input types and generate standardized BPMN output.
The workflow begins with a user query that gets rewritten for clarity. A quality check determines if more information is needed, in which case a human provides additional context. Once sufficient information is available, the process generation component creates the BPMN workflow, which is then delivered to the user.
## Top rules for Designer AI Agent prompting
### ✅ DO the following
**Be specific about process goals:**
Clearly state what the process should accomplish, including start and end points, major milestones, and desired outcomes.
**Describe key participants and roles:**
Mention the different stakeholders or departments involved in the process and their responsibilities.
**Include decision points:**
Specify any conditional logic or decision points that might create branches in the workflow.
**Provide process constraints:**
Mention any business rules, regulations, or time constraints that should be incorporated into the process design.
### ⛔ **DON’T** do these
**Don't be too technical with BPMN terms:**
You don't need to use precise BPMN terminology; the AI Analyst can interpret business language and convert it to appropriate BPMN elements.
**Don't request subprocess details:**
The AI Analyst has no knowledge about subprocesses or other platform-specific information not provided in your input.
**Don't upload low-quality images:**
When generating from images, ensure the diagram is clear and readable to improve accuracy of the generated process.
**Don't expect platform-specific optimizations:**
The AI Analyst generates standard BPMN representations and may not incorporate FlowX.AI platform-specific features automatically.
# AI Assistant
Source: https://docs.flowx.ai/5.1/ai-platform/ai-core/ai-assistant
Answers questions about the FlowX.AI platform as well as the bank itself based on uploaded documentation.
## Description
The AI Assistant provides intelligent documentation support for both the FlowX.AI platform and banking operations. By leveraging comprehensive documentation repositories, this agent delivers:
* **Accurate Responses:** Utilizes up-to-date product documentation for precise answers.
* **Consistency:** Ensures uniformity in responses across all user interactions.
* **Efficiency:** Reduces response time, enhancing user satisfaction.
* **Scalability:** Handles multiple user queries simultaneously without human intervention.
* **Streamlined Onboarding:** Provides instant, accurate answers to new users' questions, facilitating a smoother and faster onboarding process.
The assistant functions as a knowledge hub that can quickly search, retrieve, and synthesize information from both built-in FlowX.AI documentation and custom uploaded documents.
## Capabilities
The AI Assistant offers specialized content search functionality across different documentation sources:
### Search into FlowX.AI Documentation
* **Purpose:** Provides answers to questions about the FlowX.AI platform, its features, configuration options, and best practices.
* **Documentation Coverage:** Accesses a comprehensive repository of approximately 1,000 documentation chunks (318,000 tokens).
* **Query Types:** Handles direct questions, keyword searches, or general topic inquiries related to the platform.
* **Performance:** Documentation ingestion takes approximately 12 seconds, with rapid response times for most queries.
* **Response Format:** Delivers answers in well-formatted markdown for readability.
## User Experience
The AI Assistant is easily accessible within the FlowX.AI Platform:
1. **Access Point:** Users can find the AI Assistant in the help section of the platform interface.
2. **Conversation Interface:** The assistant uses a chat-based interface where users can:
* Type natural language questions
* View responses in real-time with markdown formatting
* Follow up with additional questions in a conversational manner
3. **Document Upload:** Users can upload custom documentation through:
* The document upload interface in the assistant section
* Selecting files from their local system
* Providing URLs to documentation resources
4. **Saved Conversations:** Users can reference past interactions, with the assistant maintaining context between sessions.
## Anatomy
The AI Assistant architecture follows a sophisticated retrieval-augmented generation approach:
```mermaid theme={"system"}
%%{
init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#f1774a',
'primaryTextColor': '#000',
'primaryBorderColor': '#000',
'lineColor': '#6b6b6b',
'secondaryColor': '#f3b861',
'tertiaryColor': '#000'
}
}
}%%
graph TD;
Start([Start]):::primary
Check_Prompt[Check Prompt]:::secondary
Rewrite_Query[Rewrite Query]:::secondary
Retrieve_Documents[Retrieve Documents]:::secondary
Grade_Documents[Grade Documents]:::secondary
Generate_Answer[Generate Answer]:::secondary
Generate_Greetings[Generate Greetings]:::secondary
END([END]):::primary
Start --> Check_Prompt;
Check_Prompt --> Rewrite_Query;
Check_Prompt --> Generate_Greetings;
Rewrite_Query --> Retrieve_Documents;
Retrieve_Documents --> Grade_Documents;
Grade_Documents --> Generate_Answer;
Generate_Answer --> END;
Generate_Greetings --> END;
%% Styling
classDef primary fill:#f1774a,stroke:#000,stroke-width:1px,color:#000;
classDef secondary fill:#f3b861,stroke:#000,stroke-width:1px,color:#000;
```
The workflow begins with query refinement, followed by document retrieval and relevance grading. Based on the quality of retrieved information, the system can generate an immediate response, process a more complex response asynchronously, or refuse to answer if no relevant documentation is found.
## Top rules for Designer AI Agent prompting
### ✅ DO the following
**Be specific with your questions:**
Clearly articulate what information you need about the FlowX.AI platform or banking operations. The more specific your question, the more precise the answer will be.
**Reference platform components:**
Mention specific features, modules, or functions you're asking about to help the assistant retrieve the most relevant documentation.
**Provide context:**
When asking follow-up questions, include relevant context or reference your previous inquiry to help the assistant understand the conversation flow.
**Ask about best practices:**
The assistant can provide guidance on recommended approaches and implementation strategies based on official documentation.
### ⛔ **DON’T** do these
**Don't ask about undocumented features:**
The assistant relies on available documentation and may not be able to provide information about unreleased or undocumented functionality.
**Don't expect troubleshooting of specific implementations:**
While the assistant can provide general guidance, it cannot debug custom code or analyze specific implementation issues without detailed context.
**Don't assume complete knowledge:**
If documentation doesn't cover a particular topic, the assistant may not be able to provide comprehensive information on that subject.
**Don't ask unrelated questions:**
The assistant is specialized in FlowX.AI platform and banking documentation and may not provide accurate answers on unrelated topics.
# AI Core Overview
Source: https://docs.flowx.ai/5.1/ai-platform/ai-core/ai-core-overview
FlowX AI Core consists of a series of AI Agents that are connected to a centralized repository of LLMs.
AI in FlowX.AI is built on a system of interconnected language models that's refreshingly LLM-agnostic (because who wants to be locked into a single model these days?). It uses an agent-based architecture where specialized AI workers tackle various tasks, all while staying connected to the data flowing through the FlowX Platform.
**Being LLM Agnostic, FlowX AI-Core offers deployment flexibility that would make a yoga instructor jealous:**
1. **The DIY Option**: Run your own custom LLM models through what we like to call our "model registry mechanism." Bring your own models, we'll handle the wiring.
2. **The Integration Play**: Deploy FlowX without our LLM models and connect to your internal LLMs that support the OpenAI API format. Just point our agents to your endpoint via `ENV_VARS` and you're good to go.
3. **The Cloud Route**: Connect to public LLM providers like OpenAI, Google, Microsoft, Anthropic, IBM, or whatever new AI company popped up while you were reading this doc.
Access to the LLM can be done through a proxy or gateway as soon as access is granted to the AI agents to access and create an inference.
Using AI-Core in FlowX.AI it can help enterprises save time, improve quality, and enhance creativity. By providing users with suggestions that are relevant and diverse, FlowX.AI can help users generate content much faster.
Agents in FlowX.AI were built based on specific use-cases to read, understand and process FlowX.AI data by offering assisted-development similar to GitHub Copilot.
***
## Access AI in FlowX
In FlowX.AI, one shortcut rules them all: Cmd/CTRL+K. Wherever you are in our platform, you can bring up the command palette by using the same keyboard shortcut.
Cmd/CTRL+K summons the FlowX.AI Command Palette, your shortcut to getting things done fast.
A **command palette is a user interface** (UI) element that's basically a search bar with superpowers—giving you quick access to commands without clicking through endless menus. It narrows down options as you type, almost like it's reading your mind (but less creepy).
Not a keyboard shortcut fan? Just look for the "✨" icon, which marks the spots where AI features are hiding throughout the interface.

FlowX.AI Command creates a central command headquarters where all platform actions live together in harmony. It simplifies the mental model of the platform from "where was that feature again?" to "let me just ask for it." Command palettes let users zip through tasks like they've been using the platform for years, even if they started yesterday—which explains why they're enjoying a renaissance in modern UIs.
# AI Designer
Source: https://docs.flowx.ai/5.1/ai-platform/ai-core/ai-designer
Streamline UI design by converting natural language prompts, Figma Designs or sketches into complete UI layouts with validations and data models.
## Description
The AI Designer is a powerful tool that transforms design concepts into functional UI components for the FlowX.AI platform. Whether you start with a text description, an image of a design, or a form structure, the AI Designer can generate complete, interactive UI layouts that are immediately usable in your applications. It also handles mapping UI elements to your data model and can modify existing designs based on natural language instructions, significantly accelerating the UI development process.
## Capabilities
The AI Designer offers two main categories of capabilities:
### Generate New UI
1. **Generate UI from Text**
* Creates complete UI layouts based on natural language descriptions
* Interprets design requirements and converts them into structured UI elements
* Maps generated UI components to data model entities when available
* Produces JSON representations that are automatically parsed into FlowX.AI components
* Validates that prompts are UI-related before proceeding with generation
2. **Generate UI from Image**
* Extracts UI designs from uploaded images (sketches, mockups, screenshots)
* Works with hand-drawn sketches, Figma designs, or other visual UI representations
* Processes complex images by splitting them into sections for parallel analysis
* Reconstructs the visual design as functional FlowX.AI UI components
* Supports additional textual context to guide the interpretation
3. **Generate UI from Form**
* Creates structured form interfaces based on form descriptions or requirements
* Automatically adds appropriate validations for form fields
* Organizes form elements in a logical, user-friendly layout
* Connects form fields to the corresponding data model properties
### Edit Existing UI
1. **Edit UI from Text**
* Modifies specific containers or cards in existing UI designs
* Updates layouts, components, or properties based on natural language instructions
* Preserves the structure and functionality of unmodified UI elements
* Maintains data model connections while implementing requested changes
* Validates that edit requests are UI-related before applying modifications
## User Experience
The AI Designer is accessed through the FlowX.AI Platform interface. Users can:
1. Access the AI Designer from the platform's design tools section
2. Select the desired capability (Generate or Edit)
3. Provide input in the appropriate format:
* Text description for generating or editing UI
* Image upload for visual-based UI generation
* Form structure for form-specific UI creation
4. Optionally link to an existing data model to enable automatic field mapping
5. Preview the generated UI components in real-time
6. Make adjustments through the "Edit" capability if necessary
7. Implement the final UI components in their application
The agent performs validation checks to ensure inputs are appropriate for UI generation, providing helpful feedback when adjustments are needed.
## Anatomy
The AI Designer integrates visual recognition and natural language processing to transform various inputs into structured UI representations.
```mermaid theme={"system"}
%%{
init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#f1774a',
'primaryTextColor': '#000',
'primaryBorderColor': '#000',
'lineColor': '#6b6b6b',
'secondaryColor': '#f3b861',
'tertiaryColor': '#bababa'
}
}
}%%
graph TD;
Start([Start]):::primary
Check_Prompt[Check Prompt]:::secondary
Classify_Image[Classify Image]:::tertiary
Edit_Interface[Edit Interface]:::tertiary
Design_UI[Design UI]:::secondary
Map_to_Data_Model[Map to Data Model]:::secondary
END([END]):::primary
subgraph Parallel_Processing [Parallel Processing]
Extract_Sections[Extract Sections]:::tertiary
Component_Identification[Component Identification]:::tertiary
Map_Components[Map Components]:::tertiary
Grid_Correction[Grid Correction]:::tertiary
Validate_Layout[Validate Layout]:::tertiary
end
Start --> Check_Prompt;
Start --> Classify_Image;
Check_Prompt --> Edit_Interface;
Check_Prompt --> Design_UI;
Edit_Interface --> Design_UI;
Classify_Image --> Parallel_Processing;
Parallel_Processing --> Design_UI;
Design_UI --> Map_to_Data_Model;
Map_to_Data_Model --> END;
%% Styling
classDef primary fill:#f1774a,stroke:#000,stroke-width:1px,color:#000;
classDef secondary fill:#f3b861,stroke:#000,stroke-width:1px,color:#000;
classDef tertiary fill:#bababa,stroke:#000,stroke-width:1px,color:#000;
```
The workflow begins with user input being categorized and processed based on its type. All inputs undergo validation to ensure they describe UI elements. For valid requests, the UI Generator creates the appropriate components, which are then mapped to the data model if available. The final output is compiled into a JSON representation that the FlowX.AI platform can interpret and display as a functional UI.
## Top rules for Designer AI Agent prompting
### ✅ DO the following
**Specify a type of screen:**
This means specifying a signup screen, a profile page or anything else that you want to add to your design. Use a context
**Add extra context:**
If designing a user bank app UI, and you want a screen solely about my expenses, include this in your prompt. For example, ‘`A expenses page that tracks a list of expenses that includes merchant value and transaction date`’. This ensures a tailored screen generation focused on expense-related content.
**Describe user interactions:**
Explain how users should interact with the UI, including any specific workflows, validation requirements, or dynamic behaviors the UI should support.
**Have fun and be creative:**
Most importantly, unleash creativity in your prompts. See what you can generate that will make your UI design stand out from the rest. The screen designer agent has a multitude of capabilities, so make sure to try them out.
### ⛔ **DON’T** do these
**Don’t specify colors:**
The single-screen generator cannot create a new design screen in a different color. However, it is easy to switch up the colors of your generated screen using theming feature.
**Don’t describe multiple screens**
The screen generator can only generate one type of screen at once. So if you use a prompt referring to two different screens, only one type will be generated.
**Don’t mention a different device:**
Our AI agents don’t understand designing in different design screens. So if you want a different device design screen, check in UI designer how your generated design looks on different platforms (Mobile / Web).
**Don't expect platform-specific knowledge:**
The AI Designer has no knowledge about other nodes or information in your project beyond what you provide in your prompt or the associated data model.
# AI Developer
Source: https://docs.flowx.ai/5.1/ai-platform/ai-core/ai-developer
Generate specific business rules, or code expressions using natural language and automate the code necessary to implement them.
## Description
The AI Developer is an intelligent agent that transforms natural language descriptions into functional code. It helps developers generate business rules, JavaScript expressions, and test data without requiring manual coding. The agent can also edit existing code, provide explanations, and translate between programming languages, significantly accelerating the development process.
## Capabilities
The AI Developer offers two main categories of capabilities:
### Generate New Code
1. **Generate Business Rule**
* Transforms natural language descriptions into code using the data model as context
* Supports JavaScript, Python, and MVEL
* Produces clean, functional business rule code based on text prompts
2. **Generate Business Rule from Document**
* Extracts business rule definitions from uploaded documents
* Identifies relevant text on each page that describes business rules
* Summarizes and presents the information to users in a dropdown
* Generates corresponding code based on the selected rule description
3. **Generate (un)Hide JavaScript Expression**
* Creates JavaScript expressions for conditional visibility of elements
* Uses the data model as context for proper variable references
4. **Generate Computed JavaScript Expression**
* Produces JavaScript code for calculated or derived values
* Leverages the data model to ensure proper variable referencing
### Edit Existing Code
1. **Edit Existing Business Rule**
* Modifies existing code based on natural language instructions
* Uses the data model as context for accurate updates
2. **Fix / Explain Code**
* Fixes errors in business rules based on error logs
* Provides clear explanations of what the code does
3. **Translate Code Between Programming Languages**
* Converts business rules from one language to another
* Maintains functionality while adapting to language-specific syntax
## User Experience
The AI Developer is accessible through the FlowX.AI Platform interface. Users can:
1. Select the desired capability from the AI Developer section
2. Provide natural language instructions or upload relevant documents
3. Specify programming language preferences when applicable
4. Review and implement the generated code
For document-based generation, users can upload documents, view extracted rule descriptions in a dropdown, select the rule they want to generate, and receive the corresponding code.
## Anatomy
The AI Developer architecture integrates large language models with the FlowX.AI Platform to seamlessly convert natural language to code.
```mermaid theme={"system"}
%%{
init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#f1774a',
'primaryTextColor': '#000',
'primaryBorderColor': '#000',
'lineColor': '#6b6b6b',
'secondaryColor': '#f3b861',
'tertiaryColor': '#000'
}
}
}%%
graph TD;
Start([Start]):::primary
subgraph DI_Platform_process [DI Platform process]
Classify_Document[Classify Document]:::secondary
Summarize[Summarize]:::secondary
Identify_process[Identify process]:::secondary
Extract_Prompt[Extract Prompt]:::secondary
end
Generate_Business_rule[Generate Business rule]:::secondary
END([END]):::primary
Start --> DI_Platform_process;
DI_Platform_process --> Generate_Business_rule;
Generate_Business_rule --> END;
%% Styling
classDef primary fill:#f1774a,stroke:#000,stroke-width:1px,color:#000;
classDef secondary fill:#f3b861,stroke:#000,stroke-width:1px,color:#000;
```
## Top rules for Designer AI Agent prompting
### ✅ DO the following
**Be specific with your requirements:**
Clearly state what the business rule should accomplish, including conditions, actions, and expected outcomes.
**Reference data model elements:**
Mention specific data fields or entities that the code should interact with to ensure proper context.
**Specify the programming language:**
Always indicate whether you need JavaScript, Python, or another supported language for your code generation.
**Provide edge cases:**
Mention special conditions or exceptions that the business rule should handle to ensure robust code.
### ⛔ **DON’T** do these
**Don't be vague:**
Avoid ambiguous descriptions that can lead to incorrect implementation. Be precise about the logic you need.
**Don't reference external systems:**
The AI Developer has no knowledge of external systems not defined in the provided context.
**Don't skip defining variables:**
Make sure to define all variables or data fields that your business rule will use.
**Don't expect platform-specific knowledge:**
The agent doesn't know about keys or information not defined in the data model or provided context.
# AI in FlowX.AI
Source: https://docs.flowx.ai/5.1/ai-platform/ai-in-flowx
Let's explore how our intelligent agents work together to transform banking operations through specialized capabilities across the entire application lifecycle.
FlowX agents can tackle everything from targeted modernization projects to total bank transformation. Our platform deploys a network of specialized AI agents working in concert to modernize banking operations across the entire application lifecycle.
**AI Agents** are built in all layers of FlowX Platform covering the entire timeline for creating, consuming and maintaining an application:
AI Agents are strategically embedded in every layer of the FlowX Platform. They're like the Avengers of banking software—if Iron Man specialized in UI design and Captain America was really good at compliance.
### Why Multi-Agent Architecture Matters?
Our multi-agent approach makes traditional monolithic AI systems look like they're still using dial-up internet:
| Feature | FlowX Multi-Agent Approach | Traditional Banking AI |
| ------------------ | ---------------------------------------------------------- | -------------------------------------------- |
| **Specialization** | Purpose-built agents for specific banking functions | Generic capabilities requiring customization |
| **Adaptability** | Modular updates to individual agents as regulations change | Complete system overhauls (ouch) |
| **Transparency** | Clear visibility into agent decision processes | Black box of mystery |
| **Resilience** | System continues despite component failures | One crash and everyone's having a bad day |
## FlowX.AI Agents
Our platform organizes intelligent agents into four functional layers—because three would be insufficient and five would be showing off:
### BUILD Agents
In the BUILD layer we have agents that automate and streamline the creation of data architectures, process models, integrations, user interfaces, and business rules by generating and validating content based on natural language prompts, existing documents, and best practices.
Builds and optimizes BPMN processes using AI to generate, validate, and enhance workflows based on user-provided documents
Answers questions about the FlowX.AI platform as well as the bank itself based on uploaded documentation.
Streamline UI design by converting natural language prompts, Figma Designs or sketches into complete UI layouts with validations and data models.
Generate specific business rules, or code expressions using natural language and automate the code necessary to implement them.
See them in action (no 3D glasses required):
### MAINTAIN Agents
The agents in the MAINTAIN layer ensure ongoing compliance and generate comprehensive documentation to keep processes aligned with regulations and up-to-date at every step.
**Coming soon**
Ensures compliance across complex processes, business rules & massive datasets using regulatory documentation.
**Coming soon**
Generate comprehensive documentation step-by-step using predefined templates, starting from smaller blocks and building up to a complete technical document.
### RUN Agents
The agents in the RUN layer monitor, debug, and optimize running processes, providing real-time supervision, automated testing, and on-demand reporting to ensure efficient operation.
**Coming soon**
Supports maintenance & debugging of running processes and systems, and can generate reports & graphs on-demand.
**Coming soon**
Inspect process configuration during build to detect misconfigurations and suggest now the business process can be enhanced.
### OPTIMIZE Agents
The agents in the OPTIMIZE layer enhance business processes by testing, predicting outcomes, and suggesting improvements to increase efficiency and drive better results.
**Coming soon**
Run business processes with synthetic data to test outcomes, detect potential issues, and improve process efficiency based on execution time results.
**Coming soon**
Predicts business outcomes and optimizes processes by analyzing metrics, audit logs, and generating on-demand reports.
## Enterprise-Grade Security for Banking
FlowX AI Agents are built for the stringent security requirements of the banking sector:
* **Zero-Trust Security Model**: FlowX AI Agents utilize a dynamic Zero-Trust security approach, ensuring that all components within the system authenticate each other. This prevents unauthorized access and ensures that interactions within the platform remain secure.
* **Input and Output Scanners**: The platform employs a comprehensive set of input and output scanners, including those for detecting prompt injection, banning sensitive substrings, and sanitizing outputs. This minimizes the risk of harmful or unauthorized data being processed or exposed.
* **Custom Fine-Tuned Models**: FlowX develops custom fine-tuned models for each use case, tailored with curated data, which enhances the accuracy and security of AI agents, particularly in sensitive environments like banking.
* **Human Oversight and Monitoring**: The platform includes robust human-in-control mechanisms, enabling human oversight and control over AI agents to ensure ethical decision-making and secure interactions, crucial for high-stakes environments like banking.
## Advanced Hallucination Prevention
* **RAG**: We use Retrieval-Augmented Generation (RAG) to ground responses in reliable, external data sources.
* **Architecture**: We employ a multi-agent architecture where each task is assigned to dedicated agents, allowing for efficient task splitting and specialized processing.
* **JSON**: We enforce structured JSON outputs because letting an AI freestyle its responses would be like letting a toddler freestyle with finger paints in your living room.
* **LLM EVALUATION**: We relentlessly test models to find the perfect fit for each banking task. It's like speed dating, but for AI models, and the stakes are your bank's efficiency.
* **PROMPT Tuning**: Prompt tuning for each task customizes the model’s responses, enhancing accuracy and relevance while reducing the likelihood of hallucinations
# FlowX.AI platform setup
Source: https://docs.flowx.ai/5.1/ai-platform/ai-platform-setup
This guide provides essential information for clients who need to configure and connect to the FlowX.AI Platform services.
This guide provides essential information for clients who need to configure and connect to the FlowX.AI Platform services.
## Service endpoints
### Java services
| Service Name | Default Port | Protocol | Purpose |
| ------------------------- | ------------ | -------- | ----------------------- |
| **Connected Graph** | 9100 | GraphQL | Knowledge graph queries |
| **Agents** | 9101 | gRPC | Agent management |
| **Binaries** | 9102 | gRPC | File storage |
| **Conversations** | 9103 | gRPC | Conversation management |
| **Models** | 9104 | gRPC | AI model configuration |
| **Tenants** | 9105 | gRPC | Multi-tenant management |
| **Knowledge Graph (KAG)** | 9106 | gRPC | Knowledge ingestion |
### Python services
| Service Name | Default Port | Protocol | Purpose |
| ---------------- | ------------ | -------- | ------------------ |
| **Planner** | 9150 | gRPC | Task orchestration |
| **AI Developer** | 9151 | REST | Code generation |
| **AI Analyst** | 9152 | REST | Process analysis |
| **AI Designer** | 9153 | REST | UI generation |
> **Production Note**: In production deployments, all services run on port 9100. The ports listed above are for local development using docker-compose.
## Required environment variables
### Service discovery configuration
These variables control how services locate each other:
| Variable | Type | Default | Description |
| ------------------------------- | ------ | ------------- | --------------------------------------------------------------- |
| `GRPC_HOST_RESOLVER` | String | `k8s` | Service discovery method (`k8s` or `host`) |
| `GRPC_HOST_RESOLVER_HELM_CHART` | String | - | Helm chart name (required when `GRPC_HOST_RESOLVER=k8s`) |
| `GRPC_HOST_RESOLVER_FIXED_IP` | String | `ai-platform` | Fixed IP for services (required when `GRPC_HOST_RESOLVER=host`) |
**Configuration Examples:**
For Kubernetes deployment:
```bash theme={"system"}
GRPC_HOST_RESOLVER=k8s
GRPC_HOST_RESOLVER_HELM_CHART=ai-platform
```
For local/Docker deployment:
```bash theme={"system"}
GRPC_HOST_RESOLVER=host
GRPC_HOST_RESOLVER_FIXED_IP=localhost
```
### Service port configuration
| Variable | Type | Default | Description |
| -------------- | ------- | ------- | --------------------------- |
| `SERVICE_PORT` | Integer | 9100 | Port the service listens on |
### Service endpoint overrides
For custom service locations:
| Variable Pattern | Example | Description |
| ---------------------------------- | ------------------------------------------------------ | ---------------------------------- |
| `AI_SERVICE__ENDPOINT` | `AI_SERVICE_MODELS_ENDPOINT=host.docker.internal:9104` | Override specific service endpoint |
**Common Service IDs:**
* `MODELS` - AI Models service
* `CONVERSATIONS` - Conversations service
* `AGENTS` - Agents service
* `BINARIES` - Binaries service
* `TENANTS` - Tenants service
* `CONNECTED_GRAPH` - Connected Graph service
* `KAG` - Knowledge Graph service
### Python-specific variables
| Variable | Type | Default | Description |
| -------- | ------- | ------- | -------------------- |
| `DEBUG` | Boolean | `false` | Enable debug logging |
### Authentication configuration
| Variable | Type | Description |
| --------------------------------- | ------ | ---------------------- |
| `SECURITY_OAUTH2_BASE_SERVER_URL` | String | OAuth2 server base URL |
| `SECURITY_OAUTH2_REALM` | String | OAuth2 realm name |
| `SECURITY_OAUTH2_CLIENT_ID` | String | OAuth2 client ID |
## Client connection examples
### Testing service connectivity
Use grpcurl to test gRPC services:
```bash theme={"system"}
# List available services
grpcurl --plaintext localhost:9104 list
# List service methods
grpcurl --plaintext localhost:9104 list ai.flowx.ai.platform.services.internal.models.grpc.ModelsService
# Test connectivity
grpcurl --plaintext \
-d '{"message": "hello"}' \
localhost:9104 ai.flowx.ai.platform.services.internal.models.grpc.ModelsService.SayHello
```
### Docker Compose client configuration
For clients running alongside the AI Platform stack:
```yaml theme={"system"}
version: '3.8'
services:
your-client-app:
image: your-app:latest
environment:
# Connect to AI Platform services
AI_PLATFORM_MODELS_URL: "ai-platform-models:9104"
AI_PLATFORM_CONVERSATIONS_URL: "ai-platform-conversations:9103"
AI_PLATFORM_GRAPHQL_URL: "http://ai-platform-connected-graph:9100/graphql"
# For REST services
AI_DEVELOPER_URL: "http://ai-platform-developer:9151"
AI_ANALYST_URL: "http://ai-platform-analyst:9152"
AI_DESIGNER_URL: "http://ai-platform-designer:9153"
networks:
- ai-platform-network
networks:
ai-platform-network:
external: true
```
### Kubernetes client configuration
For clients deployed in the same Kubernetes cluster:
```yaml theme={"system"}
apiVersion: apps/v1
kind: Deployment
metadata:
name: your-client-app
spec:
template:
spec:
containers:
- name: app
image: your-app:latest
env:
# Service discovery via Kubernetes DNS
- name: GRPC_HOST_RESOLVER
value: "k8s"
- name: GRPC_HOST_RESOLVER_HELM_CHART
value: "ai-platform"
# Direct service URLs (alternative approach)
- name: AI_PLATFORM_MODELS_URL
value: "ai-platform-ai-models.default.svc.cluster.local:9100"
- name: AI_PLATFORM_GRAPHQL_URL
value: "http://ai-platform-connected-graph.default.svc.cluster.local:9100/graphql"
```
## Prerequisites for clients
### Java clients
If integrating with Java-based services:
* Java 17 or higher
* gRPC client libraries
* Protocol Buffer definitions (available from the platform team)
### Python clients
If integrating with Python-based services:
* Python 3.12.9 or higher
* HTTP client libraries (requests, httpx, etc.)
* WebSocket client for streaming (optional)
### General requirements
* Network access to AI Platform services
* Valid OAuth2 credentials
* SSL/TLS certificates for production deployments
## Common integration patterns
### Service health checks
Before making requests, verify service availability:
```bash theme={"system"}
# Check if gRPC service is responsive
grpcurl --plaintext ${SERVICE_HOST}:${SERVICE_PORT} grpc.health.v1.Health/Check
# Check HTTP service health (for REST services)
curl http://${SERVICE_HOST}:${SERVICE_PORT}/health
```
### Load balancing
For production deployments, clients should:
1. **Use service discovery** rather than hardcoded IPs
2. **Implement retry logic** with exponential backoff
3. **Configure connection pooling** for gRPC clients
4. **Monitor service health** and route around unhealthy instances
### Security considerations
1. **Always use HTTPS/TLS** in production
2. **Rotate OAuth2 tokens** regularly
3. **Implement proper timeout handling**
4. **Use connection limits** to prevent resource exhaustion
## Troubleshooting
### Connection issues
1. **Verify environment variables** are set correctly
2. **Check network connectivity** between client and services
3. **Validate OAuth2 configuration** and token validity
4. **Review service logs** for authentication/authorization errors
### Service discovery problems
```bash theme={"system"}
# For Kubernetes deployments
kubectl get services -l app=ai-platform
# Check if Helm chart is deployed
helm list -n ai-platform
# Verify DNS resolution
nslookup ai-platform-ai-models.default.svc.cluster.local
```
### Docker network issues
```bash theme={"system"}
# List Docker networks
docker network ls
# Inspect AI Platform network
docker network inspect ai-platform-network
# Check container connectivity
docker exec -it your-container ping ai-platform-models
```
## Support
When requesting support, please provide:
1. **Environment configuration** (environment variables)
2. **Deployment method** (Docker, Kubernetes, local)
3. **Client application details** (language, framework)
4. **Error messages** and logs
5. **Network topology** if using custom networking
For technical issues, include the output of:
```bash theme={"system"}
# Service connectivity test
grpcurl --plaintext ${SERVICE_HOST}:${SERVICE_PORT} list
# Environment variables (sanitized)
env | grep -E "(GRPC_|AI_SERVICE_|SECURITY_)" | sed 's/=.*/=***/'
```
# Compute process warnings
Source: https://docs.flowx.ai/5.1/docs/api/add-misconfigurations
GET {{baseUrlAdmin}}/api/process-versions/compute
Trigger computation of warnings and misconfigurations for existing process definitions from previous FlowX.AI versions
This endpoint triggers the computation of warnings and misconfigurations for all existing process definitions, particularly those created in previous FlowX.AI versions (\< 4.1). Use this endpoint to ensure your legacy processes are analyzed for potential issues and compliance with current platform standards.
This operation analyzes process definitions to identify configuration issues, deprecated patterns, and potential optimization opportunities. It's essential for maintaining process quality after platform upgrades.
## Authentication
This endpoint requires admin-level authentication. Ensure you have proper administrative privileges to perform system-wide process analysis.
Bearer token with admin privileges for API authentication. Format: `Bearer YOUR_ADMIN_TOKEN`
## URL Parameters
The base URL of the FlowX Admin service where process management operations are performed.
**Example:** `https://admin.your-domain.com`
Path segment indicating this is an API endpoint within the admin service.
Path segment specifying that this endpoint operates on process version resources. This groups all process version management operations under a common path.
Path segment identifying the specific operation to perform. This endpoint triggers the computation of warnings and misconfigurations for all process versions.
## Headers
Content type for the request. Should be set to `application/json`.
Cache control directive. Use `no-cache` to ensure the computation runs fresh.
Content type that the client can accept. Supports `*/*` for all types.
## Request Examples
```bash cURL theme={"system"}
curl -X GET '{{baseUrlAdmin}}/api/process-versions/compute' \
-H 'Authorization: Bearer YOUR_ADMIN_TOKEN' \
-H 'Content-Type: application/json' \
-H 'Cache-Control: no-cache' \
-H 'Accept: */*'
```
```javascript Node.js theme={"system"}
const response = await fetch('{{baseUrlAdmin}}/api/process-versions/compute', {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_ADMIN_TOKEN',
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Accept': '*/*'
}
});
const result = await response.json();
```
```python Python theme={"system"}
import requests
response = requests.get(
'{{baseUrlAdmin}}/api/process-versions/compute',
headers={
'Authorization': 'Bearer YOUR_ADMIN_TOKEN',
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Accept': '*/*'
}
)
result = response.json()
```
# Clear cache
Source: https://docs.flowx.ai/5.1/docs/api/clear-cache
POST {{baseUrlAdmin}}/api/internal/cache/clear
Clear specific application caches to force refresh of cached data and resolve performance issues
This endpoint allows administrators to clear specific application caches within the FlowX platform. Cache clearing is typically used during maintenance, after configuration changes, or when troubleshooting performance issues that may be caused by stale cached data.
This operation can temporarily impact application performance as the system rebuilds cleared caches. Use during maintenance windows when possible.
This operation requires admin-level authentication and should only be performed by authorized system administrators.
The base URL of your FlowX Admin application. This is the admin interface endpoint where administrative operations are performed.
Example: `https://admin.your-domain.com`
Bearer token for admin authentication. Must be a valid admin user token with cache management permissions.
Format: `Bearer `
Must be set to `application/json` for proper request processing.
Array of cache names to be cleared. Each cache name should be a valid string identifier for an existing cache in the system.
* `flowx:core:cache` - Core application cache
```json theme={"system"}
{
"cacheNames": [
"flowx:core:cache"
]
}
```
```bash cURL theme={"system"}
curl -X POST '{{baseUrlAdmin}}/api/internal/cache/clear' \
-H 'Authorization: Bearer ' \
-H 'Content-Type: application/json' \
-d '{
"cacheNames": [
"flowx:core:cache"
]
}'
```
```javascript JavaScript theme={"system"}
const response = await fetch('{{baseUrlAdmin}}/api/internal/cache/clear', {
method: 'POST',
headers: {
'Authorization': 'Bearer ',
'Content-Type': 'application/json'
},
body: JSON.stringify({
cacheNames: [
'flowx:core:cache'
]
})
});
const result = await response.json();
```
```python Python theme={"system"}
import requests
url = "{{baseUrlAdmin}}/api/internal/cache/clear"
headers = {
"Authorization": "Bearer ",
"Content-Type": "application/json"
}
payload = {
"cacheNames": [
"flowx:core:cache",
]
}
response = requests.post(url, headers=headers, json=payload)
result = response.json()
```
## Response
Indicates the success or failure of the cache clearing operation.
* `success` - Cache clearing completed successfully
* `error` - Cache clearing failed
Optional descriptive message providing additional details about the operation result.
Array of cache names that were successfully cleared. Only present in successful responses.
ISO 8601 timestamp of when the operation was completed.
```json Success (200) theme={"system"}
{
"status": "success",
"message": "Caches cleared successfully",
"clearedCaches": [
"flowx:core:cache"
],
"timestamp": "2024-01-15T10:30:00Z"
}
```
```json Error (400) - Invalid Cache Name theme={"system"}
{
"status": "error",
"message": "One or more cache names are invalid",
"invalidCaches": [
"invalid:cache:name"
],
"timestamp": "2024-01-15T10:30:00Z"
}
```
```json Error (401) - Unauthorized theme={"system"}
{
"status": "error",
"message": "Authentication required. Please provide a valid admin token.",
"timestamp": "2024-01-15T10:30:00Z"
}
```
```json Error (403) - Forbidden theme={"system"}
{
"status": "error",
"message": "Insufficient permissions. Admin role required for cache operations.",
"timestamp": "2024-01-15T10:30:00Z"
}
```
# Force platform rescan
Source: https://docs.flowx.ai/5.1/docs/api/force-rescan
GET {baseUrl}/api/platform/discover
Trigger a forced rescan of the platform to discover and refresh all available services and configurations
The Force Platform Rescan API endpoint allows you to trigger an immediate rescan of the FlowX platform to discover new or updated services, configurations, and components. This is particularly useful when you've deployed new services or made configuration changes that need to be immediately recognized by the platform.
This endpoint performs a comprehensive scan of the platform infrastructure and may take some time to complete depending on your platform size and complexity.
## Endpoint
```bash cURL theme={"system"}
curl -X GET '{baseUrl}/api/platform/discover' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Cache-Control: no-cache' \
-H 'Accept: */*'
```
The base URL of your FlowX platform instance
## Headers
Bearer token for API authentication. Format: `Bearer YOUR_API_TOKEN`
Controls caching behavior. Recommended to use `no-cache` to ensure fresh discovery results
Specifies the media types that are acceptable for the response
Identifies the client application making the request
Specifies the content encoding that the client can understand
## Response
```json Success Response theme={"system"}
{
"scanTimestamp": "2024-10-09T14:32:15.847Z",
"totalServices": 15,
"healthyServices": 14,
"unhealthyServices": 1,
"services": {
"flowxEngine": {
"name": "FlowX Engine",
"version": "5.1.0",
"status": "healthy",
"endpoint": "http://flowx-engine:8080",
"capabilities": ["process-execution", "workflow-management", "business-rules"],
"lastHealthCheck": "2024-10-09T14:32:10Z"
},
"flowxDesigner": {
"name": "FlowX Designer",
"version": "5.1.0",
"status": "healthy",
"endpoint": "http://flowx-designer:3000",
"capabilities": ["process-design", "ui-design", "form-builder"],
"lastHealthCheck": "2024-10-09T14:32:11Z"
},
"flowxAdmin": {
"name": "FlowX Admin",
"version": "5.1.0",
"status": "healthy",
"endpoint": "http://flowx-admin:4000",
"capabilities": ["user-management", "system-config", "monitoring"],
"lastHealthCheck": "2024-10-09T14:32:12Z"
},
"flowxCms": {
"name": "FlowX CMS",
"version": "5.1.0",
"status": "healthy",
"endpoint": "http://flowx-cms:5000",
"capabilities": ["content-management", "localization", "asset-management"],
"lastHealthCheck": "2024-10-09T14:32:13Z"
},
"documentManagement": {
"name": "Document Management Plugin",
"version": "5.1.0",
"status": "healthy",
"endpoint": "http://document-plugin:8081",
"capabilities": ["document-storage", "file-processing", "document-templates"],
"lastHealthCheck": "2024-10-09T14:32:14Z"
},
"notifications": {
"name": "Notifications Plugin",
"version": "5.1.0",
"status": "unhealthy",
"endpoint": "http://notifications-plugin:8082",
"capabilities": ["email-notifications", "sms-notifications", "push-notifications"],
"lastHealthCheck": "2024-10-09T14:30:00Z",
"error": "Connection timeout - service may be down"
},
"taskManagement": {
"name": "Task Management Plugin",
"version": "5.1.0",
"status": "healthy",
"endpoint": "http://task-plugin:8083",
"capabilities": ["task-assignment", "task-tracking", "workflow-integration"],
"lastHealthCheck": "2024-10-09T14:32:15Z"
}
},
"infrastructure": {
"database": {
"type": "PostgreSQL",
"version": "13.7",
"status": "healthy",
"connections": {
"active": 45,
"idle": 15,
"max": 100
},
"lastHealthCheck": "2024-10-09T14:32:00Z"
},
"messageBroker": {
"type": "Apache Kafka",
"version": "3.4.0",
"status": "healthy",
"brokers": 3,
"topics": 28,
"lastHealthCheck": "2024-10-09T14:32:05Z"
},
"redis": {
"type": "Redis",
"version": "7.0.11",
"status": "healthy",
"memory": {
"used": "245MB",
"available": "1GB"
},
"lastHealthCheck": "2024-10-09T14:32:08Z"
}
},
"externalIntegrations": {
"authProvider": {
"name": "Keycloak",
"status": "healthy",
"endpoint": "https://auth.company.com",
"lastHealthCheck": "2024-10-09T14:32:00Z"
},
"documentStorage": {
"name": "MinIO S3",
"status": "healthy",
"endpoint": "https://storage.company.com",
"buckets": 12,
"lastHealthCheck": "2024-10-09T14:32:02Z"
}
},
"summary": {
"scanDuration": "4.2s",
"newServicesFound": 0,
"configurationChanges": 2,
"issuesDetected": 1,
"recommendations": [
"Check notifications plugin connectivity",
"Consider scaling database connections"
]
}
}
```
ISO 8601 formatted timestamp of when the platform rescan was completed
Total number of services discovered during the rescan
Number of services that are currently healthy and operational
Number of services that are experiencing issues or are unreachable
Detailed information about all discovered FlowX platform services
Core FlowX Engine service information
Display name of the service
Current version of the service
Health status: `healthy`, `unhealthy`, or `unknown`
Service endpoint URL for internal communication
List of capabilities provided by this service
Timestamp of the most recent health check
FlowX Designer service for process and UI design
FlowX Admin service for system administration
FlowX CMS service for content management
Document Management Plugin service
Notifications Plugin service (may include error details if unhealthy)
Task Management Plugin service
Information about underlying infrastructure components
Database system information including connection pool status
Database type (e.g., PostgreSQL, MySQL)
Database version
Database health status
Connection pool statistics with active, idle, and maximum connections
Message broker information including cluster status
Redis cache information including memory usage
Status of external system integrations
Authentication provider (e.g., Keycloak, LDAP) connection status
External document storage system status and metrics
Summary information about the rescan operation
Time taken to complete the platform rescan
Number of new services discovered since the last scan
Number of configuration changes detected
Number of issues or problems identified during the scan
List of recommended actions based on scan results
## Error Responses
```json Authentication Error theme={"system"}
{
"error": "Unauthorized",
"message": "Invalid or missing authentication token",
"status": 401
}
```
```json Server Error theme={"system"}
{
"error": "Internal Server Error",
"message": "Platform rescan failed due to internal error",
"status": 500,
"details": "Connection timeout while discovering services"
}
```
## Usage Examples
### Basic Platform Rescan
```javascript Node.js theme={"system"}
const axios = require('axios');
async function forcePlatformRescan() {
try {
const response = await axios.get(`${baseUrl}/api/platform/discover`, {
headers: {
'Authorization': `Bearer ${apiToken}`,
'Cache-Control': 'no-cache'
}
});
const scanResult = response.data;
console.log(`Rescan completed in ${scanResult.summary.scanDuration}`);
console.log(`Services: ${scanResult.healthyServices}/${scanResult.totalServices} healthy`);
if (scanResult.summary.issuesDetected > 0) {
console.warn(`Issues detected: ${scanResult.summary.issuesDetected}`);
scanResult.summary.recommendations.forEach(rec => {
console.warn(`- ${rec}`);
});
}
return scanResult;
} catch (error) {
console.error('Rescan failed:', error.response?.data || error.message);
throw error;
}
}
```
```python Python theme={"system"}
import requests
def force_platform_rescan(base_url, api_token):
headers = {
'Authorization': f'Bearer {api_token}',
'Cache-Control': 'no-cache'
}
try:
response = requests.get(f'{base_url}/api/platform/discover', headers=headers)
response.raise_for_status()
scan_result = response.json()
print(f"Rescan completed in {scan_result['summary']['scanDuration']}")
print(f"Services: {scan_result['healthyServices']}/{scan_result['totalServices']} healthy")
if scan_result['summary']['issuesDetected'] > 0:
print(f"Issues detected: {scan_result['summary']['issuesDetected']}")
for recommendation in scan_result['summary']['recommendations']:
print(f"- {recommendation}")
return scan_result
except requests.exceptions.RequestException as e:
print(f"Rescan failed: {e}")
raise
```
```bash cURL theme={"system"}
# Basic rescan request
curl -X GET 'https://your-platform.com/api/platform/discover' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Cache-Control: no-cache'
# With verbose output for debugging
curl -X GET 'https://your-platform.com/api/platform/discover' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Cache-Control: no-cache' \
-v
```
## When to Use Force Rescan
**After deploying new services**
Use force rescan when you've deployed new microservices or updated existing ones to ensure the platform recognizes all available endpoints and configurations.
```bash theme={"system"}
# After deployment
kubectl apply -f new-service.yaml
# Then trigger rescan
curl -X GET '/api/platform/discover' -H 'Authorization: Bearer TOKEN'
```
**After configuration changes**
Trigger a rescan when you've updated platform configurations, environment variables, or service registrations that need immediate recognition.
**When services aren't recognized**
If the platform isn't detecting services or configurations that should be available, a force rescan can help resolve discovery issues.
# Add new Kafka exchange mock
Source: https://docs.flowx.ai/5.1/docs/api/mocks/add-kafka-mock
POST {MOCK_ADAPTER_URL}/api/kafka-exchanges/
Create a new Kafka exchange mock to simulate message flows between FlowX Engine and external integrations during development and testing
This endpoint allows you to create a new Kafka exchange mock that simulates the message flow between FlowX Engine and external integrations. Use this during development and testing to mock third-party system responses without requiring actual external services.
Kafka mocks are essential for testing process flows that depend on external integrations, allowing you to simulate various response scenarios and edge cases.
## Authentication
This endpoint requires Bearer Token authentication. Include your API token in the Authorization header.
Bearer token for API authentication. Format: `Bearer YOUR_API_TOKEN`
## URL Parameters
The base URL of the mock adapter service where Kafka exchange mocks are managed.
## Request Body Parameters
The Kafka topic name that the external integration listens on for incoming messages from FlowX Engine. This should match exactly with your integration's configuration.
**Example:** `ai.flowx.in.adapter.kyc.clientCheckPf.v1`
The Kafka topic name that FlowX Engine listens on for replies from the external integration. This should match the topic configured in your process definition.
**Example:** `to.flowx.updates.qa.adapter.kyc.clientcheck.v1`
The JSON message that will be sent to the external integration. Use `null` if you want to test scenarios where no specific message content is required, or provide a JSON string for specific message simulation.
The JSON response message that the mock will return to FlowX Engine, simulating the external integration's response. This allows you to test different response scenarios.
## Request Example
```bash cURL theme={"system"}
curl -X POST '{MOCK_ADAPTER_URL}/api/kafka-exchanges/' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"incomingTopic": "ai.flowx.in.adapter.kyc.clientCheckPf.v1",
"outgoingTopic": "to.flowx.updates.qa.adapter.kyc.clientcheck.v1",
"receivedMessageJson": null,
"sentMessageJson": "{ \"status\": \"success\", \"response\": [] }"
}'
```
```javascript Node.js theme={"system"}
const response = await fetch('{MOCK_ADAPTER_URL}/api/kafka-exchanges/', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
incomingTopic: 'ai.flowx.in.adapter.kyc.clientCheckPf.v1',
outgoingTopic: 'to.flowx.updates.qa.adapter.kyc.clientcheck.v1',
receivedMessageJson: null,
sentMessageJson: '{ "status": "success", "response": [] }'
})
});
```
```python Python theme={"system"}
import requests
response = requests.post(
'{MOCK_ADAPTER_URL}/api/kafka-exchanges/',
headers={
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
json={
'incomingTopic': 'ai.flowx.in.adapter.kyc.clientCheckPf.v1',
'outgoingTopic': 'to.flowx.updates.qa.adapter.kyc.clientcheck.v1',
'receivedMessageJson': None,
'sentMessageJson': '{ "status": "success", "response": [] }'
}
)
```
## Response Examples
```json Success (201 Created) theme={"system"}
{
"id": "mock_exchange_123",
"incomingTopic": "ai.flowx.in.adapter.kyc.clientCheckPf.v1",
"outgoingTopic": "to.flowx.updates.qa.adapter.kyc.clientcheck.v1",
"receivedMessageJson": null,
"sentMessageJson": "{ \"status\": \"success\", \"response\": [] }",
"createdAt": "2024-01-15T10:30:00Z",
"isActive": true
}
```
```json Error (400 Bad Request) theme={"system"}
{
"error": "Invalid request",
"message": "incomingTopic is required and must be a valid topic name",
"code": "INVALID_TOPIC_NAME"
}
```
```json Error (401 Unauthorized) theme={"system"}
{
"error": "Unauthorized",
"message": "Invalid or missing authentication token"
}
```
## Usage Tips
**Testing Different Scenarios**: Create multiple mocks with different `sentMessageJson` values to test various response scenarios like success, failure, and edge cases in your process flows.
**Topic Naming**: Ensure your topic names follow your organization's Kafka topic naming conventions and match exactly with your integration configurations.
Mock exchanges are intended for development and testing environments only. Do not use mocked integrations in production systems.
# View Kafka Exchanges
Source: https://docs.flowx.ai/5.1/docs/api/mocks/view-kafka-exchanges
GET {MOCK_ADAPTER_URL}/api/kafka-exchanges
Retrieve all available Kafka exchanges from the mock adapter service
Retrieve a list of all available Kafka exchanges configured in the mock adapter service. This endpoint provides information about active Kafka message exchanges that can be used for testing and development purposes.
## Authentication
This endpoint requires authentication via Bearer token.
Bearer token for API authentication. Format: `Bearer YOUR_API_TOKEN`
## Headers
The user context for the request execution. Used for audit and tracking purposes.
Cache control directive. Use `no-cache` to bypass caching.
Content type that the client can accept. Supports `*/*` for all types.
Acceptable encoding methods for response compression. Supports `gzip, deflate, br`.
## Request Example
```bash cURL theme={"system"}
curl -X GET '{MOCK_ADAPTER_URL}/api/kafka-exchanges' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'EXECUTION-USER: upload_user' \
-H 'Cache-Control: no-cache' \
-H 'Accept: */*' \
-H 'Accept-Encoding: gzip, deflate, br'
```
# Execute action
Source: https://docs.flowx.ai/5.1/docs/api/rest4
POST https://admin.devmain.flowxai.dev/onboarding/api/runtime/process/{processUuid}/token/{tokenUuid}/ui-action/{uiActionFlowxUuid}/context/main/execute
This endpoint executes an action within a specific process runtime.
## Base URL
* Always prepend the endpoint with the correct Base URL.
* For different environments (like staging or production), switch the base URL accordingly.
## Request Headers
Bearer token required for authentication. Format: `Bearer `.
## Path Parameters
The unique identifier of the process instance.
The unique identifier of the runtime token.
The unique identifier of the UI action to execute.
## Response fields
The unique identifier of the token associated with the process.
The ID of the current node in the process execution flow.
Reserved for future use. Currently always `null`.
Indicates whether a back action is triggered. Default is `false`.
Indicates whether the token should be reset. Default is `false`.
# Get Build Info
Source: https://docs.flowx.ai/5.1/docs/api/start-process/get-build-info
GET https://admin.devmain.flowxai.dev/rtm/api/runtime/wks/{workspaceId}/app/{appId}/build/info
This endpoint retrieves information about the build of a specific project, as set by the Active policy.
## Base URL
* Always prepend the endpoint with the correct Base URL.
* For different environments (like staging or production), switch the base URL accordingly.
This endpoint is only accessible via the admin environment. Ensure that you are using the correct admin base URL when making requests.
## Authorization
Bearer authentication header of the form Bearer ``, where `` is your auth token.
## Request headers
Bearer token required for authentication. Format: `Bearer `.
Specifies the media types that are acceptable for the response. Defaults to accepting JSON and plain text responses.
Indicates supported content encoding algorithms for the response.
Specifies language preferences for the response.
## Path Parameters
**Need help finding the Application ID or Workspace ID?** See the [Finding Identifiers and Parameters](../../platform-deep-dive/integrations/finding-identifiers-and-parameters) guide for detailed instructions on where to locate these values in FlowX Designer.
The unique identifier of the workspace that contains the application. This parameter is used to search for the appId within the specified workspace. This value is populated by the Configurator in the container app and varies across different environments (e.g., production, development, UAT).
The unique identifier of the application whose build information is being retrieved.
```bash theme={"system"}
curl --request GET \
--url https://admin.devmain.flowxai.dev/rtm/api/runtime/wks/{workspaceId}/app/{appId}/build/info \
--header "Authorization: Bearer " \
--header "Flowx-Platform: web"
```
## Response Fields
The unique identifier of the workspace that contains the application.
The unique identifier of the build entity.
The ID of the application associated with the build.
Contains configuration settings related to the build.
The version ID of the application associated with the build.
Indicates the supported platforms for the build (e.g., `OMNICHANNEL`).
The ID of the theme applied to the build.
Defines the format used for displaying dates.
Specifies the date format style (e.g., `short`).
Configuration for displaying numerical values, including decimal precision.
The minimum number of decimal places to display in numerical values.
The maximum number of decimal places to display in numerical values.
Defines the format used for displaying currency.
Specifies the format for displaying currency (e.g., `isoCode`).
The default language code for the build (e.g., `en` for English).
```json Success theme={"system"}
{
"workspaceId": "12341234-1234-1234-1234123412341234",
"buildId": "11111111-1111-1111-1111-111111111111",
"applicationId": "4ffeeb22-e84a-400f-9e07-b305ab0b4241",
"buildSettings": {
"applicationVersionId": "99f24e3f-e331-48ad-a503-2cc1cee5fb95",
"platforms": "OMNICHANNEL",
"themeId": "12345678-1234-1234-1234-123456789012",
"dateDisplayFormat": {
"format": "short"
},
"numberDisplayFormat": {
"minDecimals": 1,
"maxDecimals": 2
},
"currencyDisplayFormat": {
"format": "isoCode"
},
"defaultLanguageCode": "en"
}
}
```
## Response Headers
Indicates whether the response can be exposed when credentials are present. Example: `true`.
Lists the allowed headers in the actual request.
Specifies the allowed HTTP methods.
Indicates the allowed origin for cross-origin requests.
Specifies the encoding used to compress the response.
Indicates the media type of the response content.
Enforces secure (HTTPS) connections to the server.
Specifies that the response may vary based on the `Accept-Encoding` request header.
Prevents the browser from MIME-sniffing a response away from the declared `Content-Type`.
Controls the cross-site scripting (XSS) filter. Example: `0` (disabled).
# Start process by build id and process name
Source: https://docs.flowx.ai/5.1/docs/api/start-process/rest2
POST https://admin.devmain.flowxai.dev/rtm/api/runtime/app/{appId}/build/{buildId}/process-name/{processDefinitionName}/start
This endpoint initiates a process in the application runtime environment using the specified `buildId` and `processDefinitionName`.
## Base URL
* Always prepend the endpoint with the correct Base URL.
* For different environments (like staging or production), switch the base URL accordingly.
## Path Parameters
**Need help finding these IDs?** See the [Finding Identifiers and Parameters](../../platform-deep-dive/integrations/finding-identifiers-and-parameters) guide for detailed instructions on where to locate these values in FlowX Designer.
The pair (`buildId`, `appId`) must be valid and associated in the system. The `workspaceId` is internally resolved using the `buildId` from the build collection.
The ID of the application. Must form a valid pair with the `buildId`.
The build ID for the runtime environment. Must form a valid pair with the `appId`.
When integrating from a frontend application or renderer, use the `buildId` value returned in the [build info response](./get-build-info).
The name of the process definition to start.
## Request headers
Bearer token required for authentication. Format: `Bearer `.
Indicates the media type of the request body. Must be set to `application/json`.
Identifies the client platform (e.g., `web`).
Specifies the media types that are acceptable for the response. Example: `application/json, text/plain, */*`.
Indicates supported content encoding algorithms for the response. Example: `gzip, deflate, br, zstd`.
Specifies language preferences for the response. Example: `en-GB,en-US;q=0.9,en;q=0.8`.
Identifies the client software making the request (e.g., browser or tool).
The address of the previous web page from which the request was made.
## Request Body
This endpoint requires a JSON request body. The exact payload structure should conform to the process definition schema associated with `{processDefinitionName}`.
Description of what key1 represents
Description of what key2 represents
### Example Request Body
```json theme={"system"}
{
"key1": "value1",
"key2": "value2"
}
```
## Response
The unique identifier of the process definition within FlowX.
The ID of the build associated with the process.
The status of the build at the time the process was started (e.g., "COMMITTED").
The ID of the application where the process was initiated.
The ID of the parent application if applicable, otherwise `null`.
The ID of the root application if applicable, otherwise `null`.
The name of the process definition that was started.
A list of tokens representing active workflow states within the process.
The current state of the process instance (e.g., "STARTED").
The unique identifier for the process instance.
Metadata related to the process instance, including:
* `processInstanceId`: The numeric ID of the process instance.
* `processInstanceUuid`: The UUID of the process instance.
### Response Headers
Indicates whether the response can be exposed when credentials are present. Value is `true`.
Lists the allowed headers in the actual request. Example: `DNT, Keep-Alive, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type, Range, Authorization, flowx-platform`.
Specifies the allowed HTTP methods. Example: `GET, PUT, POST, DELETE, PATCH`.
Indicates the allowed origin for cross-origin requests. Example: `https://demo-angular.devmain.flowxai.dev`.
Specifies the encoding used to compress the response. Example: `gzip`.
Indicates the media type of the response content. Example: `application/json`.
Enforces secure (HTTPS) connections to the server. Example: `max-age=31536000 ; includeSubDomains`.
Specifies that the response may vary based on the `Accept-Encoding` request header. Example: `Accept-Encoding`.
Prevents the browser from MIME-sniffing a response away from the declared `Content-Type`. Example: `nosniff`.
Controls the cross-site scripting (XSS) filter. Example: `0` (disabled).
```bash theme={"system"}
curl -X POST "https://admin.devmain.flowxai.dev/rtm/api/runtime/app/{appId}/build/{buildId}/process-name/{processDefinitionName}/start" \
-H "Authorization: Bearer " \ # Required
-H "Content-Type: application/json" \ # Required
-H "flowx-platform: web" \ # Required
-H "Accept: application/json, text/plain, */*" \ # Optional
-H "Accept-Encoding: gzip, deflate, br, zstd" \ # Optional
-H "Accept-Language: en-GB,en-US;q=0.9,en;q=0.8" \ # Optional
-d '{
"key": "value"
}'
```
# Start process with name and inherit values
Source: https://docs.flowx.ai/5.1/docs/api/start-process/rest3
POST {ENGINE_URL}/api/process/{PROCESS_DEFINITION_NAME}/start/inheritFrom/{RELATED_PROCESS_INSTANCE_UUID}
The `paramsToInherit` map should hold the needed values on one the following keys, depending on the desired outcome:
* `paramsToCopy` - this is used to pick only a subset of parameters to be inherited from the parent process; it holds the list of key names that will be inherited from the parent parameters
* `withoutParams` - this is used in case we need to remove some parameter values from the parent process before inheriting them; it holds the list of key names that will be removed from the parent parameters
If none of these keys have values, all the parameter values from the parent process will be inherited by the new process.
**Need help finding these IDs?** See the [Finding Identifiers and Parameters](../../platform-deep-dive/integrations/finding-identifiers-and-parameters) guide for detailed instructions on where to locate process instance UUIDs and other identifiers in FlowX Designer.
The UUID of the related process instance from which values will be inherited.
The name of the process definition to be started.
A map containing information about which values to copy from the related process instance.
# Start process from UI with resource definition and inherit values
Source: https://docs.flowx.ai/5.1/docs/api/start-process/start-process-rdi-inherit
POST {BASE_URL}/api/runtime/wks/{workspaceId}/app/{appId}/rdi/{resourceDefinitionId}/start/inherit-from/{processInstanceId}
This endpoint starts a process in the runtime environment using a resource definition ID and inherits parameter values from a related process instance. This endpoint is typically used from UI actions.
## Base URL
* Always prepend the endpoint with the correct Base URL for your environment.
* For different environments (like staging or production), switch the base URL accordingly.
## Path Parameters
**Need help finding these IDs?** See the [Finding Identifiers and Parameters](../../platform-deep-dive/integrations/finding-identifiers-and-parameters) guide for detailed instructions on where to locate these values in FlowX Designer.
The combination of `workspaceId`, `appId`, and `resourceDefinitionId` must be valid and associated in the system. The `processInstanceId` must reference an existing process instance from which values will be inherited.
The ID of the workspace where the process will be started. This parameter is now required to support multi-workspace environments.
The ID of the application in which the process will be started.
The ID of the resource definition that defines the process to be started. This is typically used when starting processes from UI actions.
The UUID of the related process instance from which parameter values will be inherited. This allows the new process to start with data from an existing process.
## Request Headers
Bearer token required for authentication. Format: `Bearer `.
Indicates the media type of the request body. Must be set to `application/json`.
Identifies the client platform (e.g., `web`, `mobile`).
Specifies the media types that are acceptable for the response. Example: `application/json, text/plain, */*`.
Indicates supported content encoding algorithms for the response. Example: `gzip, deflate, br, zstd`.
Specifies language preferences for the response. Example: `en-GB,en-US;q=0.9,en;q=0.8`.
## Request Body
The request body should contain a `paramsToInherit` object that controls which parameter values are inherited from the related process instance.
A map containing information about which values to copy from the related process instance. This object can contain one of the following keys:
* **`paramsToCopy`** (array of strings): Use this to pick only a subset of parameters to be inherited from the parent process. It holds the list of key names that will be inherited from the parent parameters.
* **`withoutParams`** (array of strings): Use this to remove specific parameter values from the parent process before inheriting them. It holds the list of key names that will be removed from the parent parameters.
If neither key is provided or both are empty, all parameter values from the parent process will be inherited by the new process.
### Example Request Body
```json Inherit specific parameters theme={"system"}
{
"paramsToInherit": {
"paramsToCopy": ["customerName", "customerId", "accountType"]
}
}
```
```json Exclude specific parameters theme={"system"}
{
"paramsToInherit": {
"withoutParams": ["temporaryToken", "sessionData"]
}
}
```
```json Inherit all parameters theme={"system"}
{
"paramsToInherit": {}
}
```
When designing your process inheritance strategy, consider which parameters are truly needed in the new process. Use `paramsToCopy` for explicit control or `withoutParams` to exclude sensitive or temporary data.
## Response
The unique identifier of the process definition within FlowX.
The ID of the build associated with the process.
The status of the build at the time the process was started (e.g., "COMMITTED").
The ID of the application where the process was initiated.
The ID of the workspace where the process was started.
The ID of the parent application if applicable, otherwise `null`.
The ID of the root application if applicable, otherwise `null`.
The name of the process definition that was started.
A list of tokens representing active workflow states within the process.
The current state of the process instance (e.g., "STARTED").
The unique identifier for the newly created process instance.
Metadata related to the process instance, including:
* `processInstanceId`: The numeric ID of the process instance.
* `processInstanceUuid`: The UUID of the process instance.
### Response Headers
Indicates whether the response can be exposed when credentials are present. Value is `true`.
Lists the allowed headers in the actual request.
Specifies the allowed HTTP methods.
Indicates the allowed origin for cross-origin requests.
Specifies the encoding used to compress the response.
Indicates the media type of the response content.
Enforces secure (HTTPS) connections to the server.
Prevents the browser from MIME-sniffing a response away from the declared `Content-Type`.
Controls the cross-site scripting (XSS) filter.
```bash cURL - Inherit specific parameters theme={"system"}
curl -X POST "{BASE_URL}/api/runtime/wks/{workspaceId}/app/{appId}/rdi/{resourceDefinitionId}/start/inherit-from/{processInstanceId}" \
-H "Authorization: Bearer " \
-H "Content-Type: application/json" \
-H "flowx-platform: web" \
-H "Accept: application/json" \
-d '{
"paramsToInherit": {
"paramsToCopy": ["customerName", "customerId", "accountType"]
}
}'
```
```bash cURL - Exclude specific parameters theme={"system"}
curl -X POST "{BASE_URL}/api/runtime/wks/{workspaceId}/app/{appId}/rdi/{resourceDefinitionId}/start/inherit-from/{processInstanceId}" \
-H "Authorization: Bearer " \
-H "Content-Type: application/json" \
-H "flowx-platform: web" \
-H "Accept: application/json" \
-d '{
"paramsToInherit": {
"withoutParams": ["temporaryToken", "sessionData"]
}
}'
```
```bash cURL - Inherit all parameters theme={"system"}
curl -X POST "{BASE_URL}/api/runtime/wks/{workspaceId}/app/{appId}/rdi/{resourceDefinitionId}/start/inherit-from/{processInstanceId}" \
-H "Authorization: Bearer " \
-H "Content-Type: application/json" \
-H "flowx-platform: web" \
-H "Accept: application/json" \
-d '{
"paramsToInherit": {}
}'
```
```json Success Response theme={"system"}
{
"processDefinitionFlowxUuid": "66e74ea1-0775-42b4-b27e-a4a21ea78dfc",
"buildId": "7d5560be-3846-49fa-9c17-4059c54c7c5f",
"buildStatusAtStart": "COMMITTED",
"applicationId": "dbe0ab87-539b-4015-962d-6e73226b9e58",
"workspaceId": "ws-123456789",
"parentApplicationId": null,
"rootApplicationId": null,
"processDefinitionName": "customer_onboarding_child",
"tokens": [
{
"id": 2112691,
"state": "ACTIVE",
"statusCurrentNode": "ARRIVED"
}
],
"state": "STARTED",
"uuid": "24cb4216-83a4-4782-84cb-d702b54b9b7d",
"instanceMetadata": {
"processInstanceId": 2112617,
"processInstanceUuid": "24cb4216-83a4-4782-84cb-d702b54b9b7d"
}
}
```
## Triggering from FlowX Designer
This endpoint is triggered through a **Send data to user interface** node action configured in FlowX Designer:
Add a **Send data to user interface** action to the node where you want to trigger the child process.
Set the **Message type** to `action` to enable process triggering capabilities.
In the action configuration, specify which parameters should be inherited using `paramsToCopy` or `withoutParams` in the action payload.
For detailed instructions on configuring node actions in FlowX Designer, see the [Managing a Process Flow](../../flowx-designer/managing-a-project-flow/starting-a-process) documentation.
## Use Cases
This endpoint is particularly useful for:
* **Multi-step workflows**: Starting a child process that continues work begun in a parent process
* **Process chaining**: Creating related processes that share common data
* **UI-triggered actions**: Starting processes from user interface actions that need to carry over existing data
* **Data inheritance**: Maintaining context across related process instances while controlling which data is passed forward
This endpoint is specifically designed for runtime operations initiated from UI actions. The `workspaceId` parameter ensures proper isolation in multi-tenant environments.
# Download a file
Source: https://docs.flowx.ai/5.1/docs/api/storage/download-file
GET documentURL/internal/storage/download
This endpoint allows you to download a file by specifying its path or key.
The base URL of the document.
A segment of the path that specifies it is an internal call.
A segment of the path referring to storage resources.
The unique identifier for the download.
# List storage buckets
Source: https://docs.flowx.ai/5.1/docs/api/storage/list-buckets
GET {{documentUrl}}/internal/storage/buckets
Retrieve a list of all available storage buckets in the document storage system
This endpoint returns a comprehensive list of all storage buckets available in the document management system. Use this endpoint to discover available storage containers before performing operations like listing objects or uploading files.
Storage buckets are logical containers that organize and group related files. Each bucket has unique permissions and configuration settings.
## Authentication
This endpoint requires Bearer Token authentication. Include your API token in the Authorization header.
Bearer token for API authentication. Format: `Bearer YOUR_API_TOKEN`
## URL Parameters
The base URL of the document storage service where buckets are managed.
**Example:** `https://document-service.your-domain.com`
Path segment indicating this is an internal API call within the document service. This distinguishes internal system operations from external public APIs.
Path segment specifying that this endpoint operates on storage resources. This groups all storage-related operations under a common path.
Path segment identifying the specific storage resource type being accessed. This endpoint targets bucket-level operations for listing available storage containers.
## Headers
Cache control directive. Use `no-cache` to ensure fresh bucket data.
Content type that the client can accept. Supports `*/*` for all types.
Acceptable encoding methods for response compression. Supports `gzip, deflate, br`.
## Request Examples
```bash cURL theme={"system"}
curl -X GET '{{documentUrl}}/internal/storage/buckets' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Cache-Control: no-cache' \
-H 'Accept: */*' \
-H 'Accept-Encoding: gzip, deflate, br'
```
```javascript Node.js theme={"system"}
const response = await fetch('{{documentUrl}}/internal/storage/buckets', {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Cache-Control': 'no-cache',
'Accept': '*/*'
}
});
const buckets = await response.json();
```
```python Python theme={"system"}
import requests
response = requests.get(
'{{documentUrl}}/internal/storage/buckets',
headers={
'Authorization': 'Bearer YOUR_API_TOKEN',
'Cache-Control': 'no-cache',
'Accept': '*/*'
}
)
buckets = response.json()
```
# List objects in a bucket
Source: https://docs.flowx.ai/5.1/docs/api/storage/list-objects-in-buckets
GET {{documentURL}}/internal/storage/buckets/{BUCKET_NAME}
Retrieve all objects stored within a specific storage bucket, including files, metadata, and access information
This endpoint retrieves a comprehensive list of all objects (files, documents, etc.) stored within a specific storage bucket. Use this endpoint to explore bucket contents, check file availability, and gather object metadata before performing download or management operations.
Objects within a bucket include all file types, documents, images, and any other data stored in the specified container. Each object includes metadata such as size, modification date, and access permissions.
## Authentication
This endpoint requires Bearer Token authentication. Include your API token in the Authorization header.
Bearer token for API authentication. Format: `Bearer YOUR_API_TOKEN`
## URL Parameters
The base URL of the document storage service where buckets are managed.
**Example:** `https://document-service.your-domain.com`
Path segment indicating this is an internal API call within the document service. This distinguishes internal system operations from external public APIs.
Path segment specifying that this endpoint operates on storage resources. This groups all storage-related operations under a common path.
Path segment identifying the storage resource type. This indicates operations on bucket-level resources.
The unique identifier for the target storage bucket. This should match exactly with an existing bucket name from your organization.
**Example:** `qualitance-dev-paperflow-1416`
## Headers
Cache control directive. Use `no-cache` to ensure fresh object listings, especially after recent uploads or deletions.
Content type that the client can accept. Supports `*/*` for all types.
Acceptable encoding methods for response compression. Supports `gzip, deflate, br`.
## Request Examples
```bash cURL theme={"system"}
curl -X GET '{{documentURL}}/internal/storage/buckets/qualitance-dev-paperflow-1416' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Cache-Control: no-cache' \
-H 'Accept: */*' \
-H 'Accept-Encoding: gzip, deflate, br'
```
```javascript Node.js theme={"system"}
const bucketName = 'qualitance-dev-paperflow-1416';
const response = await fetch(`{{documentURL}}/internal/storage/buckets/${bucketName}`, {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Cache-Control': 'no-cache',
'Accept': '*/*'
}
});
const objects = await response.json();
```
```python Python theme={"system"}
import requests
bucket_name = 'qualitance-dev-paperflow-1416'
response = requests.get(
f'{{documentURL}}/internal/storage/buckets/{bucket_name}',
headers={
'Authorization': 'Bearer YOUR_API_TOKEN',
'Cache-Control': 'no-cache',
'Accept': '*/*'
}
)
objects = response.json()
```
# Reusable Functions
Source: https://docs.flowx.ai/5.1/docs/building-blocks/reusable-resources/reusable-functions
Create and manage business logic components that can be reused across multiple processes in your FlowX.AI applications.

## What are Reusable Functions?
Reusable Functions are self-contained business logic components that process data according to your specified rules. Instead of writing the same logic multiple times across different processes, you can:
* Define the logic once in a reusable function
* Use the function in multiple processes through data mapping
* Automatically propagate updates to all instances when you modify the function
Functions execute in isolated environments and cannot be edited within individual process contexts. All changes must be made to the original function definition.
## Key benefits
Write business logic once and reuse it across multiple processes
Update logic in one place and automatically apply changes everywhere
Standardize business rules across your entire application
Spend less time rewriting similar logic for different processes
## Before you begin
Make sure you have:
* Access to the FlowX.AI Designer
* Appropriate permissions to create and manage reusable resources
* A clear understanding of the business logic you want to implement
## Create a reusable function
1. In FlowX.AI Designer, go to your project
2. Navigate to **Reusable Resources** > **Functions**
3. Click the **+** icon to create a new function

1. Enter a descriptive name for your function
2. Add an optional description explaining the function's purpose
3. Click **Save** to create the function and open the editor


1. Go to the **Model** tab
2. Add attributes that your function will work with:
* Click **Add Attribute** to create new fields
* Set attribute types by selecting existing objects from your project
* Define nested structures as needed

Functions support both primitive data types (string, number, boolean) and complex object data types for input and output parameters. See [Understanding Data Types](#understanding-data-types) for more information.
Define **both input and output fields** in your data model. Later, you'll select which fields are inputs (Input Parameters tab) and which are outputs (Output Parameters tab).
Simple data types for basic universe facts:
```json theme={"system"}
{
"question": "string",
"universeAge": "number",
"galaxyCount": "number",
"speedOfLight": "number",
"explanation": "string"
}
```

Complex structure for detailed universe data:
```json theme={"system"}
{
"query": {
"topic": "string",
"detail_level": "string"
},
"user_preferences": {
"scientific_notation": "boolean",
"units": "string"
},
"universe": {
"basicFacts": {
"age": "number",
"galaxyCount": "number",
"starCount": "number"
},
"composition": {
"darkMatter": "number",
"darkEnergy": "number",
"ordinaryMatter": "number"
}
},
"explanation": {
"summary": "string",
"keyFacts": "array",
"confidence": "number"
}
}
```

Comprehensive data model for explaining the universe:
```json theme={"system"}
{
"request": {
"topic": "string",
"scope": "string",
"scientific_level": "string"
},
"user_context": {
"background": "string",
"preferences": {
"include_equations": "boolean",
"visual_aids": "boolean"
}
},
"constraints": {
"max_length": "number",
"language": "string"
},
"universe": {
"fundamentalConstants": {
"speedOfLight": "number",
"gravitationalConstant": "number",
"hubbleConstant": "number"
},
"composition": {
"darkMatter": "number",
"darkEnergy": "number",
"ordinaryMatter": "number"
},
"structures": {
"galaxies": "number",
"stars": "number",
"planets": "number"
}
},
"timeline": {
"bigBang": "number",
"firstStars": "number",
"earthFormation": "number"
},
"explanation": {
"summary": "string",
"keyInsights": "array",
"confidence": "number"
}
}
```
1. Switch to the **Input Parameters** tab
2. Select the fields from your data model that your function needs as input
3. Expand objects to choose specific properties

Select input fields from the data model for basic universe queries:
```json Input parameter selection from data model theme={"system"}
[
"question"
]
```
From the data model fields:
* ✅ **question** (string) - SELECT as input
* ❌ **universeAge** (number) - Do NOT select (output only)
* ❌ **galaxyCount** (number) - Do NOT select (output only)
* ❌ **speedOfLight** (number) - Do NOT select (output only)
* ❌ **explanation** (string) - Do NOT select (output only)
Example input mapping from process:
```json theme={"system"}
{
"question": "processData.userQuery"
}
```
Select only the fields your function needs as input from the data model. The output fields will be selected in the Output Parameters tab.
Select input fields from the data model for detailed queries:
```json Input parameter selection from data model theme={"system"}
[
"query",
"user_preferences"
]
```
From the data model fields:
* ✅ **query** (object) - SELECT as input
* ✅ **user\_preferences** (object) - SELECT as input
* ❌ **universe** (object) - Do NOT select (output only)
* ❌ **explanation** (object) - Do NOT select (output only)
Example input mapping from process:
```json theme={"system"}
{
"query": "processData.universeQuery",
"user_preferences": "processData.userSettings"
}
```
Select the input objects from your data model. The function will use these to customize its output behavior.
Select input fields from the data model for complex universe explanations:
```json Input parameter selection from data model theme={"system"}
[
"request",
"user_context",
"constraints"
]
```
From the data model fields:
* ✅ **request** (object) - SELECT as input
* ✅ **user\_context** (object) - SELECT as input
* ✅ **constraints** (object) - SELECT as input
* ❌ **universe** (object) - Do NOT select (output only)
* ❌ **timeline** (object) - Do NOT select (output only)
* ❌ **explanation** (object) - Do NOT select (output only)
Example input mapping from process:
```json theme={"system"}
{
"request": "processData.universeRequest",
"user_context": "processData.userProfile",
"constraints": "processData.outputConstraints"
}
```
Select the input objects that control how the function behaves. The output objects will be configured in the Output Parameters tab.
Define clear input contracts to make your functions truly reusable across different contexts. Match input complexity to function complexity.
1. Go to the **Output Parameters** tab
2. Select the fields from your data model that the function returns
3. Choose individual fields or entire objects as needed
Select output fields from the data model for basic universe facts:
```json Output parameter selection from data model theme={"system"}
[
"universeAge",
"galaxyCount",
"speedOfLight",
"explanation"
]
```
From the data model fields:
* ❌ **question** (string) - Do NOT select (input only)
* ✅ **universeAge** (number) - SELECT as output
* ✅ **galaxyCount** (number) - SELECT as output
* ✅ **speedOfLight** (number) - SELECT as output
* ✅ **explanation** (string) - SELECT as output
Select the fields that your function calculates and returns. These were the fields showing incorrectly in your Input Parameters tab.
Select output fields from the data model for detailed universe data:
```json Output parameter selection from data model theme={"system"}
[
"universe",
"universe.basicFacts",
"universe.composition",
"explanation",
"explanation.summary",
"explanation.keyFacts",
"explanation.confidence"
]
```
From the data model fields:
* ❌ **query** (object) - Do NOT select (input only)
* ❌ **user\_preferences** (object) - Do NOT select (input only)
* ✅ **universe** (object) - SELECT as output
* ✅ **explanation** (object) - SELECT as output
Select the objects that your function generates. You can choose entire objects or specific nested properties based on what your process needs.
Select output fields from the data model for complete universe explanation:
```json Output parameter selection from data model theme={"system"}
[
"universe",
"universe.fundamentalConstants",
"universe.composition",
"universe.structures",
"timeline",
"explanation",
"explanation.keyInsights"
]
```
From the data model fields:
* ❌ **request** (object) - Do NOT select (input only)
* ❌ **user\_context** (object) - Do NOT select (input only)
* ❌ **constraints** (object) - Do NOT select (input only)
* ✅ **universe** (object) - SELECT as output
* ✅ **timeline** (object) - SELECT as output
* ✅ **explanation** (object) - SELECT as output
Select the objects that contain the universe explanation results. You can choose entire objects or drill down to specific properties you need.
You can select entire objects (like `universe`) or specific properties (like `universe.basicFacts.age`) depending on what your process needs.
1. Navigate to the **Script** tab
2. Choose your programming language (JavaScript or Python)
3. Write your business logic using the appropriate data format
Simple function with basic universe facts:
```javascript getBasicFacts theme={"system"}
// Function format: functions.projectName.functionName(input)
function functions.cosmos.getBasicFacts(question) {
// Access input parameter: input.question
const userQuestion = input.question || "What is the universe?";
// Basic universe facts
output.universeAge = 13.8; // billion years
output.galaxyCount = 2000; // billion galaxies
output.speedOfLight = 299792458; // m/s
output.explanation = "The universe is 13.8 billion years old and contains about 2 trillion galaxies.";
}
```
```python getBasicFacts (Python) theme={"system"}
# Access input parameter: input.question
user_question = input.question or "What is the universe?"
# Basic universe facts
output.universeAge = 13.8 # billion years
output.galaxyCount = 2000 # billion galaxies
output.speedOfLight = 299792458 # m/s
output.explanation = "The universe is 13.8 billion years old and contains about 2 trillion galaxies."
```
Function with structured universe data:
```javascript getUniverseOverview theme={"system"}
// Function format: functions.projectName.functionName(input)
function functions.cosmos.getUniverseOverview(query) {
// Access input parameters: input.query.topic, input.query.detail_level, input.user_preferences
const detailLevel = input.query?.detail_level || "basic";
const userPrefs = input.user_preferences || {};
// Structured universe data
output.universe = {
basicFacts: {
age: 13.8, // billion years
galaxyCount: 2000, // billion
starCount: 200000000 // billion billion (2×10^23)
},
composition: {
darkMatter: 26.8, // percentage
darkEnergy: 68.3, // percentage
ordinaryMatter: 4.9 // percentage
}
};
output.explanation = {
summary: "The universe is mostly dark matter and dark energy, with ordinary matter making up less than 5%.",
keyFacts: [
"Universe is 13.8 billion years old",
"Contains 2 trillion galaxies",
"Dark energy causes expansion"
],
confidence: 0.9
};
}
```
```python getUniverseOverview (Python) theme={"system"}
# Access input parameters: input.query.detail_level, input.user_preferences
detail_level = input.query.get('detail_level', 'basic') if input.query else 'basic'
user_prefs = input.user_preferences or {}
# Structured universe data
output.universe = {
'basicFacts': {
'age': 13.8, # billion years
'galaxyCount': 2000, # billion
'starCount': 200000000 # billion billion
},
'composition': {
'darkMatter': 26.8,
'darkEnergy': 68.3,
'ordinaryMatter': 4.9
}
}
output.explanation = {
'summary': 'The universe is mostly dark matter and dark energy.',
'keyFacts': ['Universe is 13.8 billion years old', 'Contains 2 trillion galaxies'],
'confidence': 0.9
}
```
Comprehensive function with detailed universe data:
```javascript myFirstFunction theme={"system"}
// Function format: functions.projectName.functionName(input)
function functions.cosmos.myFirstFunction(request) {
// Access comprehensive input parameters
const topic = input.request?.topic || "general";
const scope = input.request?.scope || "basic";
const scientificLevel = input.request?.scientific_level || "beginner";
const userBackground = input.user_context?.background || "general";
const maxLength = input.constraints?.max_length || 10000;
// Comprehensive universe explanation
output.universe = {
fundamentalConstants: {
speedOfLight: 299792458, // m/s
gravitationalConstant: 6.674e-11,
hubbleConstant: 70 // km/s/Mpc
},
composition: {
darkMatter: 26.8,
darkEnergy: 68.3,
ordinaryMatter: 4.9
},
structures: {
galaxies: 2e12, // 2 trillion
stars: 1e24, // 1 septillion
planets: 1e24 // estimated
}
};
output.timeline = {
bigBang: 13.8e9, // years ago
firstStars: 13.6e9, // years ago
earthFormation: 4.6e9 // years ago
};
output.explanation = {
summary: "The universe began 13.8 billion years ago and is dominated by dark matter and dark energy.",
keyInsights: [
"Universe is expanding and accelerating",
"Most matter is invisible (dark matter)",
"Contains billions of galaxies with trillions of stars"
],
confidence: 0.85
};
}
```
```python myFirstFunction (Python) theme={"system"}
# Access comprehensive input parameters
topic = input.request.get('topic', 'general') if input.request else 'general'
scope = input.request.get('scope', 'basic') if input.request else 'basic'
scientific_level = input.request.get('scientific_level', 'beginner') if input.request else 'beginner'
user_background = input.user_context.get('background', 'general') if input.user_context else 'general'
max_length = input.constraints.get('max_length', 10000) if input.constraints else 10000
# Comprehensive universe explanation
output.universe = {
'fundamentalConstants': {
'speedOfLight': 299792458,
'gravitationalConstant': 6.674e-11,
'hubbleConstant': 70
},
'composition': {
'darkMatter': 26.8,
'darkEnergy': 68.3,
'ordinaryMatter': 4.9
},
'structures': {
'galaxies': 2e12,
'stars': 1e24,
'planets': 1e24
}
}
output.timeline = {
'bigBang': 13.8e9,
'firstStars': 13.6e9,
'earthFormation': 4.6e9
}
output.explanation = {
'summary': 'The universe began 13.8 billion years ago.',
'keyInsights': ['Universe is expanding', 'Most matter is dark matter'],
'confidence': 0.85
}
```
Always use `input.attribute` format to access function parameters and `output.attribute` to set return values.
1. Go to the **Test** tab
2. Add sample data for your input parameters
3. Click **Test** to execute the function
4. Review the output to ensure your logic works correctly
5. Save your function when testing is successful
## Use functions in processes
After creating a reusable function, you can use it in your business processes through Business Rule actions, or reference it within other reusable functions.
### Where you can reference functions
Reusable functions can be referenced in two contexts:
* **Business Rule actions** within process nodes
* **Other reusable functions** to create composite logic
### Function referencing syntax
When referencing a reusable function, use this format:
```javascript theme={"system"}
functions.projectName.functionName(input.params)
```
Where:
* `functions` - Convention to reference any reusable function
* `projectName` - Name of the project/library where the function is defined
* `functionName` - Name of the reusable function
* `input.params` - Input parameters using local process variables
```javascript Primitive parameter example theme={"system"}
functions.academy.calculateMaxLoanAmount(input.monthlySalary)
```
```javascript Object parameter example theme={"system"}
functions.loanLibrary.calculateLoan(input.client)
```
```javascript Multiple parameters example theme={"system"}
functions.library1.calculateAgeFromSSN(input.client.ssn)
```
### Add a function to a process
1. Open your process definition in FlowX.AI Designer
2. Select the node where you want to add business logic
3. Create a new **Business Rule** action
4. Reference your reusable function using the syntax above
5. Configure data mapping between your process and the function
### Configure data mapping
Data mapping connects your process data to the function's input and output parameters.
Map process variables to function input parameters:
Simple input mapping for basic universe queries:
```json getBasicFacts input mapping theme={"system"}
{
"question": "processData.userQuestion"
}
```
Process context example:
```json theme={"system"}
{
"processData": {
"userQuestion": "What is the universe?"
}
}
```
Structured input mapping for detailed queries:
```json getUniverseOverview input mapping theme={"system"}
{
"query": "processData.universeRequest",
"query.topic": "processData.selectedTopic",
"query.detail_level": "processData.requestedDetail",
"user_preferences": "processData.userProfile.preferences"
}
```
Process context example:
```json theme={"system"}
{
"processData": {
"universeRequest": {
"topic": "dark_matter",
"detail_level": "intermediate"
},
"selectedTopic": "composition",
"requestedDetail": "moderate",
"userProfile": {
"preferences": {
"scientific_notation": true,
"units": "metric"
}
}
}
}
```
Comprehensive input mapping for complex universe explanations:
```json myFirstFunction input mapping theme={"system"}
{
"request": "processData.universeInquiry",
"request.topic": "processData.specificSubject",
"request.scope": "processData.explanationScope",
"request.scientific_level": "processData.userExpertiseLevel",
"user_context": "processData.userContext",
"constraints": "processData.outputLimitations"
}
```
Process context example:
```json theme={"system"}
{
"processData": {
"universeInquiry": {
"topic": "cosmic_evolution",
"scope": "comprehensive",
"scientific_level": "advanced"
},
"specificSubject": "big_bang_theory",
"explanationScope": "timeline_focused",
"userExpertiseLevel": "graduate_level",
"userContext": {
"background": "physics_student",
"preferences": {
"include_equations": true,
"visual_aids": false
}
},
"outputLimitations": {
"max_length": 5000,
"language": "english"
}
}
}
```
Ensure data types match between your process variables and function parameters to avoid runtime errors. Use dot notation for nested object properties.
Specify where to store function outputs in your process data:
Map primitive outputs to process variables:
```json getBasicFacts output mapping theme={"system"}
{
"processData.universeAge": "output.universeAge",
"processData.totalGalaxies": "output.galaxyCount",
"processData.lightSpeed": "output.speedOfLight",
"processData.summary": "output.explanation"
}
```
Map structured outputs to process data:
```json getUniverseOverview output mapping theme={"system"}
{
"processData.cosmicData": "output.universe",
"processData.universeAge": "output.universe.basicFacts.age",
"processData.composition": "output.universe.composition",
"processData.explanation": "output.explanation",
"processData.confidence": "output.explanation.confidence"
}
```
Map comprehensive outputs to process variables:
```json myFirstFunction output mapping theme={"system"}
{
"processData.universeData": "output.universe",
"processData.constants": "output.universe.fundamentalConstants",
"processData.timeline": "output.timeline",
"processData.explanation": "output.explanation",
"processData.insights": "output.explanation.keyInsights"
}
```
You can map entire objects or specific properties. Use dot notation to access nested properties from complex function outputs.
### Use functions within functions
You can create composite business logic by calling one reusable function from within another reusable function. This enables you to build complex functionality from smaller, focused components.
Use the standard function referencing syntax within your script:
```javascript theme={"system"}
// Call another function and use its output
const maxLoan = functions.academy.calculateMaxLoanAmount(input.monthlySalary);
// Use the result in further calculations
const loanDetails = functions.loanLibrary.calculateLoan({
principal: maxLoan,
rate: input.interestRate,
term: input.loanTerm
});
// Set the final output
output.integratedLoanData = loanDetails;
```
Ensure proper data flow between functions:
* **Input format**: Always use `input.attribute` to access function parameters
* **Function calls**: Use `functions.projectName.functionName(parameters)` format
* **Output assignment**: Set results to `output.attribute`
Test thoroughly to ensure all nested function calls work correctly:
1. Test each individual function first
2. Test the composite function with realistic data
3. Verify the data flows correctly between function calls
4. Check error handling when nested functions fail
```javascript integratedLoanCalculator example theme={"system"}
// Function that calculates loan based on salary using other functions
function functions.loanProject.integratedLoanCalculator(clientData) {
// Calculate how much loan a person can get based on their salary
const maxAmount = functions.academy.calculateMaxLoanAmount(input.clientData.monthlySalary);
// Use that amount with calculateLoan function to compute detailed loan information
const loanDetails = functions.loanLibrary.calculateLoan({
principal: maxAmount,
monthlyRate: input.clientData.monthlyRate,
numberOfPayments: input.clientData.numberOfPayments,
client: input.clientData
});
// The final computed result is passed into the output
output.integratedLoanData = loanDetails;
}
```
```python integratedLoanCalculator (Python) theme={"system"}
# Calculate how much loan a person can get based on their salary
max_amount = functions.academy.calculateMaxLoanAmount(input.clientData.monthlySalary)
# Use that amount with calculateLoan function to compute detailed loan information
loan_details = functions.loanLibrary.calculateLoan({
'principal': max_amount,
'monthlyRate': input.clientData.monthlyRate,
'numberOfPayments': input.clientData.numberOfPayments,
'client': input.clientData
})
# The final computed result is passed into the output
output.integratedLoanData = loan_details
```
When using functions within functions, ensure all referenced functions exist in your project and have compatible input/output formats.
## Manage functions
### View function usage
To see where a function is used:
1. Select the function in **Reusable Resources** > **Functions**
2. Click the **Usages** tab
3. Review all processes and nodes that reference the function
The system displays a resource usage modal when you make changes that might affect existing implementations.
### Update functions
When you modify a reusable function:
* Changes automatically propagate to all instances
* Existing process instances may need to restart to pick up updates
* The system preserves instance-specific configurations like data mapping
### Change programming languages
You can change a function's programming language after creation:
1. Open the function editor
2. Go to the **Script** tab
3. Select a different language from the dropdown
4. Rewrite your logic in the new language
5. Test thoroughly before saving
The system shows a usage modal to help you understand the impact of language changes on existing implementations.
## Understanding data types
Reusable functions support two categories of data types for input and output parameters:
### Primitive data types
Primitive types represent single, simple values. They are the basic building blocks of data.
Available primitive types:
* **string** - Text values (for example, "John Doe," "active")
* **number** - Numeric values (for example, 42, 3.14, 13.8)
* **boolean** - True/false values (for example, true, false)
When to use primitives:
* Simple calculations requiring single values
* Basic status flags or indicators
* Individual measurements or counts
* Simple user inputs
Example - Primitive function:
```json theme={"system"}
{
"salary": 5000, // number
"approved": true, // boolean
"status": "active" // string
}
```
### Complex object data types
Complex types are structured collections of related data, containing multiple fields that can include both primitives and nested objects.
Available complex types:
* **object** - Structured data with named properties
* **array** - Ordered collections of values
* **nested objects** - Objects containing other objects
When to use complex types:
* Grouping related information together
* Representing real-world entities (customers, orders, products)
* Handling structured business data
* Managing hierarchical relationships
Example - Complex object function:
```json theme={"system"}
{
"customer": { // object
"personalInfo": { // nested object
"name": "John Doe", // string
"age": 35 // number
},
"accounts": [ // array
{
"type": "checking",
"balance": 5000.00
}
]
},
"preferences": { // object
"notifications": true, // boolean
"language": "en" // string
}
}
```
### Key differences
| Aspect | Primitive Types | Complex Object Types |
| ------------------ | ------------------------- | --------------------------------------------------------------------- |
| Structure | Single value | Multiple related values |
| Nesting | Not applicable | Can contain nested structures |
| Access pattern | Direct value access | Dot notation for properties (for example, customer.personalInfo.name) |
| Use case | Simple, standalone data | Related data that should be grouped |
| Mapping complexity | Simple one-to-one mapping | Can map entire objects or individual properties |
### Choosing the right data type
* Working with single, independent values
* Performing basic calculations
* Storing simple flags or settings
* Handling individual measurements
**Example:** Calculating tax on a single amount, validating a single field
* Data represents a business entity
* Multiple related values should stay together
* You need hierarchical data structures
* Function processes grouped information
**Example:** Processing a loan application, validating customer information
**Best practice:** Start with primitives for simple functions. Upgrade to complex objects when you find yourself passing multiple related parameters or need better data organization.
## Best practices
### Design principles
Each function should serve one specific, well-defined purpose. Avoid creating functions that handle multiple unrelated tasks.
Define precise input and output parameters. Well-defined interfaces make functions easier to understand and use correctly.
Functions shouldn't depend on external state or global variables. All necessary data should come through input parameters.
The same inputs should always produce the same outputs. Avoid non-deterministic behavior in your business logic.
### Development workflow
1. **Define data model first**: Always establish your data structure before writing code
2. **Specify parameters early**: Define inputs and outputs before implementing logic
3. **Use descriptive names**: Choose clear, business-oriented function names
4. **Test thoroughly**: Validate functions with realistic data before deployment
5. **Handle errors gracefully**: Implement robust error handling in your business logic
### Organization strategies
* **Group related functions**: Organize functions by business domain or use case
* **Follow naming conventions**: Establish consistent patterns for function names
* **Document extensively**: Include clear descriptions and usage examples
* **Version carefully**: Use project versioning to manage function changes safely
## Troubleshooting
### Common issues
**Possible causes:**
* Incorrect input parameter mapping
* Data type mismatches between process and function
* Missing required input parameters
* Runtime errors in function logic
**Solutions:**
* Verify all input mappings are correct
* Check data types match between source and target
* Ensure all required parameters have values
* Review function logs for error details
**Possible causes:**
* Incorrect output parameter mapping
* Logic errors in function implementation
* Invalid test data during development
**Solutions:**
* Validate output parameter configuration
* Test function with realistic data
* Review business logic implementation
* Check data transformations within the function
**Possible causes:**
* Complex data processing logic
* Inefficient algorithms
* Large data structures
**Solutions:**
* Optimize function algorithms
* Simplify data models where possible
* Consider breaking complex functions into smaller components
* Monitor execution times in process context
### Debugging strategies
1. **Use the test environment**: Always test functions thoroughly before deploying to production
2. **Start simple**: Build and test functions incrementally rather than implementing everything at once
3. **Use realistic data**: Test with data that matches your production scenarios
4. **Verify outputs**: Carefully check that function outputs match your expectations
5. **Add logging**: Include console output in your function logic to trace execution
## Function execution context
### Function format and syntax
All reusable functions follow a consistent format and syntax:
```javascript Function declaration format theme={"system"}
function functions.projectName.functionName(parameterName) {
// Function implementation
}
```
```javascript Function reference format theme={"system"}
functions.projectName.functionName(input.params)
```
**Key format rules:**
* **Function declaration**: `functions.projectName.functionName(parameters)`
* **Input access**: Always use `input.attribute` to access function parameters
* **Output assignment**: Use `output.attribute` to set return values
* **Function calls**: Reference other functions using `functions.projectName.functionName(params)`
### Data access patterns
When functions execute within processes, they have access to:
* **Input parameters**: Mapped from process data according to your configuration
* **Output object**: Used to return processed data back to the process
* **Standard libraries**: Built-in functions available in JavaScript or Python
* **Error handling**: Mechanisms to report execution problems back to the process
Access function input using the `input.attribute` format:
```javascript theme={"system"}
// Access input parameters
const salary = input.monthlySalary;
const client = input.client;
```
Set function output using the `output` object:
```javascript theme={"system"}
// Primitive output
output = monthlySalary * 48;
// Object output
output.computedLoan = {
principal: input.principal,
monthlyPayment: monthlyPayment
};
```
Always verify that your input format (`input.attribute`) matches the parameter names defined in your function to avoid runtime errors.
## Frequently asked questions
Yes, you can change a function's programming language after creation. Navigate to the **Script** tab, select a different language from the dropdown, rewrite your logic in the new language, and test thoroughly before saving. The system will show a usage modal to help you understand the impact on existing implementations.
Reusable functions can be referenced in two contexts:
* **Business Rule actions** within process nodes
* **Other reusable functions** to create composite logic
Use the format: `functions.projectName.functionName(input.params)`
Example: `functions.library1.calculateAgeFromSSN(input.client.ssn)`
Where:
* `functions` - Convention to reference a function
* `library1` - Name of the project/library where the function is defined
* `calculateAgeFromSSN` - Name of the reusable function
* `input.client.ssn` - Input parameters using local process variables
Yes, you can use functions within functions to create composite business logic. Simply reference other functions using the standard syntax: `functions.projectName.functionName(parameters)` within your function script.
You can use both primitive and object data types as parameters for input and output:
**Primitive types**: string, number, boolean
**Object types**: Complex structures with nested properties, arrays, and custom business objects
Functions automatically handle the data format based on your model definition.
# Reusable UI Templates
Source: https://docs.flowx.ai/5.1/docs/building-blocks/reusable-resources/reusable-ui
Create and manage modular UI components that can be used across multiple User Tasks and processes in your FlowX.AI applications.
## What are Reusable UI Templates?
Reusable UI Templates are self-contained UI component hierarchies that you design once and instantiate multiple times throughout your application. They solve common UI development challenges:
* **Repetitive styling**: No more redoing component styles and properties for similar UI patterns
* **Manual updates**: Reduce the need to manually change components across multiple locations
* **Template management**: Centralized configuration and management of UI templates

Reusable UI Templates focus on visual components and layout. They cannot include reusable business rules or complex business logic.
## Key benefits
Ensure uniform UI patterns across your entire application
Design once and use many times - no more recreating similar patterns
Update templates in one place to affect all instances automatically
Templates work across different platforms and channels
## Template types
FlowX.AI supports two main types of reusable UI templates:
**Characteristics:**
* Include input parameters that receive data from the process
* Support output parameters that send data back to the process
* Contextualized based on runtime data
* Ideal for forms and data-driven interfaces
**Use cases:** User registration forms, data collection cards, feedback forms
**Characteristics:**
* Self-contained UI components
* No data exchange with the process
* Focus on consistent styling and layout
* Purely visual/structural elements
**Use cases:** Headers, footers, information panels, navigation elements
## Template structure
A reusable template consists of:
* **Root component**: A single container (Card, Container, or Custom Component)
* **UI hierarchy**: Child components arranged in a hierarchical structure
* **UI actions**: Interactive elements that can trigger process actions
* **Data model**: Input and output parameters for template configuration
* **Configuration**: Name, description, and resource metadata

## Before you begin
Make sure you have:
* Access to FlowX.AI Designer
* Appropriate permissions to create and manage reusable resources
* A clear understanding of the UI pattern you want to standardize
## Create a reusable template
1. In FlowX.AI Designer, go to your project
2. Navigate to **Reusable Resources** > **Templates**
3. Click **+ New Reusable Template**
1. Enter a descriptive name for your template (required)
Template names cannot contain spaces. Use UpperCamelCase or underscores instead.
* ✅ Good: `PersonalDetailsCard`, `User_Registration_Form`
* ❌ Avoid: `Personal Details Card`, `user-form`

2. Add an optional description explaining the template's purpose
3. Choose your root component type:
* **Card**: Best for content needing visual separation and styling
* **Container**: Ideal for layout and grouping without visual styling
4. Configure the data model with input and output parameters
Set up the internal data structure that your template will use:
1. **Set the root element** (e.g., `applicationUI`)
2. **Define field attributes** with appropriate data types:
**Example: Personal Details Template**
```
applicationUI:
├── firstName_UI – string
├── lastName_UI – string
├── emailAddress_UI – string
├── phoneNumber_UI – string
├── dob_UI – date
├── gender_UI – string
├── consent_UI – boolean
└── ssn – string
```
Use descriptive field names with consistent naming patterns (e.g., `fieldName_UI`) to clearly identify template-specific data.
Define the data contract between your template and the process:
**Input Parameters:**
* Data that flows INTO the template from the process
* Example: `ssn` (pre-filled from existing process data)
**Output Parameters:**
* Data that flows OUT of the template back to the process
* Example: `firstName_UI`, `lastName_UI`, `emailAddress_UI`, `phoneNumber_UI`, `dob_UI`, `gender_UI`, `consent_UI`
Parameters control data flow only. They don't determine field visibility or editability - you can still edit input parameter fields unless explicitly made read-only.
Once parameters are defined, click **Done** to establish the template's data contract.
Use the template UI designer to build your component structure:
```
Root Component (Card/Container)
├── UI Components (Text, Input, Button, etc.)
├── Layout Components (Containers, Flex containers)
└── Interactive Components (Forms, Actions)
```
The template UI designer focuses on screen parts without navigation concepts or process-related navigation.
Define interactive elements within your template:
* Define UI actions within the reusable template
* Assign node actions when instantiated in User Tasks
* Use for standard actions like "Save", "Submit", or "Cancel"
* Template holds forms with specific information
* User Task contains actions to validate and send data
* Use for complex forms combining template and User Task data
1. Use **Preview Mode** to see how your template renders
2. Verify component hierarchy and basic functionality
3. Test with different themes and configurations
4. Save your template when testing is successful
Preview Mode provides visual-only testing. Templates are not functional until embedded in a live process with proper parameter mapping.
## Use templates in User Tasks
To integrate reusable templates into your processes, follow this complete workflow:
### Prerequisites: Set up data models
1. In your project, define the main entity (e.g., `Application`)
2. Add child objects that match your template structure (e.g., `Client`)
3. Include all fields from your template's data model:
* `firstName`, `lastName`, `emailAddress`
* `phoneNumber`, `dob`, `gender`, `consent`, `ssn`
1. Reference the project entity in your process
2. Select `application` as the root entity
3. Include `Client` as a child object
4. The data model will automatically populate with the correct entities
### Add and configure templates
1. Open the UI Designer for your User Task
2. In the component panel, locate **Reusable Templates**
3. Drag and drop your desired template into the UI hierarchy
4. The template will appear with red warning icons indicating unmapped parameters
1. Select the template instance in the UI hierarchy
2. Navigate to the template settings panel
3. Click **Define Parameters** for Input Parameters
4. Map each input to process data using dynamic keys:
**Example mapping:**
```
Static value: "123-45-6789"
Dynamic key: ${application.client.ssn}
```
Use dynamic keys like `${application.client.fieldName}` to pull data from your process context automatically.
1. Click **Define Parameters** for Output Parameters
2. Select all fields that should return data to the process
3. Map each output to the corresponding process data structure:
**Example mappings:**
```
applicationUI.firstName_UI → ${application.client.firstName}
applicationUI.lastName_UI → ${application.client.lastName}
applicationUI.emailAddress_UI → ${application.client.emailAddress}
```
4. Test the parameter mappings to ensure data flows correctly
1. **Define process action**: In Process Designer, create a new UI action (e.g., `saveData`)
2. **Link to template**: Return to UI Designer, select the action button within the template
3. **Configure action**: Click **Add UI Action** and select your process action
4. FlowX.AI automatically fills in the action identifier and establishes the connection
### Runtime behavior
At runtime, the process engine expands reusable templates by:
* Replacing the `REUSABLE_TEMPLATE` placeholder with the actual component hierarchy
* Maintaining proper parent-child relationships
* Ensuring unique identifiers for each instance
* Preserving configured UI actions and data bindings
## Manage templates
### View template usage
To see where a template is used:
1. Go to **Reusable Resources** > **Templates**
2. Select your template
3. Click the **Usages** tab
4. Review all processes and User Tasks using the template
### Update templates
When you modify a reusable template:
* Changes automatically propagate to all instances
* Existing process instances may need to restart for updates
* Instance-specific configurations are preserved
* The system validates changes to prevent breaking existing implementations
Template updates affect all instances immediately. Test changes thoroughly before saving to avoid disrupting active processes.
### Template dependencies
Reusable templates can reference these project resources:
Use for dropdown menus and selection components within your templates
Include images, documents, and other media assets in your templates
Add dynamic content that updates based on process context
Apply consistent styling across all template instances
## UI actions in templates
### Current capabilities
UI actions in reusable templates support basic interactive functionality. The system handles:
* **Action context management**: Unique identification for template instances
* **Form submission**: Automatic identification of form elements within template context
* **Data mapping**: Proper mapping of data keys to process variables
* **Validation preservation**: Template validation rules are maintained across instances
### Planned scenarios
**How it works:**
1. Define a UI action within the reusable template
2. Assign the node action when instantiated in a User Task
3. Use for standard actions needing different backend connections
**Best for:** "Save", "Submit", or "Cancel" actions that need process-specific handling
**How it works:**
1. Template holds a form with additional information
2. User Task contains the action to validate and send data
3. Combines data from both template and other User Task forms
**Best for:** Complex forms where template data combines with User Task data
Reusable UI Templates are designed as self-contained components and do not support nesting within other reusable templates
## Troubleshooting
**Possible causes:**
* Invalid template hierarchy
* Missing dependencies (enumerations, media, themes)
* Insufficient permissions
* Invalid component configurations
**Solutions:**
* Verify template structure in the designer
* Check all referenced resources exist
* Confirm user permissions for template access
* Validate component property settings
**Possible causes:**
* Incorrect action context configuration
* Invalid form submission setup
* Data model compatibility issues
* Missing action permissions
**Solutions:**
* Verify action context is properly set
* Check form submission configuration
* Ensure data models match between template and process
* Review user permissions for action execution
**Possible causes:**
* Invalid key mappings in template instances
* Mismatched process data model structure
* Data type incompatibilities
* Incorrect substitution tag usage
**Solutions:**
* Validate key mappings match expected data structure
* Check process data model compatibility
* Ensure data types align between components and data sources
* Review substitution tag configurations
## Reusable UI Templates vs. Reusable Functions
Understanding the difference between these two reusable components is crucial:
**Purpose:** UI Designer components for creating reusable interface elements
**Scope:**
* Visual components and layout
* Styling and basic UI interactions
* Form structure and input patterns
**Usage context:** User Tasks and interface design
**Cannot:** Include reusable business rules or complex business logic
**Purpose:** Business logic components for data processing
**Scope:**
* Data processing and validation
* Calculations and transformations
* Integration patterns and API calls
**Usage context:** Service Tasks and process automation
**Cannot:** Be used within reusable UI templates
## Advanced features
### Planned enhancements
Future support for using templates within other templates for enhanced modularity
Input and output parameters with function-like behavior and type safety
Mock data testing and interactive validation capabilities
Export/import templates and library dependency management
# Supported scripts
Source: https://docs.flowx.ai/5.1/docs/building-blocks/supported-scripts
Scripts are used to define and run actions but also properties inside nodes. For now, the following script languages are supported.
## Business rules scripting
| Scripting Language | Language Version | Scripting Engine | Scripting Engine Version |
| ------------------ | -------------------- | ----------------------------------- | ------------------------ |
| JavaScript | ECMAScript 15 (2024) | GraalJS | GraalVM 24.1.2 |
| Python 3 | 3.11.7 | GraalPy | GraalVM 24.1.2 |
| MVEL | 2 | org.mvel » mvel2 | 2.5.2.Final |
| Groovy | 3.0.21 | org.codehaus.groovy » groovy-jsr223 | 3.0.21 |
In version 4.7.2, we've deprecated the **DMN (Decision Model and Notation)** business rule actions. This change affects how business rules are configured on task/user task nodes in business processes.
**Looking ahead**: Python 2.7 is no longer supported in FlowX.AI 5.0. We recommend migrating your Python scripts to Python 3 to take advantage of improved performance and modern language features.
## Integration designer scripting
| Scripting Language | Language Version | Scripting Engine | Scripting Engine Version |
| ------------------ | -------------------- | ---------------- | ------------------------ |
| JavaScript | ECMAScript 15 (2024) | GraalJS | GraalVM 24.1.2 |
| Python | 3.11.7 | GraalPy | GraalVM 24.1.2 |
***
## JavaScript
**New in v4.7.1**: JavaScript support has been upgraded from Nashorn (ECMAScript 5.1) to GraalJS (ECMAScript 15/2024), providing significantly improved performance and modern language features.
JavaScript in FlowX.AI is powered by GraalJS, which supports ECMAScript 15 (2024) standards. This provides modern JavaScript capabilities for your business rules and integrations.
### What is GraalJS?
GraalJS is an ECMAScript compliant JavaScript implementation built on GraalVM. It supports the latest ECMAScript features and offers high performance through the GraalVM's JIT compiler.
### Properties
* Supports ECMAScript 15 (2024) features including modern syntax and APIs
* Provides consistent scripting across business rules and integration designer
* Runs in a secure sandboxed environment
### Limitations
JavaScript scripts run in a sandboxed environment. Here is a list of JavaScript features not available in the sandbox:
* import.meta (ES2020)
* top-level await (ES2022)
* set operations (ES2024)
* Array.fromAsync (ES2024)
### Useful links
***
## Python 3
Python is a high-level, interpreted programming language known for its simplicity and readability. FlowX.AI uses Python 3.11.7 via GraalPy for executing Python scripts.
### What is GraalPy?
GraalPy is an implementation of Python that runs on the GraalVM. It offers high compatibility with standard Python (CPython) while providing the ability to run within the Java ecosystem. GraalPy supports Python 3 and provides access to a large subset of the standard Python library.
### Properties
* Supports Python 3.11.7 with access to most common Python libraries
* Runs up to 3x faster than Python 2.7 via Jython
* Runs in a sandboxed environment for better security
### Python Library Support
Python 3 support in FlowX comes with a subset of the [standard Python library](https://docs.python.org/3.11/library/index.html). Python runs in a sandboxed environment and the following modules are not available:
"stringprep", "sqlite3", "plistlib", "getpass", "curses", "curses.textpad", "curses.ascii", "curses.panel", "xml.parsers.expat", "xmlrpc.client", "xmlrpc.server", "turtle", "tkinter", "test.support", "symtable", "pyclbr", "msvcrt", "winreg", "winsound", "grp", "termios", "tty", "pty", "syslog", "audioop", "msilib", "nis", "ossaudiodev", "smtpd", "spwd", "crypt"
Available modules might provide limited access to system resources due to the execution in a sandbox environment.
### Useful links
## MVEL
MVEL is a powerful expression language for Java-based applications. It provides a plethora of features and is suited for everything from the smallest property binding and extraction, to full-blown scripts.
* FlowX.AI uses [**mvel2 - 2.5.2.Final version**](https://mvnrepository.com/artifact/org.mvel/mvel2/2.5.2.Final)
### Useful links
**More information:**
***
## Groovy
Groovy is a multi-faceted language for the Java platform. The language can be used to combine Java modules, extend existing Java applications and write new applications
We use and recommend **Groovy 3.0.21** version, using **groovy-jsr223** engine.
**Groovy** has multiple ways of integrating with Java, some of which provide richer options than available with **JSR-223** (e.g. greater configurability and more security control). **JSR-223** is recommended when you need to keep the choice of language used flexible and you don't require integration mechanisms not supported by **JSR-223**.
**JSR-223** (spec) is **a standard scripting API for Java Virtual Machine (JVM) languages** . The JVM languages provide varying levels of support for the JSR-223 API and interoperability with the Java runtime.
### Useful links
# Token
Source: https://docs.flowx.ai/5.1/docs/building-blocks/token
Token is the concept that describes the current position in the process flow. When you start the process you have a graph of nodes and based on the configuration you will go from one to another based on the defined sequence (connection between nodes).
The token is a [BPMN](../platform-overview/frameworks-and-standards/business-process-industry-standards/intro-to-bpmn) concept that represents a state within a process instance. It keeps track of the current position in the process flow and is used to store data related to the current process instance state.
A token is created each time a new process instance is started. As the actions on the process instance are executed, the token advances from one node to the next. As a node can have several [actions](./actions/actions) that need to be executed, the token is also used for keeping track of the actions executed in each node.
In case of [parallel gateways](./node/parallel-gateway), child tokens are created for each flow branch. The parent token moves to the gateway sync node and only advances after all the child tokens also reach that node.
The image below shows how a token advances through a process flow:

The token will only move to the next node when there are no more mandatory actions from the current node that need to be executed. The token will also wait on a node in case the node is set to receive an event from an external system through Kafka.
There will be cases when the token needs to be stopped in a node until some input is received from the user. If the input from the user is needed for further advancing in the process, the token should only advance after all data was received. A mandatory manual action can be used in this case and linked to the user action. This way we make sure that the process flow advances only after the user input is received.
## Checking the token status
The current process instance status can be retrieved using the FlowX Designer. It will display some info on the tokens related to that process instance and the current nodes they are in.

In case more details are needed about the token, you can click the **Process status** view button, choose a token then click the **view button** again:

## Token details
* **Token status**: Describes the state of the token in the process.
* **Status Current Node**: Describes the token status in the current node.
* **Retry**: After correcting the errors, you can hit Retry and see if the token moves on.
* **See Token status**: Opens a modal displaying a detailed view of the token status.

If there are parallel gateways configured in a proces, you will have more tokens, created for earch parallel path.

### Token status
| Token Status | Description |
| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ACTIVE | the token state is set to active when tokens are created; a parent token is reactivated when all child tokens reach the parallel gateway closing node. |
| INACTIVE | child tokens are set to inactive when they arrive in a parallel gateway closing node; the current token is set to inactive when it reaches a final node. |
| ABORTED | the current token is set to Aborted when it moves backward in order to redo a series of previous actions in the process - it is reset, and a new token is activated. |
| ON HOLD | when a parallel split gateway node is reached, the parent token is set to On hold until all the child tokens reach the parallel gateway closing node; the parent token does not have a "Retry" action icon until all the child tokens are finished. |
| DISMISSED | when the process/subprocess reaches a certain node and it is canceled/exited. |
| EXPIRED | when a defined "expiryTime" in the process definition passes the token will change to this status. |
| TERMINATED | when the process is terminated by a termination request. |
### Status current node
| Status Current Node | Definition |
| ----------------------------- | ----------------------------------------------------------------------------------------------------- |
| ARRIVED | when the token reaches the new node |
| EXECUTING | when the token execution starts |
| EXECUTED\_COMPLETE | after executing node actions, if all the mandatory actions from the node are completed |
| EXECUTED\_PARTIAL | after executing node actions, if there are still mandatory uncompleted actions on it |
| WAITING\_MESSAGE\_EVENT | when the token reaches an intermediate message catch event node, the token will be set to this status |
| WAITING\_TIMER\_EVENT | when the token reaches an intermediate timer event node, the token will be set to this status |
| WAITING\_MESSAGE | when the token waits for a message from another system |
| MESSAGE\_RECEIVED | after the message was received |
| MESSAGE\_RESPONSE\_TIMED\_OUT | if the message was not received in the set timeframe |
### See token status
You can access a detailed view of the token status by going to your Process instance -> Tokens -> View (eye icon):

Here you will find details like:
* **id**: The unique identifier of the token.
* **version**: The version of the token.
* **parentTokenId**: The identifier of the parent token, if any.
* **startNodeId**: The identifier of the node where the token started.
* **embedNodeId**: The identifier of the embedded node, if any.
* **mainSwimlaneId**: The identifier of the main swimlane associated with the token.
* **currentProcessVersionId**: The identifier of the current process version.
* **currentContext**: The current context of the token.
* **initiatorType**: The type of the initiator, if any.
* **initiatorId**: The identifier of the initiator, if any.
* **currentNodeId**: The identifier of the current node associated with the token.
* **currentNodeName**: The name of the current node.
* **state**: The state of the token (for example, INACTIVE, ACTIVE, etc.)
* **statusCurrentNode**: The status of the current node.
* **syncNodeTokensCount**: The count of synchronized node tokens.
* **syncNodeTokensFinished**:The count of finished synchronized node tokens.
* **dateUpdated**: The date and time when the token was last updated.
* **paramValues**: Parameter values associated with the token.
* **processInstanceId**: The identifier of the process instance.
* **currentNode**: Details of the current node.
* **nodesActionStates**: An array containing information about action states of nodes associated with the token.
* **uuid**: The unique identifer id of the token.
# Conditional styling
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/conditional-styling
Dynamically update styling and properties of UI elements based on conditions, reducing the need for multiple prototypes.
Conditional styling enables dynamic, data-driven design adjustments based on specific conditions. It helps reduce the need for multiple prototypes by applying styles conditionally, depending on the data and platform-specific configurations.
**Conflict Resolution:** When multiple conditions overlap, the latest condition (evaluated from top-to-bottom) takes priority.
***
## Configuring conditional styling
1. Open the **UI Designer**.
2. Select a **Text**, **Link**, or **Container** element.
3. Navigate to the **Styles** tab.
4. Locate the **Conditional Styling** section.
5. Click the **➕** icon to add new expressions and effects.
6. Use the **JS Editor** to configure and test your expressions for accurate behavior.
***
## Conditional styling properties

**Availability:** Conditional styling is available for **Text**, **Link**, and **Container** UI elements.
***
## Structure of conditional styling
1. **Condition:**
* A string expression evaluated similarly to hide/disable expressions.
* Supports referencing process data store keys for dynamic evaluations.
2. **Overrides:**
* A key-value map defining specific property-value pairs.
* Overrides are applied based on the evaluated condition.
### Example:
```json theme={"system"}
{
"platformDisplayOptions": {
"platform": "web",
"style": {
"conditionals": [
{
"condition": "$user.age > 30",
"overrides": {
"backgroundColor": "#FFD700",
"fontWeight": "bold"
}
},
{
"condition": "$user.subscription == 'premium'",
"overrides": {
"borderColor": "#4CAF50",
"textColor": "#FFFFFF"
}
}
]
}
}
}
```
## Renderer behavior
* **Real-Time Evaluation**: Conditions are continuously evaluated based on live data updates.
* **Priority Handling**: If multiple conditions are met, the last condition in the sequence takes precedence.
* **Dynamic Application**: Styles are applied instantly upon condition satisfaction, enhancing UI responsiveness.
## Contextual menu options
* Conditional Styling Section: Copy To/From Platforms to reuse conditions across different environments.
* Expression + Effect Section: Copy To/From Platforms and Delete options for efficient management.

## Key notes
* **Dynamic Styling**: Facilitates platform-specific style overrides driven by real-time data conditions.
* **Scalability**: Designed to support iterative and scalable UI implementations.
* **Enhanced Usability**: Simplifies user interaction with intuitive UI/UX components, making style management more accessible and efficient.
Combine conditional styling with data-driven expressions to create responsive, adaptable UI designs effortlessly.
# Dynamic & computed values
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/dynamic-and-computed-values
In modern application development, the ability to create dynamic and interactive user interfaces is essential for delivering personalized and responsive experiences to users. Dynamic values and computed values are powerful features that enable developers to achieve this level of flexibility and interactivity.
## Dynamic values
Dynamic values give you the flexibility to fill various UI properties at runtime, based on process parameters or substitution tags. By doing so, your application can adapt to specific scenarios or user inputs.
Use this feature to fine-tune how your application appears and behaves without needing to rebuild or redeploy. The table below outlines which UI elements support dynamic values and the corresponding properties that can accept parameters or substitution tags.
| **Element** | **Properties** | **Accepts** |
| ------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
| [**Form Elements**](./ui-component-types/form-elements) *Input, Textarea, Select, Checkbox, Radio, Switch, Datepicker, Slider, Segmented Button* | - **Default Value** - **Label** - **Placeholder** - **Helper Text** - **Validators** - **Prefix**, **Suffix** | **Yes:** Process parameters or Substitution tags |
| [**Document Preview**](./ui-component-types/file-preview) | - **Title** - **Subtitle** | **Yes:** Process parameters or Substitution tags |
| [**Card**](./ui-component-types/root-components/card) | - **Title** - **Subtitle** | **Yes:** Process parameters or Substitution tags |
| **Form** | - **Title** | **Yes:** Process parameters or Substitution tags |
| **Message** | - **Message** | **Yes:** Process parameters or Substitution tags |
| [**Button**](./ui-component-types/buttons), [**Upload**](./ui-component-types/buttons) | - **Label** | **Yes:** Process parameters or Substitution tags |
| **Select**, **Checkbox**, **Radio**, **Segmented Button** (*Static source type only*) | - **Label** - **Value** | **Substitution tags only** |
| **Text** | - **Text** | **Yes:** Process parameters or Substitution tags |
| **Link** | - **Link Text** | **Yes:** Process parameters or Substitution tags |
| **Modal** *(`modalDismissAlert` properties)* | - **Title** - **Message** - **ConfirmLabel** - **CancelLabel** | **Yes:** Process parameters or Substitution tags |
| **Step** | - **Label** | **Yes:** Process parameters or Substitution tags |
| **Tab** | - **Title** | **Yes:** Process parameters or Substitution tags |
Default Value is not available for the **Switch** element.
### How it works
* **Process Parameters**: At runtime, values can be injected from backend logic or state, such as the outcome of an API call or an action, which then populate the relevant UI element properties.
* **Substitution Tags**: Whenever a UI property references a substitution tag key (e.g., `test`), the application replaces it with the appropriate content at runtime. This is particularly useful for rapid localization, real-time data injection, and user-specific content.

### Example using Substitution tags
Use keys beginning with "@@" to return their value. If a valid key isn't found, you'll get an empty string. If the key format is incorrect, the original string is returned.

### Example using process parameters

#### Business rule example
In the preceding example, an MVEL business rule demonstrates the population of specific keys with dynamic values from the task. This JSON object, assigned to the "app" key, captures the values for various UI properties:
```json theme={"system"}
///assigning a JSON object containing dynamic values for the specified keys to the "app" key
output.put("app",{"label":"This is a label",
"title":"This is a title",
"placeholder":"This is a placeholder",
"helpertext":"This is a helper text",
"errorM":"This is a error message",
"prefix":"prx",
"suffix":"sfx",
"subtitile":"This is a subtitle",
"message":"This is a message",
"defaultV":"defaultValue",
"value":"Value101",
"value":"Value101",
"confirmLabel":"This is a confirm label",
"cancelLabel":"This is a cancel label",
"defaultValue":"dfs",
"defaultDate":"02.02.2025",
"defaultSlider": 90});
```
Note that for releases **\< 3.3.0**, concatenating process parameters with substitution tags isn't supported when utilizing dynamic values.
## Computed values
Computed values present a method to dynamically generate values using JavaScript expressions. Beyond adhering to predefined values, computed values enable the manipulation, calculation, and transformation of data grounded in particular rules or conditions.

Computed values can be created via JavaScript expressions that operate on process parameters or other variables within the application.
To introduce a computed value, you simply toggle the "Computed value" option (represented by the **f(x)** icon). This will transform the chosen field into a JavaScript editor.

By enabling computed values, the application provides flexibility and the ability to create dynamic and responsive user interfaces.

### Slider example (parsing keys as integers)
The instance above showcases computed values' usage in a Slider element. JavaScript expressions are used to dynamically compute minimum and maximum values based on a value sourced from a linked input UI element (connected via the process key `${application.client.amount}`).
#### Minimum Value
```js theme={"system"}
if ( !isNaN(parseInt(${application.client.amount})) ) {
return 0.15 * parseInt(${application.client.amount})
} else {
return 10000
}
```
* `!isNaN(parseInt(${application.client.amount}))`: This part ascertains whether the value in the input field `(${application.client.amount})` can be effectively converted to an integer using `parseInt`. Moreover, it validates that the outcome isn't `NaN` (i.e., not a valid number), ensuring input validity.
* If the input is a valid number, the minimum value for the slider is calculated as 15% of the entered value `(0.15 * parseInt(${application.client.amount}))`.
* If the input is not a valid number `(NaN)`, the minimum value for the slider is set to 10000.
#### Maximum Value
```js theme={"system"}
if ( !isNaN(parseInt(${application.client.amount})) ) {
return 0.35 * parseInt(${application.client.amount})
} else {
return 20000
}
```
* Similar to the previous expression, it checks if the value entered on the input field is a valid number using `!isNaN(parseInt(${application.client.amount}))`.
* If the input is a valid number, the maximum value for the slider is calculated as 35% of the entered value `(0.35 * parseInt(${application.client.amount}))`.
* If the input is not a valid number `(NaN)`, the maximum value for the slider is set to 20000.
#### Summary
In summary, the above expressions provide a dynamic range for the slider based on the value entered on the input field. If a valid numeric value is entered, the slider's range will be dynamically adjusted between 15% and 35% of that value. If the input is not a valid number, a default range of 10000 to 20000 is set for the slider. This can be useful for scenarios where you want the slider's range to be proportional to a user-provided value.
### Text example (using computed strings)
The following scenario outlines the functionality and implementation of dynamically displayed property types via a text UI element. This is done based on the chosen loan type through a select UI element in a user interface.

#### Scenario
The UI in focus showcases two primary UI elements:
* Select Element - "Loan type": This element allows users to choose from different loan types, including "Conventional," "FHA," "VA," and "USDA."


* Text Element - "Property type": This element displays property types based on the selected loan type.

The following code snippet illustrates how the dynamic property types are generated based on the selected loan type (JavaScript is used):
```javascript theme={"system"}
if ("${application.loanType}" == "conventional") {
return "Single-Family Home, Townhouse CondoMulti-Family, Dwelling";
} else if ("${application.loanType}" == "fha") {
return "Single-Family Home, Townhouse, Condo, Manufactured Home";
} else if ("${application.loanType}" == "va") {
return "Single-Family Home, Townhouse, Condo, Multi-Family Dwelling";
} else if ("${application.loanType}" == "usda") {
return "Single-Family Home, Rural Property, Farm Property";
} else {
return "Please select a loan type first";
}
```
#### Summary
* **Loan Type Selection**: Users interact with the "Loan Type Select Element" to choose a loan type, such as "Conventional," "FHA," "VA," or "USDA."
* **Property Types Display**: Once a loan type is selected, the associated property types are dynamically generated and displayed in the "Text Element."
* **Fallback Message**: If no loan type is selected or an invalid loan type is chosen, a fallback message "Please select a loan type first" is displayed.
### Integration across the UI elements
The UI Designer allows the inclusion of JavaScript expressions for generating computed values. This functionality extends to the following UI elements and their associated properties:
| Element | Properties |
| -------------------------------------- | ----------------------------------- |
| Slider | min Value, max Value, default Value |
| Input | Default Value |
| Any UI Element that accepts validators | min, max, minLength, maxLength |
| Text | Text |
| Link | Link Text |
* **Slider**: The min value, max value, and default value for sliders can be set using JavaScript expressions applied to process parameters. This allows for dynamic configuration based on numeric values.
* **Any UI Element that accepts validators min, max, minLength, maxLength**: The "params" field for these elements can also accept JavaScript expressions applied to process parameters. This enables flexibility in setting validator parameters dynamically.
* **Default Value**: For input elements like text inputs or number inputs, the default value can be a variable from the process or a computed value determined by JavaScript expressions.
* **Text**: The content of a text element can be set using JavaScript expressions, allowing for dynamic text generation or displaying process-related information.
* **Link**: The link text can also accept JavaScript expressions, enabling dynamic generation of the link text based on process parameters or other conditions.
When working with computed values, it's important to note that they are designed to be displayed as integers and strings.
For input elements (e.g., text input), you may require a default value from a process variable, while a number input may need a computed value.
## Understanding the return statement
### Why the return statement is essential
When working with computed values in the UI Designer, **the `return` statement is mandatory** for your JavaScript expressions to function correctly. This is a fundamental requirement that ensures your computed values are properly evaluated and applied to UI elements.
**Technical Reason**: Computed values are executed as JavaScript functions in the UI Designer's evaluation engine. Like any JavaScript function, they must explicitly return a value to provide output to the calling context.
### The role of return in computed values
Computed values use JavaScript expressions that must explicitly return a value using the `return` statement. Without it, your expression will not produce any output, and the UI element will not receive the expected value.
**Critical**: If you forget the `return` statement, your computed value will evaluate to `undefined`, which can cause:
* UI elements to display blank or default values
* Validation rules to fail unexpectedly
* Slider ranges to become invalid
* Text elements to appear empty
#### ✅ Correct Implementation
```javascript theme={"system"}
// Slider minimum value calculation
if (!isNaN(parseInt(${application.client.amount}))) {
return 0.15 * parseInt(${application.client.amount});
} else {
return 10000;
}
```
#### ❌ Incorrect Implementation
```javascript theme={"system"}
// This will NOT work - missing return statements
if (!isNaN(parseInt(${application.client.amount}))) {
0.15 * parseInt(${application.client.amount}); // No return!
} else {
10000; // No return!
}
```
### Best practices for testing
#### Always include return statements
Every code path in your computed value expression should have a `return` statement.
#### Handle edge cases
```javascript theme={"system"}
// Good practice: Handle both valid and invalid inputs
if (!isNaN(parseInt(${application.client.amount}))) {
return 0.15 * parseInt(${application.client.amount});
} else {
return 10000; // Fallback value
}
```
#### Test different scenarios
When testing your computed values, ensure you test:
* **Valid input values** - Normal expected data
* **Invalid or empty input values** - `null`, `undefined`, empty strings
* **Edge cases** - Zero, negative numbers, very large numbers
* **Different data types** - Strings that look like numbers, boolean values
* **Network delays** - Process parameters that might not be loaded yet
**Pro Tip**: Use your browser's developer console to test computed value logic before implementing it in the UI Designer. You can copy your expression and test it with sample data.
#### Use meaningful default values
```javascript theme={"system"}
// Provide sensible defaults for fallback scenarios
if ("${application.loanType}" == "conventional") {
return "Single-Family Home, Townhouse, Condo, Multi-Family Dwelling";
} else {
return "Please select a loan type first"; // Clear user guidance
}
```
## Troubleshooting common issues
### Issue: Computed value not updating
**Symptoms**: UI element shows old values or doesn't change when process parameters change
**Solution**:
* Ensure every code path has a `return` statement
* Check that process parameter syntax uses `${}` correctly
* Verify the process parameter actually exists and has data
### Issue: Getting `undefined` values
**Symptoms**: UI elements appear blank or show "undefined"
**Solution**:
* Check that your JavaScript expression syntax is correct and includes `return`
* Add fallback `return` statements for all possible conditions
* Use defensive programming: `return ${application.value} || "default value"`
### Issue: Values not calculating correctly
**Symptoms**: Math operations produce unexpected results
**Solution**:
* Verify that process parameters are properly referenced with `${}` syntax
* Use `parseInt()` or `parseFloat()` for numeric operations
* Add type checking: `if (typeof ${application.value} === 'number')`
### Issue: Expression works in console but not in UI Designer
**Symptoms**: Logic works when tested separately but fails in computed values
**Solution**:
* Remember that process parameters use `${}` syntax, not regular JavaScript variables
* Ensure all code paths return values, not just the main logic
* Check for syntax errors specific to the UI Designer's JavaScript engine
## Summary
The `return` statement is not optional in computed values—it's a requirement. When testing your computed value rules:
1. **Always** include `return` statements in your JavaScript expressions
2. **Test** all possible code paths and scenarios
3. **Provide** meaningful fallback values for edge cases
4. **Verify** that your expressions work correctly across different input conditions
5. **Debug** using browser console before implementing in UI Designer
**Final Reminder**: Without the `return` statement, your computed values will not function as expected, and your UI elements will not receive the calculated values they need to display correctly. This is the #1 cause of computed value failures.
### Quick Reference: Common Return Patterns
```javascript theme={"system"}
// Simple conditional return
return ${application.value} > 100 ? "High" : "Low";
// Multiple conditions with fallback
if (${application.status} === "active") {
return "Status: Active";
} else if (${application.status} === "pending") {
return "Status: Pending";
} else {
return "Status: Unknown";
}
// Numeric calculations with validation
if (!isNaN(parseFloat(${application.amount}))) {
return parseFloat(${application.amount}) * 1.1;
} else {
return 0;
}
// String operations
return (${application.firstName} || "") + " " + (${application.lastName} || "");
```
# Layout configuration
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/layout-configuration
Layout settings are available for all components that can group other types of elements (for example, Containers or Cards).
The layout configuration settings enable users to customize key properties, including layout direction, alignment, gap, sizing, and spacing, to create visually appealing and functional designs.
These settings can be applied practically in various ways, depending on the context and purpose of the design:
* **Layout Direction and Alignment**: Use these settings to control how content is displayed, ensuring a logical and visually appealing arrangement. For example, a left-to-right layout direction suits languages that read from left to right, while center alignment is ideal for headings or titles.
* **Gap, Sizing, and Spacing**: Manage the distance between elements to create a sense of hierarchy and balance. Adjusting spacing between paragraphs or sections can improve readability, while resizing elements can prioritize certain components within the design.
* **Accessibility Considerations**: Customizing layout direction, alignment, spacing, and sizing can enhance the accessibility and inclusivity of your design. For example, adjusting these settings can make content more readable for users with disabilities or those using assistive technologies.
## Linear layout
The Linear layout arranges child elements in a single line, either horizontally or vertically.
### Linear layout configuration properties
**Linear**: Selected by default for arranging child elements in a linear fashion.

* **Horizontal**: Aligns child elements horizontally in a row.
* **Vertical**: Aligns child elements vertically in a column.

Controls the alignment of child elements along the main axis (the direction set by Horizontal or Vertical).

Options include:
* **Start**: Aligns elements at the start of the container.
* **Center**: Centers elements along the main axis.
* **End**: Aligns elements at the end of the container.
* **Space Between**: Distributes elements evenly with space between them.
* **Space Around**: Distributes elements with space around them.
* **Space Evenly**: Distributes elements with equal space around them.
Controls the alignment of child elements along the cross axis (perpendicular to the main axis).

Options include:
* **Start**: Aligns elements at the start of the cross axis.
* **Center**: Centers elements along the cross axis.
* **End**: Aligns elements at the end of the cross axis.
* **Stretch**: Stretches elements to fill the container along the cross axis.

* **Enabled** (Yes): This option allows elements to wrap onto multiple lines when they exceed the container's width along the main axis, ensuring a flexible and responsive layout.
* **Disabled** (No): This option forces all elements to remain on a single line, even if they overflow beyond the container's width, potentially causing elements to be clipped or hidden.
Sets the spacing between child elements, measured in pixels.

To better understand how these layout configurations work and see real-time feedback on different combinations, please refer to the following link:
## Grid layout
In addition to linear (flex-based) layouts, you can configure components using a grid layout. This option is particularly useful for designs requiring a more structured and multi-dimensional arrangement of elements.

### Switching layout types
For components that contain child elements (such as Containers, Cards, and Forms), you can easily switch between a linear layout and a Grid layout using a layout picker. The default layout is linear, but you can select Grid to arrange your content in a more structured way.
### Platform-specific layouts
You can configure different layout settings for different platforms. For example, you can opt for a grid layout on the web but switch to a linear layout on mobile for a more streamlined user experience. This flexibility ensures that the design is responsive and optimized for each platform, improving usability across different devices.

#### Configuring the grid
Once the Grid layout is selected, you can define the number of columns. Initially, the columns will be distributed equally, meaning all columns will have the same width. Additional customization options include:
* **Number of Columns**: Set the number of columns for the grid. By default, grid will use two columns.
* **Alignment**: Control how child elements are aligned within the grid. Alignment can be adjusted both horizontally and vertically, ensuring that content is positioned exactly where needed.
* **Gap Configuration**: Customize the gap between columns and rows. The default gap is inherited from the parent component's theme settings, ensuring consistency across your design.

#### Grid child settings
When configuring a grid, individual child components can be further customized:
* **Column Span**: Set how many columns a child component should span across.
Col Span should not exceed the number of parent grid columns.

* **Row Span (Web Only)**: Set how many rows a child component should span.

#### Order property
The Order property controls the arrangement of elements within grid layouts. By default, elements follow the order in which they appear in the parent component's array. However, this order can be customized using the following options:
* **Auto**: The default setting that retains the order of elements as defined in the array (default value is `0`).
* **First**: Moves the element to the first position by setting its order to `-999`.

* **Last**: Moves the element to the last position by setting its order to `999`.
* **Manual**: Allows for custom ordering by setting a specific numerical value.
Example: In a Grid with 10 elements, setting one element's order to `5` while the others are set to `auto` (which equals `0`) will place that element last, because `5` is greater than `0`.
#### Alignment in grid layouts
Proper alignment within grid layouts is essential, particularly when working with fixed-width columns or rows. By default, child elements will inherit alignment settings from their parent component, ensuring a consistent look and feel.
However, you have the flexibility to override these default settings for individual child elements, allowing precise control over horizontal and vertical alignment. This customization is key to achieving the desired visual structure, especially when certain elements need specific positioning within the grid.
### Component details
* **Components with gridLayout Property**: The following components support the `gridLayout` property:
* [**CONTAINER**](./ui-component-types/root-components/container)
* [**CARD**](./ui-component-types/root-components/card)
* **FORM**
* [**COLLECTION**](./ui-component-types/collection)
* [**COLLECTION PROTOTYPE**](./ui-component-types/collection/collection-prototype)
* **Components with gridChild Property**: All components can have the `gridChild` property, depending on their parent component's layout.
* **Collection gridLayout**: Within collections, the `gridLayout` property specifies only the number of columns, rowGap, and columnGap.
* **Collection Prototype**: The collection prototype does not include the `gridChild` property.
* **Grid and Flex Layout Application**: The grid and flex layouts apply exclusively to the layout of child components. Elements such as Card titles, subtitles, and Form titles are excluded from these layout types.
### Default style properties
* **Grid Layout Defaults**:
* **Columns**: 2
* **ColumnGap**: Inherited from component theming gap
* **RowGap**: Inherited from component theming gap
* **Position**: Start Start (aligning items to the start both horizontally and vertically)

* **Grid Child Defaults**:
* **Position**: Start Start (aligned to the start of both axes)
* **ColumnSpan:** 1 (spans a single column)
* **RowSpan (Web)**: 1 (spans a single row)
* **Order**: 0 (Auto, maintaining the default order of elements)

***
### Example using grid layout
**Use case**: **Customer Information Form**
This scenario involves a banking application that requires detailed input from a company representative, either during onboarding or for a loan application. Given the need to gather extensive information, a form with a 2-column grid layout is used to ensure clean and consistent alignment of fields.

For forms requiring additional inputs, consider adjusting the **Columns** property to match the number of fields needed. Expanding the form layout will help organize the inputs efficiently and improve user experience.

* Collect the company representative’s role and name.
* A 2-column grid layout can display the *Role* in one column and *Name* in the other, ensuring fields are aligned and easy to access.
* A toggle or checkbox asks if the representative is the main shareholder and/or the ultimate beneficial owner.
* A 2-column grid places these toggles side by side for a cleaner interface.
* Fields like *First Name*, *Personal Identification Number*, *Date of Birth*, and *Country of Residence* are collected.
* The 2-column grid aligns these fields horizontally, with appropriate spacing for readability.
* Collects *Phone Number*, *Email*, and *Preferred Method of Contact*.
* The grid places *Phone Number* and *Email* side by side, while the *Preferred Method of Contact* dropdown spans the row.
* Collect *State*, *Country*, and *City*.
* A 3-column grid displays these fields in a single row, simplifying navigation for the user.
* Capture employment history such as *Total Service Duration* and *Verified By*.
* A 2-column grid aligns these fields for easy comparison, avoiding misalignment or unnecessary gaps.
* A simple yes/no radio button for union membership.
* A grid layout ensures the options are neatly aligned for a clean, straightforward selection.
***
### Best Practices
To ensure an optimal user experience and consistent visual design, consider these best practices when using grid layouts:
* **Minimize Fixed Widths**: Avoid using fixed widths for child components in a grid. Relying on flexible sizing allows the grid to adapt smoothly across different screen sizes and devices. Only use fixed widths when absolutely necessary (e.g., for icons or buttons with defined sizes).
* **Consider Total Width**: If you know the width of the screen is `X`, ensure that the total width of your fixed-width elements doesn't exceed `X`. This prevents layout issues like content overflow or misalignment across different devices.
* **Use Column Span Thoughtfully**: When setting the `columnSpan` for a grid child, ensure that the total spans across all elements do not exceed the number of columns. This ensures a consistent and predictable layout.
* **Avoid Overcrowding**: When adding numerous child components to a grid, be mindful of spacing (gaps) between elements. Proper use of `rowGap` and `columnGap` helps maintain clarity and reduces visual clutter.
* **Leverage Default Inheritance**: Utilize the default alignment inheritance from the parent grid to ensure consistency. Only override alignment on child components when specific visual differences are needed.
* **Use `Auto` Order When Possible**: Stick with the `auto` order setting for most child components, unless a specific element needs to appear first or last. This will help maintain logical reading and visual flow without complex manual ordering.
* **Always Be Mindful of Mobile Screen Width**: When designing for mobile, always consider the narrower screen width. Ensure that grid layouts adapt gracefully, perhaps switching from a grid to a linear layout, or adjusting spacing and sizing to fit within the mobile screen's constraints without causing overflow or misalignment.
* **Test Across Platforms**: Given potential differences in behavior between web, iOS, and Android platforms, test your grid layout across these platforms to ensure consistent performance and avoid unexpected behavior like overflow or misalignment.
* **Avoid Fixed Widths on Columns**: Instead of setting fixed widths on the entire column, apply fixed widths to the individual elements inside the grid cells. This ensures more flexible layouts that adapt to different screen sizes, especially on mobile devices, without causing issues like overflow or misalignment.
### FAQs
**A:** The order property works relative to other elements. If other elements are set to `auto` (which equals `0`), then the element with order `5` will be placed after all the `0` elements, making it appear last.

**A:** Be careful with using fixed widths in Grid layouts. Fixed widths can lead to unexpected behavior, especially on different devices. It's better to use flexible sizing options whenever possible to maintain a responsive and predictable design.
# Localization and internationalization
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/localization-and-i18n
FlowX.AI localization and internationalization adapt applications to different languages, regions, and formats, enhancing the user experience with dynamic date, number and currency formatting.
## Internationalization
Internationalization (i18n) in FlowX.AI enables applications to be easily adapted for multiple languages and regions without altering the core code. It sets the foundation for localization by handling language structure, layout adjustments, and supporting various formats.
To set the default language at the application level, navigate to **Projects -> Application -> Settings**.

## Localization
Locale settings impact all date, number, and currency formats based on the combination of region and language. The language dictates translations, while the region specifies formatting order and conventions.
### Locale sources
Locale settings are derived from two main sources:
* **Container Application**: Provides global locale settings across the application.
If not specified during deployment, the default locale will be set to `en-US`.
* **Application Level**: Enables context-specific overrides within the application for formatting Numbers, Dates, and Currencies.

## Core i18n & l10n features
### Date formats
The default date format in FlowX.AI is automatically determined by the default locale set at the application or system level. Each locale follows its region-specific date convention.
For example:
* en-US locale (United States): `MM/DD/YYYY` → 09/28/2024
You can set date formats at the application level (as you can see in the example above), choosing from five predefined options: short, medium, long, full, or custom (e.g., dd/mm/yy).
Additionally, date formats can be overridden at the UI Designer level for specific UI elements that support date customization.

UI Elements supporting date formats:
* Text
* Link
* Message
* Datepicker
FlowX.AI will apply the following formatting options, adapting to the region's standard conventions:
| Format Type | Format Pattern | Example | Description |
| ----------- | --------------------- | ------------------------------ | ------------------------------------------ |
| **Short** | `MM/dd/yy` | `08/28/24` | Month before day, two-digit year. |
| **Medium** | `MMM dd, yyyy` | `Sep 28, 2024` | Abbreviated month, day, four-digit year. |
| **Long** | `MMMM dd, yyyy` | `September 28, 2024` | Full month name, day, and four-digit year. |
| **Full** | `EEEE, MMMM dd, yyyy` | `Thursday, September 28, 2024` | Full day of the week, month, day, year. |
| **Custom** | `dd/MM/yyyy` | `28/08/2024` | User-defined format; day before month. |
The date formats shown in the example are based on the **en-US (United States English) locale**, which typically uses the month-day-year order.

If the predefined date formats do not met your needs you can declare and use a custom date format (both at application level or override in UI Designer).
The following example will demonstrate how to set and display various date formats using text UI elements. We will override the default format (originating from the application level) directly in the UI Designer to showcase all available formats:
FlowX.AI formats dates using [**ISO 8601**](https://www.iso.org/iso-8601-date-and-time-format.html) for consistent and clear international representation.
### Number formatting
FlowX.AI adjusts number formats to align with regional standards, including the use of appropriate decimal separators and digit grouping symbols. This ensures that numbers are displayed in a familiar format for users based on their locale.
#### Locale-specific formatting
Formatting the numbers to adapt decimal separators (`comma` vs. `dot`) and digit grouping (`1,000` vs. `1.000`) to match regional conventions.
The correct formatting for a number depends on the locale. Here's a quick look at how the same number might be formatted differently in various regions:
* **en-US (United States)**: 1,234.56 (comma for digit grouping, dot for decimals)
* **de-DE (Germany)**: 1.234,56 (dot for digit grouping, comma for decimals)
* **fr-FR (France)**: 1 234,56 (space for digit grouping, comma for decimals)
* **es-ES (Spain)**: 1.234,56 (dot for digit grouping, comma for decimals)
#### Decimal precision
You can set minimum and maximum decimal places for numbers in application settings to store data and display it with the required precision in the data store.

Formatting settings defined in the FlowX.AI props in the UI Designer take precedence over the application-level formatting settings.

For UI elements that support `number` or `currency` types, FlowX.AI checks the data model for precision settings and applies them during data storage, ensuring consistency to configured precision levels.

This means that when using a `float` data model attribute, the precision settings directly control how the number is saved in the data store, specifying the maximum number of decimal places that can be stored.
Additionally, an for input UI elements a mask is applied to prevent users from entering more decimal places than the precision set, ensuring data integrity and compliance with defined formatting rules.
For more details, refer to [Data model integration](#data-model-integration).
* **Minimum Decimals**: Sets the least number of decimal places that a number will display. If a number has fewer than the specified decimals, trailing zeros will be added to meet the requirement.
* **Maximum Decimals**: Limits the number of decimal places a number can have. If the number exceeds this limit, it will be rounded to the specified number of decimals.
**Example**:
If you set both Minimum and Maximum Decimals to 3, a number like 2 would display as 2.000, and 3.14159 would be 3.141.

At runtime, the system applies number formatting rules based on the locale and the settings defined in the application's configuration or UI Designer overrides.
If the number is linked to a data model key the formatting adheres to the metadata defined there, ensuring consistent rendering of numerical data.
### Currency formatting
FlowX.AI provides currency formatting features that dynamically adapt to regional settings, ensuring accurate representation of financial data.
#### Currency object structure
Currencies are managed as a system object with `amount` and `code` keys, creating a wrapper that facilitates consistent handling. This design ensures that every currency display corresponds accurately to the regional and formatting standards defined by the locale. If the `code` is not provided, the system uses the locale to determine the appropriate currency symbol or code.
#### Display behavior
When displaying currency values, the system expects keys like `loanAmount` to have both `amount` and `code` properties. For example, with the locale set to `en-US`, the output will automatically follow the US formatting conventions, displaying amounts like "\$12,000.78" when the currency is USD.
* If the value found at the key path is not an object containing `amount` or `code`, the system will display the value as-is if it is primitive. If it's an object, it will show an empty string.
* If the key path is not defined, similar behavior applies: primitive values are displayed as-is, and objects result in an empty string.
#### Locale-sensitive formatting
Currency formatting depends primarily on the region defined by the locale, not the language.
When the currency `code` is `null`, the system defaults to the currency settings embedded within the locale, ensuring region-specific accuracy.
#### Dynamic formatting in UI
FlowX dynamically applies number formatting within UI components, such as inputs and sliders. These components adjust in real-time based on the current locale, ensuring that users always see numbers in their preferred format. UI components that support currency values dynamically format them in real time. For example:
* Input fields with `CURRENCY` types save values in `{key path}.amount` and will delete the entry from the data store if the input is empty.
* Sliders will save integer values (with no decimals) to `{key path}.amount` and format the displayed values, including min/max labels, according to the locale and currency.

**Formatting Text with locale and data from UI elements**
This example demonstrates how to format a dynamic text by substituting placeholders with values from a data store, taking into account locale-specific formatting. In this case, the goal is to insert the value coming from a key called loanAmount (added on an Input UI element) into a text and format it according to the en-US locale.
**Data store**:
A JSON object containing key-value pairs. The `loanAmount` key holds a currency object with two properties:
* amount: The actual loan value (a float or number).
* code: The currency code in ISO format (e.g., "USD" for US Dollars).
```json{ theme={"system"}
"loanAmount": {
"amount": 12000.78,
"code": "USD"
}
}
```
**Locale**
The locale determines the number and currency formatting rules, such as the use of commas, periods, and currency symbols.
Locale: en-US (English - United States)
**Processing**
* Step 1: The platform extracts the loanAmount.amount value (12000.78) and the loanAmount.code from the data store.
* Step 2: Format the amount according to the specified locale (en-US). In this locale:
* Use a comma , to separate thousands.
* Use a period . to denote decimal places.
* Step 3: Replace the `${loanAmount}` placeholder in the text with the formatted value \$12,000.78.
**Output**
The resulting text with the formatted loan amount and the appropriate currency symbol for the en-US locale.

Here is the data extracted from the data store (it is available on the process instance)
For instance, with a Romanian locale (`ro-RO`), currency is displayed like "12.000,78 RON" when the `code` is null or unavailable.
## Data model integration
FlowX.AI integrates number formatting directly with the data model. When keys are set to number or currency types, the system automatically checks and applies precision settings during data storage. This approach ensures consistency across different data sources and UI components.
Integration Details:
* Numbers are broken down into integer and decimal parts, stored according to specified precision.
* Currency keys are managed as wrapper objects containing amount and code, formatted according to the locale settings.
## UI Designer integration
Formatting is dependent on the locale, which includes both language and region settings. The application container provides the locale for display formatting.

Formatting settings (which is by default `auto`) can be switched to `manual` and overridden for text, message, and link components within the UI Designer's properties tab.
The UI Designer enables application-level formatting settings for localized display of dynamic values.
## Supported components
* **Text/Message/Link**: Override general localization settings to match localized content presentation.
* **Input Fields**: Inputs correctly format currency and number types based on regional settings.
* **Sliders**: Currency formatting for sliders, with suffixes disabled when currency types are detected.
* **Datepickers**: Date formatting
# UI actions
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-actions
UI actions bridge the gap between multiple UI elements and specific actions, dictating how the interface responds to user interactions. They control behaviors such as displaying loaders, dismissing modals, or sending default data back to a process, enabling interaction between UI components and underlying logic.
## Overview
UI actions establish connections between [**UI components**](./ui-component-types/root-components/custom) or custom elements and predefined [**actions**](../actions/actions). These connections ensure that processes are executed efficiently while defining the UI's response. Examples include:
* Showing a loader during an action execution.
* Automatically dismissing a modal after a task is completed.
* Sending default data back to the process.
***
## Types of UI actions
UI actions can be categorized into two main types:
1. **Process UI Actions**: Directly interact with process nodes and manual actions.
2. **External UI Actions**: Perform actions that link to external URLs or open new tabs.
***
### Process UI actions
Process UI Actions (labeled `ACTION`) define how a [**Button**](../ui-designer/ui-component-types/buttons), whether generated or custom, interacts with a manual process action. Before configuring a UI action, ensure the corresponding [manual action](../actions/actions) is set up.
#### Adding a node action
To configure a UI action, first add a node action (type: manual) to a process node. For detailed steps, refer to:
**Example: Configuring a node action (Save Data)**
1. **Add an Action**: Attach an action to a node.
2. **Select the Action Type**: Choose **Save Data**, for instance.
3. **Action Type**: Set it to **manual**.

Both UI actions and [node actions](../actions/actions) must be configured on the same user task node.
### Configuring a UI action
Below are the key configuration options for defining a UI action:
* **Event**: Define when the action should trigger ([Learn about Events](#events)).
* **Action Type**: Specify the type of action ([Explore Action Types](#action-types)).
* **Node Action Name**: Select the corresponding manual action from the dropdown.
* **Use a different name for UI action**: Optionally, define a unique name to trigger the action in [**Custom Components**](./ui-component-types/root-components/custom).
* **Add custom keys**: Add custom keys beyond those in the data model.
* **Exclude keys**: Specify data keys to exclude.
* **Add custom body**: Provide a default JSON response, merged with additional parameters during execution.
* **Add form to submit**: Link the action to specific UI elements for validation.
* **Hide Subprocess Navigation**: Disable navigation to subprocesses.
* **Show loader**: Display a loader until a server-side event (SSE) updates the data or screen.

## UI actions elements
### Events
Events define how user interactions trigger UI actions. The available event types are:
* **CLICK**: Triggered when a button is clicked.
* **CHANGE**: Triggered when input fields are modified.
Events are not applicable for UI actions on [Custom Components](./ui-component-types/root-components/custom).
***
### Action types
The **Action Type** dropdown includes several predefined options:
* **DISMISS**: Closes a modal after the action is executed.
* **ACTION**: Links a UI action to a manual node action.
* **START\_PROJECT**: Initiates a new project instance. This action type is used to trigger a completely new process flow within a different project or application, based on the selected project and process configurations.
* **UPLOAD**: Initiates an upload action.
* **EXTERNAL**: Opens a link in a new browser tab or window.
***
## External UI actions
**External UI Actions** enable linking to external URLs and opening links in a new tab or the same tab.
When configuring an external UI action, additional options become available:
1. **URL**: Specify the web URL for the action.
2. **Open in New Tab**: Choose whether to execute the action in the current tab or a new tab.

For more information on how to add actions and how to configure a UI, check the following section:
[Managing a project flow](../../flowx-designer/managing-a-project-flow)
# File preview
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-component-types/file-preview
The File Preview UI element is a user interface component that enables users to preview the contents of files quickly and easily without fully opening them. It can save time and enhance productivity, providing a glimpse of what's inside a file without having to launch it entirely.

File preview UI elements offer various benefits such as conveying information, improving the aesthetic appeal of an interface, providing visual cues and feedback or presenting complex data or concepts in a more accessible way.
## Configuring a File preview element
A File Preview element can be configured for both mobile and web applications.
### File preview properties (web)

The settings for the File Preview element include the following properties:
* **Title**: Specifies the title of the element. If the file is downloaded or shared, the file name should serve as the title used in the preview component.
* **Subtitle**: Allows for the inclusion of a subtitle for the element.
* **Display mode**: Depending on the selected display method, the following properties are available:
* **Inline** → **Has accordion**:
* `false`: Displays the preview inline without an expand/collapse option.
* `true` (Default View: Collapsed): Displays the preview inline with an expand/collapse option, initially collapsed.
* `true` (Default View: Expanded): Displays the preview inline with an expand/collapse option, initially expanded.
* **Modal** → view icon is enabled
* **Has accordion**: Introduces a Bootstrap accordion, facilitating the organization of content within collapsible items. It ensures that only one collapsed item is displayed at a time.
* **Source Type**:
* **Media Library**: Refers to PDF documents uploaded in the Media Library.
PDF documents uploaded to the Media Library must adhere to a maximum file size limit of 10 MB.
* **Process Data**: Identifies the key location within the process where the document is sourced, establishing the linkage between the document and process data.
* **Static**: Denotes the document's URL, serving as a fixed reference point.
It's worth noting that the inline modal view can raise accessibility issues if the file preview's height exceeds the screen height.
### File preview properties (mobile)
Both iOS and Android devices support the share button.
#### iOS

#### Android

### File preview styling
The File Preview styling property enables you to customize the appearance of the element by adding valid CSS properties, for more details, click [here](../../ui-designer/ui-designer#styling).
When drag and drop a File Preview element in UI Designer, it comes with the following default styling properties:
#### Sizing
* **Fit W** - auto
* **Fit H** - fixed / Height - 400 px

## File Preview example
Below is an example of a File Preview UI element with the following properties:
* **Display mode** - Inline
* **Has accordion** - True
* **Default view** - Expanded
* **Source Type** - Static

# Image
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-component-types/image
Image UI elements are graphical components of a user interface that display a static or dynamic visual representation of an object, concept, or content.

These elements can be added to your interface using the UI Designer tool, and they are often used to convey information, enhance the aesthetic appeal of an interface, provide visual cues and feedback, support branding and marketing efforts, or present complex data or concepts in a more intuitive and accessible way.

## Configuring an image
Configuring an image in the UI Designer involves specifying various settings and properties. Here are the key aspects of configuring an image:
### Image settings
The image settings consist of the following properties:
* **Source location** - the location from where the image is loaded:
* [**Media Library**](#media-library)
* [**Process Data**](#process-data)
* [**External**](#external)
Depending on which **Source location** is selected, different configurations are available:
### Media library

* **Image key** - the key of the image from the media library
* **Select from media library** - search for an item by key and select it from the media library

* **Upload to media library** - add a new item (upload an image on the spot)
* **upload item** - supported formats: PNG, JPG, GIF, SVG, WebP; ❗️(maximum size - 1 MB)
* **key** - the key must be unique and cannot be changed afterwards

### Process data

* Identify the **Source Type**. It can be either a **URL** or a **Base 64 string**.
* Locate the data using the **Process Data Key**.
* If using a URL, provide a **Placeholder URL** for public access. This is the URL where the image placeholder is available.

### External

* **Source Type**: it can be either a **URL** or a **Base 64 string**
* **Image source**: the valid URL of the image.
* **Placeholder URL**: the public URL where the image placeholder is available
## UI actions
The UI actions property allows you to add a UI Action, which must be configured on the same node. For more details on UI Actions, refer to the documentation [here](../ui-actions).

## Image styling
The image styling property allows you to add or to specify valid CSS properties for the image. For more details on CSS properties, click [here](../../ui-designer/ui-designer#styling).

# Indicators
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-component-types/indicators
The indicators (Message UI elements) allow you to display different types of messages.
Messages can be categorized into the following types:
* **Info**: Used to convey general information to users.
* **Warning**: Indicates potential issues or important notices.
* **Error**: Highlights errors or critical issues.
* **Success**: Communicates successful operations or completion.

## Properties
When configuring a message, you have the following properties:
* **Message**: The content of the message body, this property supports markdown attributes such as: bold, italic, bold italic, strikethrough and URLs, allowing you to format the content of the message.
* **Type**: as mentioned above, there are multiple indicators: info, warning, error, success
* **Expressions**: you can define expressions to control when the message should be hidden. This can be useful for dynamically showing or hiding messages based on specific conditions.

Info example with markdown:
```markdown theme={"system"}
If you are encountering any difficulties, please [contact our support team](mailto:support@flowx.ai).
```
When executed, will look like this:

## Types and Usage
Here's how you can use the Message UI element in your UI design:
### Info
If you are encountering any difficulties, please [contact our support team](mailto:support@flowx.ai).

### Error
An error occurred while processing your request. Please try again later.

### Success
Your payment was successfully processed. Thank you for using our services!

## Indicators styling
To create an indicator with specific styling, sizing, typography, and color settings, you can use the following configuration:
### Style
The Style section allows you to customize the appearance of your indicator UI element. You can apply the following style to achieve the desired visual effect:
* **Text**: Displays only the icon and the text.

* **Border**: Displays the icon, the text and the border.

* **Fill**: It will fill the UI element's area.

For more valid CSS properties, click [**here**](../../ui-designer/ui-designer#styling).
# Table
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-component-types/table
The Table component is a versatile UI element allowing structured data display with customizable columns, pagination, filtering, and styling options.
## Overview
The **Table** component is available **only for Web**, built to deliver a consistent design through FlowX.AI’s theming framework. It closely mirrors the [**Collection**](./collection/collection) component functionality, offering dynamic data handling and flexible row/column configurations.

**Web-only UI Component:** The Table component is designed specifically for web applications and includes theming options for consistent design across the platform.
## Table elements
1. **Table Header (`th`)**\
Displays column labels, typically one `th` element per column.
2. **Rows (`tr`)**\
Each row represents a single data entry from the source array. Rows automatically repeat based on your data size.
3. **Cells**\
Cells hold data points within each row. You can place multiple UI elements (text, image, link, buttons) inside a cell.
4. **Actions Column**\
If you enable row deletion or editing, an actions column is automatically created to handle row-level features (delete icon, edit icon, etc.).

By default, when you create a new Table, three columns and a matching set of cell placeholders are generated automatically.
## Configuring the table
When building a Table, you’ll primarily interact with:
* **Generic Settings** (source key, columns, table body, expressions, styling)
* **Cell-Specific Settings** (sorting, filtering, editing, validators)

Below is an example of a JavaScript business rule that populates the Table with mock data. The `users` array is assigned to `application.users`, which serves as the Table’s source.

```js theme={"system"}
users = [
{
"firstName": "John",
"lastName": "Doe",
"loanAmount": {
"amount": 1000.00,
"code": "USD"
},
"birthDate": "1985-01-01T00:00:00Z",
"email": "john.doe@example.com"
},
{
"firstName": "John",
"lastName": "Does",
"loanAmount": {
"amount": 2000.00,
"code": "USD"
},
"birthDate": "1985-02-01T00:00:00Z",
"email": "john.does@example.com"
},
{
"firstName": "Jane",
"lastName": "Doe",
"loanAmount": {
"amount": 3000.00,
"code": "USD"
},
"birthDate": "1985-03-01T00:00:00Z",
"email": "jane.doe@example.com"
},
{
"firstName": "Jane",
"lastName": "Does",
"loanAmount": {
"amount": 4000.00,
"code": "USD"
},
"birthDate": "1985-04-01T00:00:00Z",
"email": "jane.does@example.com"
},
{
"firstName": "Jim",
"lastName": "Doe",
"loanAmount": {
"amount": 5000.00,
"code": "USD"
},
"birthDate": "1985-05-01T00:00:00Z",
"email": "jim.doe@example.com"
},
{
"firstName": "Jim",
"lastName": "Does",
"loanAmount": {
"amount": 6000.00,
"code": "USD"
},
"birthDate": "1985-06-01T00:00:00Z",
"email": "jim.does@example.com"
},
{
"firstName": "Jake",
"lastName": "Doe",
"loanAmount": {
"amount": 7000.00,
"code": "USD"
},
"birthDate": "1985-07-01T00:00:00Z",
"email": "jake.doe@example.com"
},
{
"firstName": "Jake",
"lastName": "Does",
"loanAmount": {
"amount": 8000.00,
"code": "USD"
},
"birthDate": "1985-08-01T00:00:00Z",
"email": "jake.does@example.com"
},
{
"firstName": "Jill",
"lastName": "Doe",
"loanAmount": {
"amount": 9000.00,
"code": "USD"
},
"birthDate": "1985-09-01T00:00:00Z",
"email": "jill.doe@example.com"
},
{
"firstName": "Jill",
"lastName": "Does",
"loanAmount": {
"amount": 10000.00,
"code": "USD"
},
"birthDate": "1985-10-01T00:00:00Z",
"email": "jill.does@example.com"
},
{
"firstName": "Joe",
"lastName": "Doe",
"loanAmount": {
"amount": 11000.00,
"code": "USD"
},
"birthDate": "1985-11-01T00:00:00Z",
"email": "joe.doe@example.com"
},
{
"firstName": "Joe",
"lastName": "Does",
"loanAmount": {
"amount": 12000.00,
"code": "USD"
},
"birthDate": "1985-12-01T00:00:00Z",
"email": "joe.does@example.com"
}
];
application = {
"users": users
};
output.put("application", application);
```
When creating a table, three columns with one corresponding cells are added by default.
### Table generic settings
The following generic settings are found in the Generic tab and apply to all platforms (Web, iOS, and Android):
* [**Source key**](#source-key)
* [**Columns**](#columns)
* [**Table body**](#table-body)
* [**Expressions**](#expressions)
* [**Table Styling**](#table-styling)
#### Source key
* Specify an array of objects (e.g., `application.users`), enabling dynamic row creation based on your data structure.
* Similar to the Collection component.


#### Columns
* Customize the Table’s columns: add, delete, rename, or reorder.
* Each column automatically includes a corresponding th (header cell) and td (body cell).

#### Table body
* **Default Sorting**: Sortable option must be enabled for the selected column for default sorting to work.
* **Column**: Select the desired column.
* **Direction**: Set the sort direction (**Ascending** or **Descending**).
* **Pagination**: Control how data is displayed by configuring pagination or enabling scrolling.
* **Page Size**: Set the maximum number of entries displayed per page.
* **Scrollable**: Disable pagination to enable continuous scrolling through data.
* **Deletable Rows**: Enable row deletion.

#### Hide condition
* Optionally hide the entire Table based on a JavaScript expression including the data key from another component.
* Useful for conditional flows (e.g., only show the Table if certain conditions are met).
**Demonstration**:
***
## Feature highlights
### Default sorting
* **Enable default sorting** in table body settings.
* **Select the desired column** and **sort direction** (ascending by default).
Sortable option must be enabled for the selected column at **cell level** for default sorting to work.

### Pagination & scrolling
Define how many rows appear on each page using **Pagination** feature.
* **Scrolling**: Disable pagination to allow continuous scrolling.

### Editable rows
Enable row editing in **cell-level → column settings**.


* Editing can be triggered by double-click or the dedicated Edit button icon.
Make sure each editable cell references a valid data model key to facilitate edit.
* Edits are validated and saved row-by-row.
### Deletable rows
Toggle **Deletable** in Table settings to enable row deletion.


A delete icon will appear in the Actions column, removing the corresponding row from the data source.
### Filters
Mark columns as filterable to enable filtering icons.

* Filter type automatically matches the column data type (string, number, date, boolean, or currency).

Filtering option is ideal for large data sets where quick column-based searches are necessary.
## Table styling
### Sizing
* **Fit Width**: By default, the Table stretches to occupy available width.
* **Fit Height**: Grows automatically based on content height.

### Cell styling
**Layout Options:**
* **Direction**: Horizontal (default).
* **Justify**: Space-around (evenly spaces elements within each cell).
* **Align**: Start (left-aligned).
* **Wrap**: Enables text wrapping.
* **Gap**: 8px spacing between cell elements.
**Column Style Options:**
* **Width Fit Options**:
* **Fill**: Fills available container space.
* **Fixed**: Keeps a fixed column width.
* **Auto**: Adjusts column width to fit content.

* **User Resizable Columns**: Adjust column width by dragging the column edges in the header, enhancing customization.

This Table component enhances flexibility and offers a cohesive design, integrated with FlowX.AI’s theming framework for a consistent, web-optimized user experience.
## Table UI action
Append a saveData action to the table and configure the UI action’s custom keys with the same key used as source for the table, in order for the backend to take into consideration the updated array.
See [**User Task configuration**](#user-task-configuration) section for more details.
## Actions in table cells
When configuring actions within a Table component, each action is bound to a unique table item key, ensuring that interactions within each cell are tracked and recorded precisely.
The key allows the action to target specific rows and store results or updates effectively.
* **Table Item Save Key**:
* This key is essential for identifying the exact cell or row where an action should be executed and saved.
* It ensures that data within each cell remains distinct and correctly mapped to each table entry.
* **Custom Key for Data Saving**:
* Important: To properly send the data from a selected cell/row to the backend, you must configure both a **Custom Key** (in your `SaveData` action) and a **Table Item Save Key** (in your column/cell configuration) using the same value.
* Having only a `Table Item Save Key` is not sufficient to propagate the updated information. The matching **Custom Key** in the **SaveData** action tells the system which row/cell data to capture and transmit.

* **Supported Action Types** - Available actions include:
* **Action**: Initiates predefined actions within the cell.
* **Start Process Inherit**: Enables workflows inherited from process configurations to be triggered.
* **Upload**: Allows file or data uploads directly within a table cell.
* **External**: Used to create an action that will open a link in a new tab.
## User Task configuration
When configuring a screen in User Task containing table, you must configure the following node actions:
* The `SaveData` action must be:
* **Manual**: Requires user initiation.
* **Optional**: Not mandatory for task completion.
* **Repeatable**: Can be executed multiple times.
* **Execution Order Constraint**:
* The `SaveData` action can only be executed **before** mandatory actions.
* The UI is built by configurators to ensure the correct execution order of actions.

* Add an UI action to the table by assigning the previously created node action.

It is important to also add a custom key that is exactly the source key of the table so the platform will be able to know where to save the edits applied in the table.
* An additional **manual** and **mandatory** action should be included.
* This ensures that the **token remains within the user task** where the table is rendered.

* You can add another node action if you want to assign an UI action to a table cell element (e.g, a text).
* Assign the UI action to that particular element.
* Make sure it is manual, optional and repeatable (can only be executed before mandatory actions).
## FAQs
The `table item key` is essential for identifying specific rows and cells within a table. When actions are triggered in table cells, this key ensures that the action applies to the correct item, allowing data to be saved accurately in the intended cell or row. Without this key, actions may not track or save data correctly.
While the Table component shares structural similarities with Collection, it is tailored specifically for tabular data. Unlike Collection, it supports easy customization of columns, row pagination, and in-place editing (in future versions), streamlining the handling of tabular data.
Conditional styling is a planned feature for version 5.0.0. Once available, it will allow you to apply specific styles to cells or rows based on conditions, such as highlighting critical items or overdue entries.
No, nested tables (tables within other tables) are currently unsupported and are not planned for future updates. This limitation keeps the Table component optimized for its intended use without overcomplicating its structure.
Table cells support various actions:
* **Action**: Executes a predefined action within the cell.
* **Start Process Inherit**: Triggers workflows based on inherited process configurations.
* **Upload**: Allows direct file or data uploads within a cell.
Each of these actions requires a `table item key` to ensure data accuracy.
Pagination can be customized to control the number of entries displayed per page. Alternatively, you can enable scrollable view mode by disabling pagination, which provides a continuous, scrollable data view.
Direct in-place editing is scheduled for version 4.6.0, allowing users to edit data directly within table cells. This feature will improve efficiency for workflows requiring frequent table data updates.
Yes, the Table component requires a source in the form of an array of objects. The source allows the Table to dynamically populate cells based on the data structure, ensuring rows and columns align with your data set.
Custom actions can be configured using the UI Designer. Each action added to a cell will leverage the `table item key` to perform tasks such as saving edits, initiating workflows, or uploading files directly from the table.
Yes, the Table component supports JavaScript expressions to control visibility dynamically. By setting up expressions, you can create conditions that hide certain columns or rows when specific criteria are met.
# Typography
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/ui-component-types/typography
Typography is an important aspect of design that greatly influences how users perceive and interact with your content. In this section, we'll explore how to effectively utilize two essential UI elements, "Text" and "Link."

## Text
The "Text" UI element serves as a tool dedicated solely to presenting text within your user interface. Whether it's paragraphs or descriptions, the "Text" UI element. Through manipulation of embedded CSS properties, you're afforded to edit the visual appearance and formatting of text, aligning it with your design preferences.
### Markdown compatibility
The Text UI element gives you with the flexibility of Markdown formatting. You can enhance your text using various markdown tags, including:
* **Bold**
```markdown theme={"system"}
**Bold**
```
* *italic*
```markdown theme={"system"}
*italic*
```
* ***bold italic***
```markdown theme={"system"}
***bold italic***
```
* strikethrough
```markdown theme={"system"}
~~strikethrough~~
```
* URL
```markdown theme={"system"}
[URL](https://url.net)
```
Let's take the following mardkown text example:
```markdown theme={"system"}
Be among the *first* to receive updates about our **exciting new products** and releases. Subscribe [here](flowx.ai/newsletter) to stay in the loop! Do not ~~miss~~ it!
```
When running the process it will be displayed like this:

### Text styling
The Styling section provides you with granular control over how your text is displayed, ensuring it aligns with your design vision.
#### Spacing:
Adjust the spacing around your text, setting the margin as follows: 16px 0 0 0 0 0 0 16px.
#### Sizing:
Choose "Fit W" to ensure the text fits the width of its container.
#### Typography
Define the font properties:
* **Font family**: Choose the desired font family.
* **Font weight**: Define the thickness of the font.
* **Font size**: Specify the font size in pixels (px).
* **Height**: Set the line height in pixels (px).
* **Color**: Determine the text color.
#### Align
Determine the text alignment.
## Link
Links are essential for navigation and interaction. The "Link" UI element creates clickable text that directs users to other pages or external resources.
### Configuring the Link element
The Link component provides a simple way to create hyperlinks in your application interface.
#### Properties
* **Label**: The visible text for the link that users will click on.
* **URL**: The destination URL for the link. This property supports:
* Static URLs (e.g., `https://example.com`)
* Dynamic keys for dynamic URL construction (e.g., `${application.externalUrl}`)
* Combination of static text and dynamic values (e.g., `https://example.com/${application.userId}/profile`)
The Link component supports dynamic keys in the URL property across all platforms (Web, iOS, and Android). This allows you to dynamically construct URLs using process data stored in the datastore.

#### Using dynamic keys in URL
You can reference process data in your link URLs by using the `${key}` syntax:
**Example:**
If you have process data like:
```json theme={"system"}
{
"application": {
"documentId": "12345",
"userId": "user-abc"
}
}
```
You can create a link with:
* URL: `https://docs.example.com/view/${application.documentId}`
* Label: View Document
When rendered, this will create a link to `https://docs.example.com/view/12345`.
#### Link behavior
* Links open in a new browser tab by default
* The link text can be styled using the standard typography styling options
* Links maintain accessibility standards with proper hover and focus states
### Link styling
The Link element supports styling customization similar to the Text element:
#### Typography
* **Font family**: Choose the desired font family
* **Font weight**: Define the thickness of the font
* **Font size**: Specify the font size in pixels (px)
* **Color**: Determine the link color (default and hover states)
#### Spacing
Adjust the spacing around your link element using margin properties.
# Validators
Source: https://docs.flowx.ai/5.1/docs/building-blocks/ui-designer/validators
Validators are an essential part of building robust and reliable applications. They ensure that the data entered by the user is accurate, complete, and consistent. FlowX.AI provides a set of pre-defined validation rules that can be used to validate various form inputs such as text fields, number fields, email fields, date fields, and more across web, mobile, and desktop applications.

FlowX.AI provides default validators such as:
## Predefined validators
This validator checks whether a numeric value is smaller than the specified value. If there are no characters at all, this validator will not trigger. It is advisable to use this validator with a required validator.

Refer to MDN documentation for more details about the min attribute.
This validator checks whether a numeric value is larger than the specified value. If there are no characters at all, this validator will not trigger. It is advisable to use this validator with a [required](#required-validator) validator.

Refer to MDN documentation for more details about the max attribute.
This validator checks whether the input value has a minimum number of characters. If there are no characters at all, this validator will not trigger. It is advisable to use this validator with a required validator.

Refer to MDN documentation for more details about the minlength attribute.
This validator checks whether the input value has a maximum number of characters. If there are no characters at all, this validator will not trigger. It is advisable to use this validator with a [required](#required-validator) validator.

Refer to MDN documentation for more details about the maxlength attribute.
This validator checks whether a value exists in the input field.

It is recommended to use this validator with other validators like [minlength](#minlength-validator) to check if there is no value at all.

Refer to MDN documentation for more details about the required attribute.
This validator checks whether the input value is a valid email. If there are no characters at all, this validator will not trigger. It is advisable to use this validator with a [required](#required-validator) validator.

Refer to MDN documentation for more details about email input validation.
This validator checks whether the input value matches the specified pattern (for example, a [regex expression](https://www.regexbuddy.com/regex.html)).
**Important:** Pattern validators can only be applied to input fields of type **"text"** or **"string"**. They cannot be used with input fields of type **"number"**. If you need to validate numeric input with specific patterns (such as preventing leading zeros), you must either:
* Use a text input field instead of a number input field, or
* Create a custom validator that handles the numeric validation logic

Refer to MDN documentation for more details about the pattern attribute.
This validator allows you to validate a form element based on computed expressions that can reference other values from the process data store, not just the current form element being validated.

Example used:
```javascript Simple comparison theme={"system"}
return ${user.endDate} > ${user.startDate}
```
The validator uses a code editor where you can write computed expressions that must eventually return `true` (valid) or `false` (invalid). The expression can contain process data store values and will be evaluated dynamically.
The `customExpression` validator runs only when the field value is not empty or missing, similar to other predefined validators.
**Key features:**
* **Dynamic validation**: Based on other process values, not just the current field
* **Computed expressions**: Write JavaScript expressions that return boolean values
* **Real-time updates**: Re-evaluates when referenced process data changes
* **Universal compatibility**: Available for all form elements
**Expression examples:**
```javascript Simple comparison theme={"system"}
return ${app.endDate} > ${app.startDate}
```
```javascript Complex validation theme={"system"}
return ${app.userAge} >= 18 && ${app.hasParentConsent} === true
```
```javascript Numeric validation theme={"system"}
return ${app.totalAmount} <= ${app.availableBalance}
```
**Important considerations:**
* The expression **must** return a boolean value (`true` for valid, `false` for invalid)
* Use proper syntax when referencing process data store values with `${}`
* Ensure referenced process data keys exist to avoid runtime errors
* The validator is asynchronous and will be re-evaluated when dependent data changes
Other predefined validators are also available:
This validator can be used to validate [datepicker](/4.0/docs/building-blocks/ui-designer/ui-component-types/form-elements/datepicker-form-field) inputs. It checks whether the selected date is today or in the past. If there are no characters at all, this validator will not trigger. It is advisable to use this validator with a [required](#required-validator) validator.

This validator can be used to validate datepicker inputs. It checks whether the selected date is today or in the future. If there are no characters at all, this validator will not trigger. It is advisable to use this validator with a [required](#required-validator) validator.

## Validator compatibility with input field types
Different validators work with different input field types. Here's a compatibility matrix:
| Validator | Text Fields | Number Fields | Email Fields | Date Fields |
| ------------------- | ----------- | ------------- | ------------ | ----------- |
| required | ✅ | ✅ | ✅ | ✅ |
| min | ❌ | ✅ | ❌ | ❌ |
| max | ❌ | ✅ | ❌ | ❌ |
| minLength | ✅ | ❌ | ✅ | ❌ |
| maxLength | ✅ | ❌ | ✅ | ❌ |
| email | ❌ | ❌ | ✅ | ❌ |
| pattern | ✅ | ❌ | ✅ | ❌ |
| customExpression | ✅ | ✅ | ✅ | ✅ |
| isSameOrBeforeToday | ❌ | ❌ | ❌ | ✅ |
| isSameOrAfterToday | ❌ | ❌ | ❌ | ✅ |
To ensure the validation of all form elements within a card upon executing a Save Data action such as "Submit" or "Continue," follow these steps:
* When adding a UI action to a button inside a card, locate the dropdown menu labeled **Add form to validate**.
* From the dropdown menu, select the specific form or individual form elements that you wish to validate.
* By choosing the appropriate form or elements from this dropdown, you can ensure comprehensive validation of your form.

## Custom validators
Additionally, custom validators can be created within the web application and referenced by name. These custom validators can have various configurations such as execution type, name, parameters, and error message.
1. **Execution type** - synchronous/asynchronous validator
2. **Name** - name provided by the developer to uniquely identify the validator
3. **Params** - if the validator needs inputs to decide if the field is valid or not, you can pass them using this list
4. **Error Message** - the message that will be displayed if the field is not valid
The error that the validator returns **MUST** match the validator name.

### Custom validator example
Below you can find an example of a custom validator (`currentOrLastYear`) that restricts date selection to the current or the previous year:
#### currentOrLastYear
```typescript theme={"system"}
currentOrLastYear: function currentOrLastYear(AC: AbstractControl): { [key: string]: any } {
if (!AC) {
return null;
}
const yearDate = moment(AC.value, YEAR_FORMAT, true);
const currentDateYear = moment(new Date()).startOf('year');
const lastYear = moment(new Date()).subtract(1, 'year').startOf('year');
if (!yearDate.isSame(currentDateYear) && !yearDate.isSame(lastYear)) {
return { currentOrLastYear: true };
}
return null;
```
#### smallerOrEqualsToNumber
Below is another custom validator example that validates form input asynchronously. The validator is called `smallerOrEqualsToNumber` and takes an array of `params` as an input.
For this custom validator the execution type should be marked as `async` using the UI Designer.
```typescript theme={"system"}
export function smallerOrEqualsToNumber (params$: Observable[]): AsyncValidatorFn {
return (AC): Promise | Observable => {
return new Observable((observer) => {
combineLatest(params$).subscribe(([maximumLoanAmount]) => {
const validationError =
maximumLoanAmount === undefined || !AC.value || Number(AC.value) <= maximumLoanAmount ? null : {smallerOrEqualsToNumber: true};
observer.next(validationError);
observer.complete();
});
});
};
}
```
If the input value is undefined or the input value is smaller or equal to the maximum loan amount value, the function returns `null`, indicating that the input is valid. If the input value is greater than the maximum loan amount value, the function returns a validation error object with a key `smallerOrEqualsToNumber` and a value of true, indicating that the input is invalid.
For more details about custom validators please check the [SDK documentation](../../../sdks/).
Using validators in your application can help ensure that the data entered by users is valid, accurate, and consistent, improving the overall quality of your application.
It can also help prevent errors and bugs that may arise due to invalid data, saving time and effort in debugging and fixing issues.
# FlowX.AI Advancing Controller
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-components/advancing-controller
The Advancing Controller is a support service for the FlowX.AI Engine that enhances the efficiency of advancing operations. It facilitates equal distribution and redistribution of the workload during scale-up and scale-down scenarios.
To achieve its functionality, the Advancing Controller microservice utilizes database triggers in both PostgreSQL and Oracle Database configurations.
A database trigger is a function that is automatically executed whenever specific events, such as inserts, updates, or deletions, occur in the database.
## Usage
The Advancing Controller service is responsible for managing and optimizing the advancement process in the PostgreSQL or Oracle databases. It ensures efficient workload distribution, performs cleanup tasks, and monitors the status of worker pods.
If a worker pod fails, the service reassigns its work to other pods to prevent [**process instances**](../../projects/runtime/active-process/process-instance) from getting stuck.
It is essential to have the Advancing Controller service running alongside the FlowX Engine for uninterrupted instance advancement.
It is important to ensure that both the FlowX Engine and the Advancing Controller microservices are up and running concurrently for optimal performance.
## Configuration
For detailed instructions on how to set up the Advancing Controller microservice, refer to the following guide:
# FlowX.AI Events Gateway
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-components/events-gateway
The FlowX Events Gateway is a service that centralizes the communication with Server-Sent Events (SSE) messages from Backend to Frontend.

The FlowX Events Gateway serves as a central component for handling and distributing events within the system:
### Event processing
The Events Gateway system is responsible for receiving and processing events from various sources, such as the [**FlowX Engine**](./flowx-engine) and [**Task Management**](../core-extensions/task-management/task-management-overview). It acts as an intermediary between these systems and the rest of the system components.
It is a reusable component and is also used in administration scenarios to provide feedback without a refresh—for example, [**misconfigurations**](../../../../release-notes/v4.1.0-may-2024/v4.1.0-may-2024#misconfigurations) in platform version 4.1, allowing an error to be displayed in real-time during configuration.
### Message distribution
The Events Gateway system reads messages from the Kafka topic (`messaging_events_topic`) and distributes them to relevant components within the system. It ensures that the messages are appropriately routed to the intended recipients for further processing.
### Event publication
The Events Gateway system plays a crucial role in publishing events to the frontend renderer (FE renderer). It communicates with the frontend renderer using `HTTP` via `WebFlux`. By publishing events, it enables real-time updates and notifications on the user interface, keeping the user informed about the progress and changes in the system.
It is designed to efficiently send updates to the frontend in the following scenarios:
* When reaching a specific [**User Task (UT)**](../../building-blocks/node/user-task-node), a notification is sent to ensure the corresponding screen is rendered promptly.
* When specific actions require data to be sent to the user interface from a node.
### Integration with Redis
[**Redis**](../../platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-redis) plays an important role within the platform. It handles every message and is mandatory for the platform to function correctly, especially with the frontend. The platform relies on Redis to ensure that the messages are distributed efficiently and that the correct instance with the SSE connection pointer for the recipient is always reached.
The events-gateway system also interacts with Redis to publish events on a stream. This allows other components in the system to consume the events from the Redis stream and take appropriate actions based on the received events.
In these situations, the FlowX Engine places a message on Kafka for the Events Gateway. The Events Gateway then retrieves the message and stores it in Redis.
In summary, the events-gateway system acts as a hub for event processing, message distribution, and event publication within the system. It ensures efficient communication and coordination between various system components, facilitating real-time updates and maintaining system consistency.
For more details about how to configure events-gateway microservice, check the following section:
# FlowX.AI Engine
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-components/flowx-engine
The engine is the core of the platform, it is the service that runs instances of the process definitions, generates UI, communicates with the frontend and also with custom integrations and plugins. It keeps track of all currently running process instances and makes sure the process flows run correctly.

## Orchestration
Creating and interacting with process instances is pretty straightforward, as most of the interaction happens automatically and is handled by the engine.
The only points that need user interaction are starting the process and executing user tasks on it (for example when a user fills in a form on the screen and saves the results).
# FlowX.AI Audit
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/audit
The Audit service provides a centralized location for all audit events. The following details are available for each event.
* **Timestamp** - the date and time the event occurred, the timestamp is displayed in a reversed chronologically order
* **User** - the entity who initiated the event, could be a username or a system
* **Subject** - the area or component of the system affected by the event
Process Instance
Token
Task
Exception
Process definition
Node
Action
UI Component
General Settings
Swimlane
Swimlane Permissions
Connector
Enumeration
Enumeration Value
Substitution Tag
Content Model
Language
Source System
Image
Font file
* **Event** - the specific action that occurred
Create
Update
Update bulk
Update state
Export
Import
Delete
Clone
Start
Start with inherit
Advance
View
Expire
Message Send
Message Receive
Notification receive
Run scheduled action
Execute action
Finish
Dismiss
Retry
Abort
Assign
Unassign
Hold
Unhold
* **Subject identifier** - the name related to the subject, there are different types of identifiers based on the selected subject
* **Version** - the version of the process definition at the time of the event
* **Status** - the outcome of the event (e.g. success or failure)

## Filtering
Users can filter audit records by event date and by selecting specific options for User, Subject, and Subject Identifier.
* Filter by event date

* **User** - single selection, type at least 4 characters
* **Subject** - single selection
* **Subject identifier** - exact match
## Audit log details
To view additional details for a specific event, users can click the eye icon on the right of the event in the list. Additional information available in the audit log details window includes
Here you have the following information:
* **Event** - the specific action that occured
* **URL** - the URL associated with the event
* **Body** - any additional data or information related to the event

More details on how to deploy Audit microservice
# Configuration parameters
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/configuration-parameters
Configuration parameters allow projects to be dynamic, flexible, and environment-specific. They enable managing variables and values that change across deployment environments (e.g., Development, QA, Production), without requiring hardcoded updates. This feature is particularly valuable for managing sensitive information, environment-specific settings, and configurations for integrations.
Configuration Parameters are defined per **project version** or **library version**, ensuring consistency across builds while allowing for environment-specific overrides. These parameters can be used across various components, such as business rules, UI elements, integration designer, and gateways.
Libraries can define configuration parameters to facilitate testing of processes or workflows that depend on them. However, unlike project-level configuration parameters, libraries do not support direct overrides.
* Libraries provide default values for configuration parameters.
* Projects using these libraries can override the provided values as required.

***
## Default and override values
* **Default Value**: Defined during parameter creation and included in the application build. It serves as the fallback value when no environment-specific override is set.
* **Override Value**: A value defined post-deployment for a specific environment. Overrides take precedence during runtime.
* **Precedence Behavior** (process variables override):
* If a process variable and a configuration parameter share the same name, the process variable's value takes precedence during runtime.
* If the process variable is null or undefined, the configuration parameter's value is used as a fallback.
* Process variables override configuration parameters unless the process variable is `null` or undefined, in which case the configuration parameter is used.
* **Subprocess Behavior**:
* When a value is passed to a subprocess, the subprocess uses the resolved value (process variable or configuration parameter) from the parent process.
* If a new value is defined within the subprocess, it is appended back to the parent process.
To avoid conflicts, use distinct names for process variables and generic parameters whenever possible.
**Exception in Business Rules**:\
In business rules, values are taken directly from the map of configuration parameters without applying the above fallback logic.
For details on configuring runtime overrides, see:
***
## Types of configuration parameters
Configuration parameters are defined as **key-value pairs** and support the following types:
### Value
A static value directly used by the project. Suitable for settings that do not change across environments.
* **Use Cases**:
* Feature flags to toggle functionality (e.g., enabling/disabling insurance sales in a customer dashboard).
* Email addresses for notification recipients.
* Homebank redirect URLs for specific processes.
* **Example**:
* **Key**: `officeEmail`
* **Type**: `value`
* **Value**: `officeEmail@office.com`

***
### Environment variable
References an external variable set by the DevOps team. These variables are defined per environment and referenced using a **name convention**.
* **Use Cases**:
* Environment-specific API base URLs.
* Dynamic configuration of services or integrations.
* **Example**:
* **Key**: `baseUrl`
* **Type**: `environment variable`
* **Value**: `FLOWX_CONFIGPARAM_BASE_URL` (name convention pointing to an externally defined value)
By default, only environment variables that match the regex pattern `FLOWX_CONFIGPARAM_.*` can be read at runtime. Variables that don't follow this naming convention will not be accessible, even if they are properly defined. See [Runtime access patterns](#runtime-access-patterns) for more details.
Configuration details:
| Key | Type | Value | Description |
| ------- | ---------------------- | ---------------------------- | ------------------------------------------------------------ |
| baseUrl | `environment variable` | `FLOWX_CONFIGPARAM_BASE_URL` | A reference to the base URL configured externally by DevOps. |
**Example values for different environments**
| Environment | External Variable Name | Actual Value |
| ----------- | ---------------------------- | ----------------------------- |
| Development | `FLOWX_CONFIGPARAM_BASE_URL` | `https://dev.example.com/api` |
| QA | `FLOWX_CONFIGPARAM_BASE_URL` | `https://qa.example.com/api` |
| Production | `FLOWX_CONFIGPARAM_BASE_URL` | `https://api.example.com` |
***
### Secret environment variable
Used for sensitive data like passwords, API keys, or credentials. These values are securely managed by DevOps and referenced using a **name convention**.
* **Use Cases**:
* Passwords or tokens for integrations.
* Secure configuration of external services in the integration designer.
* **Example**:
* **Key**: `dbPassword`
* **Type**: `secret environment variable`
* **Value**: `FLOWX_CONFIGPARAM_DB_PASSWORD`
Like environment variables, secret environment variables must also follow the regex pattern `FLOWX_CONFIGPARAM_.*` to be accessible at runtime. See [Runtime access patterns](#runtime-access-patterns) for more details.
***
## Use cases for configuration parameters
Configuration parameters simplify the management of environment-specific or dynamic settings across multiple project components:
1. **Business Rules**:
* Define dynamic logic based on parameters such as feature toggles or environment-specific conditions.
* Access configuration parameters directly from the `additionalData.applicationConfiguration` map.
For more information on how to use configuration parameters in business rules, see [Extracting values from configuration parameters](../../building-blocks/actions/business-rule-action/extracting-additional-data#extracting-values-from-configuration-parameters).
2. **UI Elements**:
* Configure content dynamically based on the environment (e.g., URLs for redirects, conditional features).
* **Note**: Ensure variables referenced in UI components (e.g., for dynamic content or URLs) are uniquely named to avoid unexpected overrides by process variables.
3. **Integration Designer**:
* Reference the token parameter.


4. **Gateways**:
* Dynamically manage routing and decision-making logic using environment-specific parameters.
## Adding a configuration parameter
To add a new configuration parameter:
1. Navigate to **Your Project** → **Configuration Parameters**.
2. Click **New Parameter** and provide the following:
* **Key**: Name of the parameter.
* **Type**: Select `value`, `environment variable`, or `secret environment variable`.
* **Value**:
* For `value`: Enter the static value.
* For `environment variable` or `secret environment variable`: Enter the agreed name convention (must start with `FLOWX_CONFIGPARAM_` by default).
3. Click **Save** to include the parameter in the application build.
Remember that environment variables and secret environment variables must follow the naming pattern `FLOWX_CONFIGPARAM_*` to be accessible at runtime. See [Runtime access patterns](#runtime-access-patterns) for more details.

***
## Runtime access patterns
FlowX.AI implements security controls to limit which environment variables and secrets can be accessed at runtime. This prevents unauthorized access to system variables and ensures only intended configuration parameters are readable by the application.
### Default regex pattern
By default, the FlowX Engine uses the regex pattern `FLOWX_CONFIGPARAM_.*` to filter which configuration parameters can be accessed at runtime. This means:
* **Environment variables** and **secret environment variables** must start with `FLOWX_CONFIGPARAM_` to be readable
* Variables that don't match this pattern will be ignored, even if properly defined in the environment
* This security measure prevents accidental access to system variables like `SPRING_*`, `JAVA_*`, or other sensitive environment variables
### Naming convention requirements
When defining environment variables or secret environment variables, follow this naming convention:
✅ **Correct naming:**
* `FLOWX_CONFIGPARAM_API_URL`
* `FLOWX_CONFIGPARAM_DB_PASSWORD`
* `FLOWX_CONFIGPARAM_EXTERNAL_SERVICE_TOKEN`
❌ **Incorrect naming (will not be accessible):**
* `API_URL`
* `DB_PASSWORD`
* `SERVICE_TOKEN`

### Customizing the regex pattern
The default regex pattern can be overridden by configuring the following environment variables on the FlowX Engine:
| Environment Variable | Description | Default Value |
| ------------------------------------------- | --------------------------------------- | ---------------------- |
| `FLOWX_CONFIGPARAMS_VARS_ALLOWLISTREGEX` | Regex pattern for environment variables | `FLOWX_CONFIGPARAM_.*` |
| `FLOWX_CONFIGPARAMS_SECRETS_ALLOWLISTREGEX` | Regex pattern for secret variables | `FLOWX_CONFIGPARAM_.*` |
Changing the default regex pattern should be done carefully and only by experienced DevOps teams. Using overly permissive patterns (like `.*`) can expose sensitive system variables to the application.
### Best practices for naming
1. **Always use the prefix**: Start all environment and secret variables with `FLOWX_CONFIGPARAM_`
2. **Use descriptive names**: Make variable names clear and specific to their purpose
3. **Follow consistent naming**: Use uppercase with underscores for environment variables
4. **Test accessibility**: Verify that your variables are accessible in your target environment before deployment
***
## Technical notes and best practices
### Security
* **Sensitive Values (ENV\_SECRET)**:
* Store and manage securely.
* Do not display in the frontend or expose via public APIs.
* Avoid logging sensitive information.
### Environment-specific updates
* Environment variable updates (`ENV`/`ENV_SECRET`) are managed by DevOps.
* Updates may require service restarts unless a caching or real-time mechanism (e.g., change streams) is implemented.
### Reserved keys
* Certain keys are reserved for system use (e.g., `processInstanceId`). Avoid using reserved keys for custom configurations.
### Variable naming
* **Avoid Shared Names**:
* Do not use the same name for configuration parameters and process variables to prevent unintentional overrides.
* **Fallback Logic Awareness**:
* Understand that `null` or `undefined` process variables will default to the corresponding configuration parameter's value during runtime.
* **Subprocess Behavior**:
* Variables in subprocesses are appended back to parent processes with their current state. Plan naming conventions and data flows accordingly.
When designing processes, ensure that variables in subprocesses and parent processes do not conflict with configuration parameters names. Test these interactions in scenarios where variables are dynamically assigned or left undefined.
***
# FlowX.AI CMS
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/content-management/content-management
The FlowX.AI Headless Content Management System (CMS) is a core component of the FlowX.AI platform, designed to enhance the platform's capabilities with specialized functionalities for managing taxonomies and diverse content types.

## Key features
The FlowX.AI CMS offers the following features:
Manage and configure enumerations for various content types
Utilize tags to dynamically insert content values. Essential for Task Management localization with 51 system tags
Organize and manage media assets
Manage notification templates
Manage document templates
## Enumeration sources
The FlowX.AI platform supports three types of enumeration sources:
* **Project-level enumerations**: Enumerations defined directly at the project level within the FlowX.AI Designer
* **Library enumerations**: Enumerations defined in a shared library that must be set as a dependency for the project
* **Data source enumerations**: Enumerations that come from external data sources when using the Enumeration Mapper feature
## Deployment and integration
The CMS can be rapidly deployed on your chosen infrastructure, preloaded with necessary taxonomies or content via a REST interface, and integrated with the FlowX Engine using Kafka events.
For deployment and configuration, refer to the:
## Using the CMS service
Once the CMS is deployed in your infrastructure, you can define and manage custom content types, such as lists with different values based on external systems, blog posts, and more.
### Kafka integration
You can use Kafka to translate and extract content values based on your defined languages and source systems. This is useful for:
* Extracting values from specific enumerations for UI components
* Sending data to other integrations that require different label formats
* Generating documents with localized content
* Handling different label conventions from various external systems
Various external systems and integrations might use different labels for the same information. In processes, it is easier to use the corresponding code and translate this into the needed label when necessary: for example when sending data to other integrations, when generating documents, etc.
#### Kafka topics configuration
Manage content retrieval messages between the CMS and the FlowX Engine using the following Kafka topics:
| Environment Variable | Default FlowX.AI value (customizable) | Purpose |
| ----------------------------------- | ------------------------------------------------------------------ | -------------------------------------------------------------------- |
| KAFKA\_TOPIC\_REQUEST\_CONTENT\_IN | ai.flowx.dev.plugin.cms.trigger.retrieve.content.v1 | Topic where CMS listens for incoming content retrieval requests |
| KAFKA\_TOPIC\_REQUEST\_CONTENT\_OUT | ai.flowx.dev.engine.receive.plugin.cms.retrieve.content.results.v1 | Topic where CMS sends content retrieval results back to FlowX Engine |
You can find the defined topics in two ways:
1. In the FlowX.AI Designer: Go to **Platform Status** → **cms-core-mngt** → **kafkaTopicsHealthCheckIndicator** → **Details** → **Configuration** → **Topic** → **Request** → **Content** (use the `in` topic).

2. Alternatively, check the CMS microservice deployment for the `KAFKA_TOPIC_REQUEST_CONTENT_IN` environment variable.
#### Required Kafka headers
The following headers must be included in translation requests:
| Header | Required | Description |
| ---------------------- | -------- | -------------------------------------------------- |
| `BUILD_APP_VERSION_ID` | Yes\* | Application version build ID |
| `BUILD_ID` | Yes\* | Alternative to BUILD\_APP\_VERSION\_ID |
| `WORKSPACE_ID` | No | Workspace identifier for multi-tenant environments |
Either `BUILD_APP_VERSION_ID` or `BUILD_ID` must be provided in the Kafka message headers.
#### Translation request structure
Add a [**Send Message Task** (kafka send event)](/4.1.x/docs/building-blocks/node/message-send-received-task-node) and configure it to send content requests to the FlowX.AI Engine.
##### Request parameters
| Parameter | Type | Required | Description |
| ------------------ | ------ | -------- | -------------------------------------------------------------------------- |
| `sourceSystem` | String | No\* | Target source system for code translation |
| `fromSourceSystem` | String | No\* | Source system to translate codes from (cannot be used with `sourceSystem`) |
| `language` | String | No\* | Language code for label translation (e.g., "en", "fr", "ro") |
| `replyTopic` | String | No | Custom Kafka topic for response (overrides default) |
| `entries` | Array | Yes | List of content entries to translate |
**Validation rules:**
* At least one of `sourceSystem`, `language`, or `fromSourceSystem` must be provided
* `sourceSystem` and `fromSourceSystem` **cannot both be provided** (bidirectional conflict)
##### Entry structure
Each entry in the `entries` array contains:
| Parameter | Type | Required | Description |
| -------------------------------- | ------ | -------- | --------------------------------------------------- |
| `codes` | Array | Yes | Array of codes to translate |
| `contentDescription` | Object | Yes | Content metadata for lookup |
| `contentDescription.name` | String | Yes | Enumeration/content name |
| `contentDescription.application` | String | No | Application name (defaults to `defaultApplication`) |
| `children` | Object | No | Nested child content translations (hierarchical) |
#### Example: Basic translation request
**Request Body:**
```json theme={"system"}
{
"sourceSystem": "FlowX",
"language": "fr",
"entries": [
{
"codes": [
"RO",
"DE"
],
"contentDescription": {
"name": "tari"
}
}
]
}
```

#### Example: Hierarchical content request
For enumerations with nested/hierarchical structures (parent-child relationships), you can request content at multiple levels by specifying the `children` property. This is useful when you need to retrieve values from dependent dropdowns or cascading selections.
**Use cases:**
* Country → County → City selections
* Product Category → Subcategory → Product
* Department → Team → Employee
* Any cascading dropdown scenario
**Request Body for Hierarchical Content:**
```json theme={"system"}
{
"language": "ro",
"sourceSystem": "FlowX",
"entries": [
{
"codes": [
"RO"
],
"contentDescription": {
"name": "tari"
},
"children": {
"RO": [
{
"code": "AB",
"children": [
{
"code": "AB-Abrud"
},
{
"code": "AB-Aiud"
}
]
},
{
"code": "BV",
"children": [
{
"code": "BV-Brasov"
}
]
}
]
}
}
]
}
```
**Key points for hierarchical requests:**
* The `children` property is an object where **keys represent parent codes** and values are arrays of child items
* Each child item must have a `code` property and can optionally have a nested `children` array for deeper hierarchies
* This allows you to request specific branches of hierarchical data rather than entire enumerations
* Content metadata (name, application) is inferred from parent-child relationships configured in CMS
* Unlimited nesting depth is supported for complex hierarchical structures
**Best practice:** Request only the levels needed for the current UI state rather than the entire hierarchy upfront. Use progressive loading (parent → selected child → grandchild) for better performance.
#### Translation types
The CMS translation service supports multiple types of translations:
**Purpose:** Translate codes to human-readable labels in specific languages
**Request:**
```json theme={"system"}
{
"language": "en",
"entries": [
{
"codes": ["RO"],
"contentDescription": {"name": "country"}
}
]
}
```
**Response:**
```json theme={"system"}
{
"entries": [
{
"contentName": "country",
"code": "RO",
"label": "Romania",
"translatedCode": null
}
]
}
```
**Purpose:** Translate codes to target source system format
**Request:**
```json theme={"system"}
{
"sourceSystem": "SAP",
"entries": [
{
"codes": ["RO"],
"contentDescription": {"name": "country"}
}
]
}
```
**Response:**
```json theme={"system"}
{
"entries": [
{
"contentName": "country",
"code": "RO",
"label": null,
"translatedCode": "RO-SAP"
}
]
}
```
**Purpose:** Get both language labels and source system codes
**Request:**
```json theme={"system"}
{
"language": "en",
"sourceSystem": "SAP",
"entries": [
{
"codes": ["RO"],
"contentDescription": {"name": "country"}
}
]
}
```
**Response:**
```json theme={"system"}
{
"entries": [
{
"contentName": "country",
"code": "RO",
"label": "Romania",
"translatedCode": "RO-SAP"
}
]
}
```
**Purpose:** Translate from external source system code to internal code
**Request:**
```json theme={"system"}
{
"fromSourceSystem": "SAP",
"language": "en",
"entries": [
{
"codes": ["RO-SAP"],
"contentDescription": {"name": "country"}
}
]
}
```
**Response:**
```json theme={"system"}
{
"entries": [
{
"contentName": "country",
"code": "RO",
"label": "Romania",
"translatedCode": null
}
]
}
```
#### Translation response structure
Add a **Receive Message Task** to handle the response from the CMS service. Configure it to listen to the topic where the Engine sends the response (e.g., `ai.flowx.updates.contents.values.v1`).

**Response Message Structure:**
```json theme={"system"}
{
"entries": [
{
"contentName": "country",
"code": "ROMANIA",
"label": "Romania",
"translatedCode": "ROMANIA-FlowX"
},
{
"contentName": "country",
"code": "BAHAMAS",
"label": "Bahamas",
"translatedCode": "BAHAMAS-FlowX"
}
],
"error": null
}
```
**Response fields:**
| Field | Type | Description |
| -------------------------- | ------ | ------------------------------------------------------------------- |
| `entries` | Array | List of translated content entries |
| `entries[].contentName` | String | Name of the content/enumeration |
| `entries[].code` | String | Original code value |
| `entries[].label` | String | Translated label based on language parameter |
| `entries[].translatedCode` | String | Code translated for source system (format: `{code}-{sourceSystem}`) |
| `entries[].children` | Object | Nested translated child content (for hierarchical requests) |
| `error` | String | Error message (null if successful) |
**Response for hierarchical content:**
```json theme={"system"}
{
"entries": [
{
"contentName": "countries",
"code": "RO",
"label": "România",
"translatedCode": "RO-FlowX",
"children": {
"AB": [
{
"contentName": "counties",
"code": "AB",
"label": "Alba",
"translatedCode": "AB-FlowX",
"children": [
{
"contentName": "cities",
"code": "AB-Abrud",
"label": "Abrud",
"translatedCode": "AB-Abrud-FlowX"
}
]
}
]
}
}
],
"error": null
}
```
#### Dynamic language switching example
The video demonstrates how to change the system language and modify your process to display translations dynamically on different screens.
#### Advanced features
##### Custom reply topics
You can override the default response topic by specifying a `replyTopic` parameter in your request:
```json theme={"system"}
{
"language": "en",
"replyTopic": "ai.flowx.custom.translate.response.v1",
"entries": [
{
"codes": ["RO"],
"contentDescription": {"name": "country"}
}
]
}
```
This is useful for:
* Process-specific handling
* Asynchronous workflows
* Custom routing logic
Ensure the Engine is configured to listen on custom reply topics before using this feature.
##### Build context and versioning
The CMS translation service uses build context headers to ensure correct content version resolution:
* `BUILD_APP_VERSION_ID` or `BUILD_ID` ensures translation uses the correct content version
* Critical for environments with multiple application versions running simultaneously
* Resolves content from build manifest resource overrides
* Ensures consistent translations across deployments
##### Resource overrides
The translation service supports content overrides via build manifest, enabling:
* Version-specific translations
* Multi-tenant workspace configurations
* Environment-specific content variations
* A/B testing with different content versions
#### Performance considerations
Request multiple codes in a single Kafka message to reduce overhead:
```json theme={"system"}
{
"language": "en",
"entries": [
{
"codes": ["RO", "DE", "FR", "IT", "ES"],
"contentDescription": {"name": "country"}
}
]
}
```
Request parent and child content together to minimize round trips:
```json theme={"system"}
{
"language": "en",
"entries": [
{
"codes": ["RO"],
"contentDescription": {"name": "country"},
"children": {
"RO": [{"code": "AB"}, {"code": "BV"}]
}
}
]
}
```
Store translated values in process data when they will be reused multiple times within the same process instance.
For deep hierarchies, load levels progressively based on user selections rather than requesting entire hierarchies upfront.
#### Error handling
Common translation errors:
| Error | Description | Resolution |
| ----------------------- | --------------------------------------------------- | --------------------------------------------------------- |
| Content not found | The specified content/enumeration does not exist | Verify content name and ensure it's published in CMS |
| Invalid source system | The source system is not configured | Check source system configuration in CMS |
| Missing required fields | Required parameters are missing from request | Ensure `codes` and `contentDescription.name` are provided |
| Build context missing | Required headers not present | Include `BUILD_APP_VERSION_ID` or `BUILD_ID` in headers |
| Validation conflict | Both `sourceSystem` and `fromSourceSystem` provided | Use only one direction of translation per request |
**Error response structure:**
```json theme={"system"}
{
"entries": [],
"error": "Content 'invalid_content_name' not found"
}
```
When translation fails, the `error` field contains a descriptive message and the `entries` array may be empty or contain partial results.
## Additional resources
Learn how to configure enumerations in CMS
Configure source systems for external integrations
Manage languages for multilingual content
Complete deployment and configuration guide
# Converting files
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/content-management/documents-plugin/converting-documents-to-different-formats
Currently, the supported conversion method is limited to transforming **PDF** files into **JPEG** format.
This guide provides step-by-step instructions on how to convert an uploaded file (utilizing the provided example) from PDF to JPEG.
## Prerequisites
1. **Access Permissions**: Ensure that you have the necessary permissions to use the Documents Plugin. The user account used for these operations should have the required access rights.
2. **Kafka Configuration**: Verify that the Kafka messaging system is properly configured and accessible. The Documents Plugin relies on Kafka for communication between nodes.
* **Kafka Topics**: Familiarize yourself with the Kafka topics used for these operations (later in this section)
3. Before initiating the conversion process, it is essential to identify the file in the storage solution using its unique ID. This ensures that the conversion is performed on an already uploaded file.
You have two options to obtain the file ID:
* Extract the file ID from a [**Response Message**](./uploading-a-new-document) of an upload file request. For more details, refer to the [**upload process documentation**](./uploading-a-new-document).
* Extract the file ID from a [**Response Message**](./generating-from-html-templates) of a generate from template request. For more details, refer to the [**document generation reply documentation**](./generating-from-html-templates)
In the following example, we will use the `fileId` generated for [**Uploading a New Document**](./uploading-a-new-document) scenario.
```json theme={"system"}
{
"customId": "119246",
"fileId": "96975e03-7fba-4a03-99b0-3b30c449dfe7",
"documentType": "BULK",
"documentLabel": null,
"minioPath": "flowx-dev-process-id-119246/119246/458_BULK.pdf",
"downloadPath": "internal/files/96975e03-7fba-4a03-99b0-3b30c449dfe7/download",
"noOfPages": null,
"error": null
}
```
## Configuring the process

To create a process that converts a document from PDF to JPEG format, follow these steps:
1. Create a process that includes a [**Send Message Task (Kafka)**](../../../../building-blocks/node/message-send-received-task-node) node and a [**Receive Message Task (Kafka)**](../../../../building-blocks/node/message-send-received-task-node):
* Use the **Send Message Task** node to send the conversion request.
* Use the **Receive Message Task** node to receive the reply.
2. Configure the first node (**Send Message Task**) by adding a **Kafka send action**.

3. Specify the [**Kafka topic**](../../../../../setup-guides/flowx-engine-setup-guide/engine-setup#kafka-configuration) where you send the conversion request.
To identify your defined topics in your current environment, follow the next steps:
1. From the FLOWX.AI main screen, navigate to the **Platform Status** menu at the bottom of the left sidebar.
2. In the FLOWX Components list, scroll to the **document-plugin-mngt** line and press the eye icon on the right side.
3. In the details screen, expand the `KafkaTopicsHealthCheckIndicator` line and then **details → configuration → topic → file → convert**. Here will find the in and out topics for converting files.

4. Fill in the body of the message request.

#### Message request example
This is an example of a message that follows the custom integration data model.
```json theme={"system"}
{
"fileId": "96975e03-7fba-4a03-99b0-3b30c449dfe7",
"to": "image/jpeg"
}
```
* `fileId`: The file ID that will be converted
* `to`: The file extension to convert to (in this case, "JPEG")
5. Configure the second node (**Receive Message Task**) by adding a **Data stream topic**:

The response will be sent to this `..out` Kafka topic.
## Receiving the reply

The following values are expected in the reply body:
* **customId**: The unique identifier for your document (it could be for example the ID of a client)
* **fileId**: The file ID
* **documentType**: The document type
* **documentLabel**: The document label (if available)
* **minioPath**: The path where the converted file is saved. It represents the location of the file in the storage system, whether it's a MinIO path or an S3 path, depending on the specific storage solution
* **downloadPath**: The download path for the converted file
* **noOfPages**: If applicable
* **error**: Any error message in case of an error during the conversion process
#### Message response example
```json theme={"system"}
{
"customId": "119246",
"fileId": "8ec75c0e-eaa6-4d80-b7e5-15a68bba7459",
"documentType": "BULK",
"documentLabel": null,
"minioPath": "flowx-dev-process-id-119246/119246/461_BULK.jpg",
"downloadPath": "internal/files/461/download",
"noOfPages": null,
"error": null
}
```
The converted file is now available in the storage solution and it can be downloaded:

Note that the actual values in the response will depend on the specific conversion request and the document being converted.
# Deleting files
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/content-management/documents-plugin/deleting-a-file
The Documents plugin provides functionality for deleting files.
## Prerequisites
Before deleting files, ensure:
1. **Access Permissions**: Ensure that the user account used has the necessary access rights for updates or deletions.
2. **Kafka Configuration**:
* **Verify Kafka Setup**: Ensure proper configuration and accessibility of the Kafka messaging system.
* **Kafka Topics**: Understand the Kafka topics used for these operations.
3. **File IDs and Document Types**: Prepare information for updating or deleting files:
* `fileId`: ID of the file to delete.
* `customId`: Custom ID associated with the file.
In the example below, we use a `fileId` generated for a document using [**Uploading a New Document**](/4.0/docs/platform-deep-dive/plugins/custom-plugins/documents-plugin/uploading-a-new-document) scenario.
```json theme={"system"}
{
"docs": [
{
"customId": "119407",
"fileId": "c4e6f0b0-b70a-4141-993b-d304f38ec8e2",
"documentType": "BULK",
"documentLabel": null,
"minioPath": "flowx-dev-process-id-119408/119407/466_BULK.pdf",
"downloadPath": "internal/files/c4e6f0b0-b70a-4141-993b-d304f38ec8e2/download",
"noOfPages": 2,
"error": null
}
],
"error": null
}
```
## Configuring the deletion process

To delete files, follow these steps:
1. Create a process that includes a [**Send Message Task (Kafka)**](../../../../building-blocks/node/message-send-received-task-node) node and [**Message Event Receive (Kafka)**](/4.0/docs/building-blocks/node/message-send-received-task-node#configuring-a-message-receive-task-node) node:
* Use the **Send Message Task** node to send the delete request.
* Use the **Receive Message Task** node to receive the delete reply.
2. Configure the **first node (Send Message Task)** by adding a **Kafka Send Action**.

3. Specify the [**Kafka topic**](../../../../../setup-guides/plugins-setup-guide/documents-plugin-setup) for sending the delete request.
To identify defined topics in your environment:
* Navigate to **Platform Status > FLOWX Components > document-plugin-mngt** and click the eye icon on the right side.
* In the details screen, expand the `KafkaTopicsHealthCheckIndicator` line and then **details → configuration → topic → file → delete**. Here will find the in and out topics for deleting files.

4. Fill in the request message body.

#### Message request example
Example of a message following the custom integration data model:
```json theme={"system"}
{
"customId": "119408",
"fileId": "c4e6f0b0-b70a-4141-993b-d304f38ec8e2"
}
```
* **fileId**: The ID of the file.
* **customId**: The custom ID.
5. Configure the **second node (Receive Message Task)** by adding a Data stream topic:

The response will be sent to `..out` Kafka topic.
### Receiving the reply

The reply body should contain the following values:
* **customId**: The unique identifier for your document (it could be for example the ID of a client)
* **fileId**: The ID of the file
* **documentType**: The document type
* **error**: Any error message in case of an error during the deleting process
#### Message response example
```json theme={"system"}
{
"customId": "119408",
"fileId": "c4e6f0b0-b70a-4141-993b-d304f38ec8e2",
"documentType": null,
"error": null
}
```
# Document Templates
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/content-management/documents-plugin/documents-plugin-overview
The Document Templates can be easily added to your custom FlowX.AI deployment to enhance the core platform capabilities with functionality specific to document handling.

The Document Templates feature offers the following features:
* **Document storage and editing**: Easily store and make changes to documents.
* **Document generation**: Generate documents using predefined templates and custom process-related data.
* **WYSIWYG editor**: Create various templates using a user-friendly ["What You See Is What You Get" (WYSIWYG) editor](../../wysiwyg).

* **Template import**: Import templates created in other environments as a zip file.

When exporting a document template, it is transformed into a JSON file that can be imported later.
* **Document conversion**: Convert documents from PDF to JPEG format.
* **Document splitting**: Split bulk documents into smaller separate documents.
* **Document editing**: Add generated barcodes, signatures, and assets to documents.
* **OCR integration**: When a document requires OCR (Optical Character Recognition) processing, the Documents Plugin initiates the interaction by passing the document data or reference to the [**OCR plugin**](../ocr-plugin).
The Documents Plugin can be easily deployed on your chosen infrastructure, preloaded with industry-specific document templates using an intuitive WYSIWYG editor, and connected to the FLOWX Engine through Kafka events.
* [**Send Message Task (Kafka)**](../../../../building-blocks/node/message-send-received-task-node#message-send-task)
* [**Receive Message Task(Kafka)**](../../../../building-blocks/node/message-send-received-task-node#message-receive-task)
Performance considerations:
To ensure optimal performance while using Document Templates, consider the following recommendations:
* For large or complex documents, it is recommended to allocate sufficient system resources, such as CPU and memory, to handle the conversion/editing process efficiently.
* Avoid processing extremely large files or a large number of files simultaneously, as it may impact performance and responsiveness.
* Monitor system resources during the generating/editing/converting etc. process and scale resources as needed to maintain smooth operations.
* Following these performance considerations will help optimize the document processing and improve overall system performance.
## Using Document Templates
Once you have deployed the Document Templates microservice in your infrastructure, you can start creating various document templates. After selecting a document template, proceed to create a process definition by including [**Send Message/Receive Message**](../../../../building-blocks/node/message-send-received-task-node) (Kafka nodes) and custom document-related actions in your process flow.
Before adding these actions to your **process definition**, follow these steps:
1. Ensure that all custom information is properly configured in the plugin, such as the document templates to be used.
2. For each Kafka send/receive node you will need a corresponding Kafka topic.
The `..in` topic names configured for the plugin should match [**the `..out` topic names used when configuring the engine**](../../../../../setup-guides/flowx-engine-setup-guide/engine-setup#configuring-kafka). Make sure to use an outgoing topic name that matches the pattern configured in the Engine. The value can be found and overwritten in the `KAFKA_TOPIC_PATTERN` variable.
For more details about Process Engine Kafka topic configuration, click [**here**](../../../../../setup-guides/flowx-engine-setup-guide/engine-setup#configuring-kafka).
To make a request to the Document Templates microservice, the process definition needs to include an action of type **Kafka send** defined on a [**Send Message Task**](../../../../building-blocks/node/message-send-received-task-node#message-send-task) node. The action parameter should have the key `topicName` and the corresponding topic name as its value.
To receive a reply from the Document Templates microservice, the process definition needs to include a [**Receive Message Task**](../../../../building-blocks/node/message-send-received-task-node#message-receive-task) node with a node value having the key `topicName` and the topic name as its value.
Once the setup is complete, you can begin adding custom actions to your processes.
Let's explore a few examples that cover both the configuration and integration with the engine for all the use cases supported by the plugin:
# Generating documents
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/content-management/documents-plugin/generating-from-html-templates
Generate new documents from custom templates that can be pre-filled with data from the current process instance.
Configure document templates easily using the [**WYSIWYG editor**](../../wysiwyg). Access and manage your templates through the **Document Templates** section in your Project in [**FlowX Designer**](../../../../flowx-designer/overview).

## Generating documents from HTML templates
The Documents plugin simplifies document generation through predefined templates. This guide focuses on generating documents using HTML templates.

## Before you begin
1. **Verify access permissions**: Ensure you have the necessary [permissions to manage document templates](../../../../../setup-guides/plugins-access-rights/configuring-access-rights-for-documents).
2. **Check Kafka configuration**: Confirm that Kafka is properly configured and accessible:
* The document plugin relies on Kafka for communication between nodes
* Familiarize yourself with the required Kafka topics (detailed later in this guide)
## Creating an HTML template
1. Access the [**WYSIWYG editor**](/4.1.x/docs/platform-deep-dive/plugins/wysiwyg) through **FlowX Designer → Plugins → Document templates**
2. Create or import your HTML template

For detailed template management instructions:
For comprehensive guidance, take our FlowX.AI Academy course: [**Creating a Document Template in Designer**](https://academy.flowx.ai/module/create-document-templates-flowxai-designer).
# Implementing document generation in a process
Let's build a document generation flow that creates personalized documents based on user input:

### Step 1: Create a user input form
1. Add a **User Task** node to your process
2. Configure UI elements to collect the information needed for your document:
* Input fields (text, numbers, dates, etc.)
* Make sure to set appropriate keys for each field that match your template variables
### Step 2: Configure the document generation request
1. Add a **Send Message Task (Kafka)** node
2. Configure the Kafka send action with the appropriate topic:
* For HTML template generation, use `ai.flowx.in.document.html.in` (or your configured equivalent)

To find your environment's configured topics:
1. Navigate to **FlowX Designer → Platform Status**
2. Find the **document-plugin-mngt** component and click the eye icon
3. Expand `KafkaTopicsHealthCheckIndicator → details → configuration → topic → document → generate`
4. Look under HTML and PDF sections for your in/out topics

3. Create the request payload with the following structure:
```json theme={"system"}
{
"documentList": [
{
"customId": "ClientsFolder",
"templateName": "AccountCreation",
"language": "en",
"data": {
"firstInput": "${application.client.firstName}",
"secondInput": "${application.client.lastName}",
"thirdInput": "${application.client.accountType}"
},
"includeBarcode": false
}
]
}
```

Key parameters:
* **customId**: Folder name where the file will be saved
* **templateName**: Name of the template defined in Document templates
* **language**: Must match the language configured on the template
* **data**: Key-value pairs mapping template variables to process data
* **includeBarcode**: Set to true if you need a barcode on the document
When using templates in a process, the system uses default values from the default project language. For example, if English is your default project language, the template will use values from the English version.
To check your default language: **FlowX Designer → Project Settings → Languages**
### Step 3: Receive the generated document
1. Add a **Receive Message Task (Kafka)** node
2. Configure it with:
* The response topic: `ai.flowx.updates.document.html.generate.v1` (or your configured equivalent)
* Key for storing the response: `generatedDocuments`

The response contains information about the generated documents:

Sample response structure:
```json theme={"system"}
{
"generatedFiles": {
"ClientsFolder": {
"AccountCreation": {
"customId": "ClientsFolder",
"fileId": "320f4ec2-a509-4aa9-b049-87224594802e",
"documentType": "AccountCreation",
"documentLabel": "GENERATED_PDF",
"minioPath": "{{your_bucket}}/2024/2024-01-15/process-id-865759/ClientsFolder/6869_AccountCreation.pdf",
"downloadPath": "internal/files/320f4ec2-a509-4aa9-b049-87224594802e/download",
"noOfPages": 1,
"error": null
}
}
},
"error": null
}
```
Response fields:
* **fileId**: Unique identifier for the generated file
* **documentType**: Template name used for generation
* **minioPath**: Storage location (MinIO or S3)
* **downloadPath**: URL path for downloading the file
* **noOfPages**: Document page count
* **error**: Error information (null if successful)
## Displaying the generated document
To display the generated document to the user:
1. Add a **Task Node** to extract the document path from the response
2. Add a **User Task** with the Document Preview UI Element:
* Configure the element with the download path from the previous node
For detailed instructions on displaying documents, see:
# Getting URLs
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/content-management/documents-plugin/getting-urls-to-documents
In certain scenarios, obtaining URLs pointing to uploaded documents for use in integrations is essential. This process involves adding a custom action to your workflow that requests URLs from the Documents plugin.
## Prerequisites
Before retrieving document URLs, ensure:
1. **Access Permissions**: Ensure that the user account has the necessary access rights.
2. **Kafka Configuration**:
* **Verify Kafka Setup**: Ensure proper configuration and accessibility of the Kafka messaging system.
* **Kafka Topics**: Understand the Kafka topics used for these operations.
3. **Document Types**: Prepare information for updating or deleting files:
* `types`: A list of document types.
## Configuring the getting URLs process

To obtain document URLs, follow these steps:
Create a process that will contain the following types of nodes:
* [**Send Message Task (Kafka)**](../../../../building-blocks/node/message-send-received-task-node) - used to send the get URLs request
* [**Receive Message Task (Kafka)**](../../../../building-blocks/node/message-send-received-task-node) - used to receive the get URLs reply
* [**User Task**](../../../../building-blocks/node/user-task-node) - where you will perform the upload action
Start configuring the **User Task** node:
#### Node Config
* **Data stream topics**: Add the topic where the response will be sent; in this example `ai.flowx.updates.document.html.persist.v1` and its key: `uploadedDocument`.

#### Actions
We will configure the following node actions:
* Upload File action ("uploadDocument") will have two child actions:
* Send Data to User Interface ("uploadDocumentSendToInterface")
* Business Rule ("uploadDocumentBR")
* Save Data action ("save")

Configure the parameters for the **Upload Action**:

For more details on uploading a document and configuring the file upload child actions, refer to the following sections:
* [**Upload document**](./uploading-a-new-document)
* [**Upload action**](../../../../building-blocks/actions/upload-file-action)
Next, configure the **Send Message Tas (Kafka)** node by adding a **Kafka Send Action** and specifying the `..in` [**Kafka topic**](../../../../../setup-guides/plugins-setup-guide/documents-plugin-setup#kafka-configuration) to send the request.
Identify defined topics in your environment:
* Navigate to **Platform Status > FlowX Components > document-plugin-mngt** and press the eye icon on the right side.
* In the details screen, expand the `KafkaTopicsHealthCheckIndicator` line and then **details → configuration → topic → document → get**. Here will find the in and out topics for getting URLs for documents.

Fill in the body of the request message for the Kafka Send action to send the get URLs request:

* `types`: A list of document types.
#### Message request example
Example of a message following the custom integration data model:
```json theme={"system"}
{
"types": [
"119435",
"119435"
]
}
```
Configure the [**Receive Message Task (Kafka)**](../../../../building-blocks/node/message-send-received-task-node#configuring-a-message-receive-task-node) by adding the `..out` Kafka topic on which the response will be sent.

## Receiving the reply

The response body should include the following values:
* **success**: A boolean indicating whether the document exists and the URL was generated successfully.
* **fullName**: The full name of the document file, including the directory path.
* **fileName**: The name of the document file without the extension.
* **fileExtension**: The extension of the document file.
* **url**: The full download URL for the document.
#### Message response example
```json theme={"system"}
[
{
"success": true,
"fullName": "2024/2024-08-27/process-id-1926248/1234_1926248/7715_1926248.pdf",
"fileName": "2024/2024-08-27/process-id-1926248/1234_1926248/7715_1926248",
"fileExtension": "pdf",
"url": "http://minio:9000/qualitance-dev-paperflow-devmain/2024/2024-08-27/process-id-1926248/1234_1926248/7715_1926248.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minio%2F20240827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240827T150257Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=575333697714249e9deb295359f5ba9365f618f53303bf5583ca30a9b1c45d84"
}
]
```
# Listing stored files
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/content-management/documents-plugin/listing-stored-files
If you are using an S3-compatible cloud storage solution such as MinIO, the stored files are organized into buckets. A bucket serves as a container for objects stored in Amazon S3. The Documents Plugin provides a REST API that allows you to easily view the files stored in the buckets.
To determine the partitioning strategy used for storing generated documents, you can access the following key in the configuration:
`application.file-storage.partition-strategy`
```yaml theme={"system"}
application:
defaultLocale: en
supportedLocales: en, ro
#fileStorageType is the configuration that activates one FileContentService implementation. Valid values: minio / fileSystem
file-storage:
type: s3
disk-directory: MS_SVC_DOCUMENT
partition-strategy: NONE
```
The `partition-strategy` property can have two possible values:
* **NONE**: In this case, documents are saved in separate buckets for each process instance, following the previous method.
**PROCESS\_DATE**: Documents are saved in a single bucket with a subfolder structure based on the process date. For example: `bucket/2022/2022-07-04/process-id-xxxx/customer-id/file.pdf`.
## REST API
The Documents Plugin provides the following REST API endpoints for interacting with the stored files:
### List buckets
Check out the [**List buckets API reference**](/4.0/docs/api/list-buckets) for more details.
* This endpoint returns a list of available buckets.
### List objects in a bucket
Check out the [**List objects in a bucket API reference**](/4.0/docs/api/list-objects-in-buckets) for more details.
* This endpoint retrieves a list of objects stored within a specific bucket. Replace `BUCKET_NAME` with the actual name of the desired bucket
### Download file
Check out the [**Download file API reference**](/4.0/docs/api/download-file.mdx) for more details.
* This endpoint allows you to download a file by specifying its path or key.
# Managing templates
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/content-management/documents-plugin/managing-html-templates
The Documents plugin provides the flexibility to define and manage HTML templates for document generation, enabling customization through various parameter types.
Additionally, the platform incorporates a [**What You See Is What You Get (WYSIWYG)**](../../wysiwyg) editor, allowing users to have a real-time, visual representation of the document or content during the editing process. Furthermore, you have the capability to test and review your template by downloading it as a PDF.
A WYSIWYG editor, typically provides two main views:
* **Design View (Visual View)**: In this view, you can see a visual representation of their content as it would appear when rendered in a web browser or other output medium. It resembles the final output closely, allowing you to format text, add images, and apply styles directly within the visual interface. This view aims to provide a real-time preview of the document's appearance.
* **HTML View (Source View)**: In this view, you can see and edit the underlying HTML code that corresponds to the content displayed in the Design View. It shows the raw HTML markup, providing a more detailed and technical representation of the document. You can manually edit the HTML code to make precise adjustments or to implement features not available in the visual interface.

Explore the different parameter types and their specifications:
## Configuring HTML templates
In the following example, we will create an example of a template using the HTML View (Source View).
To create a document template, navigate to the **Document Templates** section in the **Designer**, select ”**New document**” from the menu in the top-right corner, name your template, and click **Create**.
Now follow the next steps to design a new template:
1. **Open the WYSIWYG editor**:
Access the WYSIWYG editor within the Document Management Plugin, found in the **FlowX Designer → Plugins → Document templates** section.
* **Language Configuration**: Create a dedicated template for each language specified in your system.
To confirm the installed languages on the platform, go to **FLOWX.AI Designer → Content Management → Languages**.
2. **Design the document header**:
Begin by creating a header section for the document, including details such as the company logo and title.
```html theme={"system"}
Offer Document
```
Data specifications (process data):
```json theme={"system"}
"data": {
"companyLogo": "INSERT_BASE64_IMAGE",
"offerTitle": "Client Offer"
}
```
3. **Text Parameters for Client Information**:
Include a section for client-specific information using text parameters.
Text parameters enable the inclusion of dynamic text in templates, allowing for personalized content.
```html theme={"system"}
Client Information
Client Name:
Client ID:
```
Data specifications:
```json theme={"system"}
"data": {
"clientName": "John Doe",
"clientId": "JD123456"
}
```

4. **Dynamic table for offer details:**
Create a dynamic table to showcase various details of the offer.
```html theme={"system"}
Offer Details
Item
Description
Price
```
Data specifications:
```json theme={"system"}
"data": {
"offerItems": [
{ "name": "Product A", "description": "Description A", "price": "$100" },
{ "name": "Product B", "description": "Description B", "price": "$150" },
{ "name": "Product C", "description": "Description C", "price": "$200" }
]
}
```

5. **Dynamic sections for certain conditions:**
Dynamic sections allow displaying specific content based on certain conditions. For example, you can display a paragraph only when a certain condition is met.
```html theme={"system"}
Dynamic Sections for Certain Conditions
This is displayed if it is a preferred client. They are eligible for special discounts!
This is displayed if the client has specific requests. Please review them carefully.
This is displayed if the client has an active contract with us.
```
Data specifications:
```json theme={"system"}
"data": {
"clientName": "John Doe",
"clientId": "JD123456",
"isPreferredClient": false,
"hasSpecialRequest": false,
"isActiveContract": true
}
```

6. **Lists**:
Lists are useful for displaying values from selected items in a checkbox as a bulleted list.
```html theme={"system"}
Income source:
```
Data specifications:
```json theme={"system"}
{
"data": {
"incomeSource": [
"Income 1",
"Income 2",
"Income 3",
"Income 4"
]
}
}
```

7. **Include Image for Authorized Signature:**
Embed an image for the authorized signature at the end of the document.
```html theme={"system"}
```
Data Specifications:
```json theme={"system"}
"data": {
"signature": "INSERT_BASE64_IMAGE"
}
```

8. **Barcodes**:
Set the `includeBarcode` parameter to true if you want to include a barcode. For information on how to use barcodes and OCR plugin, check the following section:
9. **Checkboxes for Consent**:
Consent checkboxes in HTML templates are commonly used to obtain explicit agreement or permission from users before proceeding with certain actions or processing personal data.
```html theme={"system"}
```

10. **Data Model**:
In the documents template we have the **Data Model** tab. Here you define parameters, which are dynamic data fields that will be replaced with the values you define in the payload, like first name, or company name.


## Styling
HTML template styling plays a crucial role in enhancing the visual appeal, readability, and user experience of generated documents.
We will apply the following styling to the previously created HTML template using **Source** view of the editor.
```css theme={"system"}
```
In the end the template will look like this:

## Samples
### Without dynamic data
The final result after generating the template without dynamic data:
Download PDF sample [**here**](../../../assets/HTMLExample.pdf).
### With dynamic data
The final result after generating the template with the following dummy process data:
```json theme={"system"}
"data": {
"offerTitle": "Client Offer",
"clientName": "John Doe",
"clientId": "JD123456",
"isPreferredClient": false,
"hasSpecialRequest": false,
"isActiveContract": true,
"offerItems": [
{ "name": "Product A", "description": "Description A", "price": "$100" },
{ "name": "Product B", "description": "Description B", "price": "$150" },
{ "name": "Product C", "description": "Description C", "price": "$200" },
],
"incomeSource": [
"Income 1",
"Income 2",
"Income 3",
"Income 4"
],
}
```
Download a PDF sample [**here**](https://s3.eu-west-1.amazonaws.com/docx.flowx.ai/release40/726_ManageHTMLTemplate%20.pdf).
# Splitting documents
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/content-management/documents-plugin/splitting-a-document
You can split a document into multiple parts using the Documents plugin.
This guide provides step-by-step instructions on how to split a document, such as when a user uploads a bulk scanned file that needs to be separated into distinct files.
## Prerequisites
1. **Access Permissions**: Ensure that you have the necessary permissions to use the Documents Plugin. The user account used for these operations should have the required access rights.
2. **Kafka Configuration**: Verify that the Kafka messaging system is properly configured and accessible. The Documents Plugin relies on Kafka for communication between nodes.
* **Kafka Topics**: Familiarize yourself with the Kafka topics used for these operations (later in this section)
3. Before initiating the splitting process, ensure you have the unique ID of the file in the storage solution. This ensures that the splitting is performed on an already uploaded file.
Ensure that the uploaded document contains more than one file.
You have two options to obtain the file ID:
* Extract the file ID from a [**Response Message**](./uploading-a-new-document#response-message-example-2) of an upload file request. For more details, refer to the [**upload process documentation**](./uploading-a-new-document).
* Extract the file ID from a [**Response Message**](./generating-from-html-templates#receiving-the-document-generation-reply) of a generate from template request. For more details, refer to the [**document generation reply documentation**](./generating-from-html-templates).
In the following example, we will use the `fileId` generated for a document with multiple files using [**Uploading a New Document**](./uploading-a-new-document) scenario.
```json theme={"system"}
{
"customId": "119407",
"fileId": "446c69fb-32d2-44ba-a0b2-02dbb55e7eea",
"documentType": "BULK",
"documentLabel": null,
"minioPath": "flowx-dev-process-id-119407/119407/465_BULK.pdf",
"downloadPath": "internal/files/446c69fb-32d2-44ba-a0b2-02dbb55e7eea/download",
"noOfPages": null,
"error": null
}
```
## Configuring the splitting process

To create a process that splits a document into multiple parts, follow these steps:
1. Create a process that includes a [**Send Message Task (Kafka)**](../../../../building-blocks/node/message-send-received-task-node#configuring-a-message-send-task-node) node and a [**Receive Message Task (Kafka)**](../../../../building-blocks/node/message-send-received-task-node#configuring-a-message-receive-task-node) node:
* Use the **Send Message Task** node to send the splitting request.
* Use the **Receive Message Task** node to receive the splitting reply.
2. Configure the **first node (Send Message Task)** by adding a **Kafka Send Action**.
3. Specify the [**Kafka topic**](../../../../../setup-guides/plugins-setup-guide/documents-plugin-setup#kafka-configuration) where you want to send the splitting request.

To identify your defined topics in your current environment, follow the next steps:
1. From the FLOWX.AI main screen, navigate to the Platform Status menu at the bottom of the left sidebar.
2. In the FLOWX Components list, scroll to the document-plugin-mngt line and press the eye icon on the right side.
3. In the details screen, expand the `KafkaTopicsHealthCheckIndicator` line and then **details → configuration → topic → document → split**. Here you will find the in and out topics for splitting documents.

4. Fill in the body of the message request.

#### Message request example
```json theme={"system"}
{
"parts": [
{
"documentType": "BULK",
"customId": "119407",
"pagesNo": [
1,
2
],
"shouldOverride": true
}
],
"fileId": "446c69fb-32d2-44ba-a0b2-02dbb55e7eea"
}
```
* **fileId**: The file ID of the document that will be split
* **parts**: A list containing information about the expected document parts
* **documentType**: The document type.
* **customId**: The unique identifier for your document (it could be for example the ID of a client)
* **shouldOverride**: A boolean value (true or false) indicating whether to override an existing document if one with the same name already exists
* **pagesNo**: The pages that you want to separate from the document
5. Configure the **second node (Receive Message Task)** by adding a Data stream topic:

The response will be sent to this `..out` Kafka topic.
## Receiving the reply

The following values are expected in the reply body:
* **docs**: A list of documents.
* **customId**: The unique identifier for your document (matching the name of the folder in the storage solution where the document is uploaded).
* **fileId**: The ID of the file.
* **documentType**: The document type.
* **minioPath**: The storage path for the document.
* **downloadPath**: The download path for the document.
* **noOfPages**: The number of pages in the document.
* **error**: Any error message in case of an error during the splitting process.
Here's an example of the response JSON:
#### Message response example
```json theme={"system"}
{
"docs": [
{
"customId": "119407",
"fileId": "c4e6f0b0-b70a-4141-993b-d304f38ec8e2",
"documentType": "BULK",
"documentLabel": null,
"minioPath": "flowx-dev-process-id-119408/119407/466_BULK.pdf",
"downloadPath": "internal/files/c4e6f0b0-b70a-4141-993b-d304f38ec8e2/download",
"noOfPages": 2,
"error": null
}
],
"error": null
}
```
The split document is now available in the storage solution and can be downloaded:

# Creating and uploading a new document
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/content-management/documents-plugin/uploading-a-new-document
A comprehensive guide to integrating document creation from templates, managing uploads, and configuring workflows for document processing.
User task nodes provide a flexible framework to defining and configuring UI templates and actions for specific template config nodes, such as an upload file button.

## Prerequisites
Before you begin, ensure the following prerequisites are met:
* **Access Permissions**: Ensure that you have the necessary permissions to use the Documents Plugin. The user account used for these operations should have the required access rights.
* **Kafka Configuration**: Verify that the Kafka messaging system is properly configured and accessible. The Documents Plugin relies on Kafka for communication between nodes.
* **Kafka Topics**: Familiarize yourself with the Kafka topics used for these operations (later in this section).
To upload a document using this process, follow the steps outlined below.
## Step-by-step guide: uploading an previewing a document
In the [previous section](./generating-from-html-templates), you learned how to generate documents from HTML templates. This section focuses on creating a process where users can generate a document, review and sign it, and subsequently upload it.
### Process overview
This process involves several key nodes, each performing specific tasks to ensure smooth document creation, preview, and upload:
* **Start and End Nodes**: These nodes mark the beginning and end of the process, respectively.
* **User Task Node**: Collects user input necessary for document generation.
* **Send and Receive Message Tasks (Kafka)**: Handle communication with Kafka for generating the document and retrieving it after processing.
* **Service Task Node**: Appends the path of the generated document to the process, enabling further actions.
* **User Task Nodes**: Facilitate the preview of the generated document and manage the upload of the signed document.
## Configuring the process
Follow the steps outlined in [**Generating from HTML templates**](./generating-from-html-templates) configure the document generation part of the process.

If you only need to upload a new file without generating it from templates, skip the template generation steps.
After configuration, your request and response messages should resemble the examples below.
#### Request message example
This JSON structure represents a Kafka message sent through the `..in` topic to initiate a request in the Process Engine. It includes information for generating an "AccountCreation" document with a custom ID "119237" in English. Data specifies client details extracted dynamically from user input (first name, last name, age, country) and company information (name, registration date).
This an example of a message that follows the custom integration data model.
```json theme={"system"}
{
"documentList": [
{
"customId": "119246", //this will match the name of the folder in the storage solution
"templateName": "AccountCreation",
"language": "en",
"data": {
"application": {
"client": {
"firstName": "John",
"lastName": "Doe",
"age": "33",
"country": "AU"
},
"company": {
"name": "ACME",
"registrationDate": "24.01.2024"
}
}
},
"includeBarcode": false
}
]
}
```
#### Response message example
This JSON structure represents the response received on the `..out` Kafka topic, where the Process Engine expects a reply. It contains details about the generated PDF file corresponding to the custom ID "119237" and the "AccountCreation" template. The response provides file-related information such as file ID, document type, document label, storage path, download path, number of pages, and any potential errors (null if none). The paths provided in the response facilitate access and download of the generated PDF file.
```json theme={"system"}
{
"generatedFiles": {
"119246": {
"AccountCreation": {
"customId": "119246",
"fileId": "f705ae5b-f301-4700-b594-a63b50df6854",
"documentType": "AccountCreation",
"documentLabel": "GENERATED_PDF",
"minioPath": "flowx-dev-process-id-119246/119246/457_AccountCreation.pdf", // path to the document in the storage solution
"downloadPath": "internal/files/f705ae5b-f301-4700-b594-a63b50df6854/download", //link for download
"noOfPages": 1,
"error": null
}
}
},
"error": null
}
```
Configure the **preview** part of the process.

#### Service task node
We will configure the service task node to construct the file path for the generated document.
Configure a business rule to construct a file path for the generated document. Ensure the base admin path is specified.
Ensuring the base admin path is specified is crucial, as it grants the required administrative rights to access the endpoint responsible for document generation.
#### Actions
**Action Edit**
* **Action Type**: Set to **Business Rule**
* **Trigger Type**: Choose **Automatic** because is not a user-triggered action
* **Required Type**: Set as **Mandatory**

**Parameters**
* **Language**: We will use **MVEL** for this example
* **Body Message**: Fill in the body message request
```js theme={"system"}
adminPath = "https://admin-main.playground.flowxai.dev/document/";
processInstanceId = input.?generatedDocuments.?generatedFiles.keySet().toArray()[0];
downloadPath = input.?generatedDocuments.?generatedFiles.?get(processInstanceId).Company_Client_Document.downloadPath;
if(downloadPath != null){
output.put("generatedDocuments", {
"filePath" : adminPath + downloadPath
});
}
```
* **adminPath**: Base URL for the admin path.
```java theme={"system"}
adminPath = "https://admin-main.playground.flowxai.dev/document/";
```
* **processInstanceId**: Extracts the process instance ID from the input. Assumes an input structure with a generatedDocuments property containing a generatedFiles property. Retrieves the keys, converts them to an array, and selects the first element.
```java theme={"system"}
processInstanceId = input.?generatedDocuments.?generatedFiles.keySet().toArray()[0];
```
* **downloadPath**: Retrieves the downloadPath property using the obtained processInstanceId.
```java theme={"system"}
downloadPath = input.?generatedDocuments.?generatedFiles.?get(processInstanceId).Company_Client_Document.downloadPath;`
```
* **if condition**: Checks if downloadPath is not null and constructs a new object in the output map.
```java theme={"system"}
if(downloadPath != null){
output.put("generatedDocuments", {
"filePath" : adminPath + downloadPath
});
}
```
### User Task
Now we will configure the user task to preview the generated document.
#### Actions
Configure the **Actions edit** section:
* **Action Type**: Set to **Save Data**.
* **Trigger Type**: Choose **Manual** to allow user-triggered action.
* **Required Type**: Set as **Mandatory**.

Let's see what we have until now.
The screen where you can fill in the client details:

The screen where you can preview and download the generated document:

Configure the user task where we will upload the signed document genereated from the previous document template.
#### Node Config
* **Swimlane**: Choose a swimlane (if multiple) to restrict access to specific user roles.
* **Stage**: Assign a stage to the node.
* **Data stream topics**: Add the topic where the response will be sent; in this example `ai.flowx.updates.document.html.persist.v1` and its key: `uploadedDocument`.

#### Actions
Configure the following node actions:
* Upload File action with two child actions:
* Business Rule
* Send Data to User Interface
* Save Data action

#### Upload file action
This is a standard predefined FlowX Node Action for uploading files. This is done through Kafka and by using `persist` topics.
#### Action edit
* **Action Type**: Set to **Upload File**.
* **Trigger Type**: Choose **Manual** to allow user-triggered action.
* **Required Type**: Set it as **Optional**.
* **Repeatable**: Check this option if the action can be triggered multiple times.
#### Parameters
* **Topics**: Kafka topic where the file will be posted, in this example `ai.flowx.in.document.persist.v1`.
To identify your defined topics in your current environment, follow the next steps:
* From the FLOWX.AI main screen, navigate to the **Platform Status** menu at the bottom of the left sidebar.
* In the FLOWX Components list, scroll to the **document-plugin-mngt** line and press the eye icon on the right side.
* In the details screen, expand the `KafkaTopicsHealthCheckIndicator` line and then **details → configuration → topic → document → persist**. Here will find the in and out topics for persisting (uploading documents).

* **Document Type**: Metadata for the document plugin, in this example `BULK`.
* **Folder**: Configure a value by which the file will be identified, in this example it will be the`${processInstanceId}` (it will be replaced at runtime with a generated process instance id).
* **Advanced configuration (Show headers)**: This represents a JSON value that will be sent on the headers of the Kafka message, in this example:
```json theme={"system"}
{"processInstanceId": ${processInstanceId}, "destinationId": "upload_document", "callbacksForAction": "uploadDocument"}`
```
`callbacksForAction` - the value of this key is a string that specifies a callback action associated with the "upload\_document" destination ID (node). This is part of an event-driven system (Kafka send action) where this callback will be called once the "upload\_document" action is completed.
#### Data to send
* **Keys**: Used when data is sent from the frontend via an action for data validation.


When configuring the UI action that corresponds to the Upload File node action, you must set the **UI action type** to **upload**. This ensures proper integration between the frontend interface and the backend upload functionality.

Now, configure the child actions of Upload File Action.
#### Business rule
This is necessary to create the path to display the uploaded document.
**Action Edit**
* **Order**: Set to **1** so it will be processed before the second child action.
* **Action Type**: Set to **Upload File**.
* **Trigger Type**: Choose **Automatic**, it does not need user intervention.
* **Required Type**: Set as **Mandatory**.
* **Repeatable**: Check this option if the action can be triggered multiple times.
**Parameters**
* **Language**: In this example we will use **MVEL**.
* **Body Message**: Fill in the body of the message request by applying a logic similar to the one utilized in configuring the "preview\_document" node. Establish a path that will be later employed to showcase the uploaded document within a preview UI component.
```js theme={"system"}
adminPath = "https://admin-main.playground.flowxai.dev/document/";
downloadPath = input.?uploadedDocument.?downloadPath;
if(downloadPath != null){
output.put("uploadedDocument", {
"filePath" : adminPath + downloadPath
});
}
```


#### Send Data to User Interface
This is necessary to send the previously created information to the frontend.
**Action Edit**
* **Order**: Set to **2** so it will be processed after the previously created Business Rule.
* **Action Type**: Set to **Send data to user interface**.
* **Trigger Type**: Choose **Automatic**, it does not need user intervention.
* **Required Type**: Set as **Mandatory**.
* **Repeatable**: Check this option if the action can be triggered multiple times.
**Parameters**
* **Message Type**: Set to **Default**.
* **Body Message**: Populate the body of the message request; this object will be utilized to bind it to the document preview UI element.
```json theme={"system"}
{
"uploadedDocument": {
"filePath": "${uploadedDocument.filePath}"
}
}
```
* **Target Process**: Used to specify to what running process instance should this message be sent - set to **Active Process**.


#### Save Data
Configure the last node action to save all the data.
**Action edit**
* **Order**: Set to **3**.
* **Action Type**: Set to **Save Data**.
* **Trigger Type**: Choose **Manual** to allow user-triggered action.
* **Required Type**: Set as **Mandatory**.
#### Request message example
To initiate the document processing, a Kafka request with the following JSON payload will be sent through `..in` topic:
This an example of a message that follows the custom integration data model.
```json theme={"system"}
{
"tempFileId": "05081172-1f95-4ece-b2dd-1718936710f7", //a unique identifier for the temporary file
"customId": "119246", //a custom identifier associated with the document
"documentType": "BULK" //the type of the document
}
```
#### Response message example
Upon successful processing, you will receive a JSON response on the `..out` topic with details about the processed document:
```json theme={"system"}
{
"customId": "119246",
"fileId": "96975e03-7fba-4a03-99b0-3b30c449dfe7",
"documentType": "BULK",
"documentLabel": null,
"minioPath": "flowx-dev-process-id-119246/119246/458_BULK.pdf",
"downloadPath": "internal/files/96975e03-7fba-4a03-99b0-3b30c449dfe7/download",
"noOfPages": null,
"error": null
}
```
Now the screen is configured for uploading the signed document:

## Receiving the reply
The response, containing information about the generated and uploaded documents as mentioned earlier, is sent to the output Kafka topic defined in the Kafka Receive Event Node. The response includes details such as file IDs, document types, and storage paths.

The reply body is expected to contain the following values:
* **customId**: A custom identifier associated with the document.
* **fileId**: The ID of the file.
* **documentType**: The document type.
* **minioPath**: The path where the uploaded file is saved. It represents the location of the file in the storage system, whether it's a MinIO path or an S3 path, depending on the specific storage solution.
* **downloadPath**: The download path for the uploaded file. It specifies the location from where the file can be downloaded.
* **noOfPages**: The number of pages in the document (if applicable).
* **filePath**: The path to the file that we built in our example so we can display the document.
# Enumerations
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/content-management/enumerations
Enumerations allow you to manage a collection of predefined values that can be used within UI components or templates. These values can be tailored for specific source systems or languages.

## Overview
Enumerations help you standardize and manage lists of values that are displayed in your applications. Each enumeration consists of one or more values with both an internal identifier (the code) and display strings (labels) for different languages. You can also establish hierarchies by creating child collections—for example, defining states within a country.
## User interface overview
The **Enumerations** tab is divided into the following sections:
### Header
* **New Enumeration** - Click this button to create a new enumeration.
* **Contextual Menu (three dots)** - Provides options for **Import** and **Export**.

### Main table
* **Name** - Displays the name of each enumeration.
* **Edited At** - Indicates the last update timestamp for each enumeration.
* **View Details** - Allows you to update the enumeration name.

***
## Enumeration entry details
When you open an enumeration entry, define the following properties:
1. **Code** - Not displayed in the end-user interface, but used to assure value uniqueness
2. **Labels** - These are the display strings shown to end users in various languages.
3. **External source systems codes** - Specifies the corresponding codes for each external system that consumes the data. Connectors use these codes for data validation.

### Adding a new enumeration
To create a new enumeration:
1. **Open your project:** Launch **FlowX Designer** and open your project.
2. **Access Enumerations:** Select **Enumerations** from the **CMS** tab.
3. **Name the Enumeration:** Enter a suggestive name and click **Add**.

### Configuring an enumeration
After creating an enumeration, add values to it by configuring:
* **Code:** A unique identifier (not visible to end-users).
* **Labels:** The display string for each language.
* **Source Systems:** The code values assigned for each external system consuming the data.

You can find the list of available source systems under **Projects → Integrations → Systems**.

### Creating a child collection
Enumerations can be organized hierarchically by defining child values for each entry. For example, you might define states as children under a country enumeration. Hierarchical structures enable cascading selections in the user interface; for instance, choosing a country in one dropdown can filter the states available in another.


### Importing/exporting an enumeration
You can import or export enumerations using the following formats:
* **ZIP**
* **CSV**

Every enumeration (root or child) must contain at least one **content value** (i.e., at least one label is provided) before attempting an import or export. Remember, the term *value* here refers to the display content for end-users, not the internal code.
### Enumerations example
Consider an example for **Activity Domain Companies**. You can use hierarchies to organize related domains and activities.
#### **Activity Domain Companies → Agriculture forestry and fishing:**
* **Agriculture, hunting, and related services →**
Cultivation of non-perennial plants:
* Cultivation of cereals (excluding rice), leguminous plants and oilseeds
* Cultivation of rice
* Growing of vegetables and melons, roots and tubers
* Cultivation of tobacco
Cultivation of plants from permanent crops:
* Cultivation of grapes
* Cultivation of grapes
* Cultivation of seeds and stone fruits
* Cultivation of oil seeds
Animal husbandry:
* Raising of dairy cattle
* Raising of other cattle
* Raising horses and other horses
* **Forestry and logging →**
Forestry and other forestry activities:
* Forestry and other forestry activities
Logging:
* Logging
Collection of non-wood forest products from spontaneous flora:
* Collection of non-wood forest products from spontaneous flor
* **Fisheries and aquaculture →**
Fishing:
* Sea fishing
* Freshwater fishing
Aquaculture:
* Maritime aquaculture
* Freshwater aquaculture
This is the output after adding all the lists/collections from above:

# Media library
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/content-management/media-library
The media library serves as a centralized hub for managing and organizing various types of media files, including pdf documents, images, GIFs, and more. It encompasses all the files that have been uploaded to the **processes**, providing a convenient location to view, organize, and upload new media files.

You can also upload an image directly to the Media Library on the spot when configuring a process using the [**UI Designer**](/4.0/docs/building-blocks/ui-designer/ui-designer). More information [**here**](/4.0/docs/building-blocks/ui-designer/ui-component-types/image).
## Uploading a new asset
To upload an asset to the Media Library, follow the next steps:
1. Open **FlowX Designer**.
2. Go to **Content Management** tab and select **Media Library**.
3. Click **Add new item** ("+" button in the top-right corner), the following details will be displayed:
* **Upload item** - opens a local file browser
* **Key** - the key must be unique, you cannot change it afterwards

4. Click **Upload item** button and select a file from your local browser.
5. Click **Add** to upload the asset.
You can upload files in **PNG, JPEG, JPG, GIF, SVG, WebP, or PDF** format. The maximum supported file size is **25 MB** for any file type.
## Displaying assets
Users can preview all the uploaded assets just be accessing the **Media Library**.
You have the following information about assets:
* Preview (thumbnail 48x48)
* Key
* Format ("-" for unknown format)
* Size
* Used as icon
* Edited at
* Edited by

## Searching assets
You can search an asset by using its key (full or substring).
## Updating assets
You can replace an item on a specific key (this will not break references to process definitions). To do that, click on the asset and select \**Upload item* then click **Update**.

## Icons
The Icons feature allows you to personalize the icons used in UI elements. By uploading SVG files through the Media Library and marking them, you can choose icons from the available list in the UI Designer.

* **Use as icon** - this will mark the SVG file as an icon and it will be displayed in the UI Designer

When selecting icons in the UI Designer, only SVG files marked as icons in the Media Library will be displayed.

To ensure optimal visual rendering and alignment within your UI elements, it is recommended to use icons with small sizes such as: 16px, 24px, 32px.
Using icons specifically designed for these sizes helps maintain consistency and ensures a visually pleasing user interface. It is advisable to select icons from icon sets that provide these size options or to resize icons proportionally to fit within these dimensions.
Icons are displayed or rendered at their original, inherent size.
## Referencing assets in UI Designer
You have the following options when configuring image components using [UI Designer](../../../building-blocks/ui-designer/ui-designer):
* **Source Location** - here you must select **Media Library** as source location (or directly select "Upload to Media Library" button for on the spot upload)
* **Image Key** - automatically populated with the key of the asset when selecting an asset from the Media Library

More details on how to configure an image component using UI Designer - [**here**](/4.0/docs/building-blocks/ui-designer/ui-component-types/image).
## Customization
Content-specific icons pertain to the content of UI elements, such as icons for [input fields](../../../building-blocks/ui-designer/ui-component-types/form-elements/input-form-field) or [send message buttons](../../../building-blocks/ui-designer/ui-component-types/buttons). These icons are readily accessible in the [UI Designer](../../../building-blocks/ui-designer/).

More details on how to add icons on each element, check the sections below:
## Export/import media assets
The import/export feature allows you to import or export media assets, enabling easy transfer and management of supported types of media files.

### Import media assets
Use this function to import media assets of various supported types. It provides a convenient way to bring in images, videos, or other media resources.
### Export all
Use this function to export all media assets stored in your project as a zip file.
# Forwarding notifications
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/content-management/notifications-plugin/forwarding-notifications-to-an-external-system
If the Notification service is not directly connected to an SMTP / SMS server and you want to use an external system for sending the notifications, you can use the notification plugin just to forward the notifications to your custom implementation.
### Check needed Kafka topics
Yu will need the name of the kafka topics defined at the following environment variables:
* `KAFKA_TOPIC_NOTIFICATION_INTERNAL_IN` - topic used to trigger the request to send a notification
* `KAFKA_TOPIC_NOTIFICATION_EXTERNAL_OUT` - the notification will be forwarded on this topic to be handled by an external system
* `KAFKA_TOPIC_NOTIFICATION_INTERNAL_OUT` - topic used for sending replies after sending the notification
You can check the defined topics by going to **FlowX Designer > Platform Status > notification-plugin-mngt > kafkaTopicsHealthCheckIndicator > details > configuration > topic > notification**.
### Example: send a notification from a business flow
Let's pick a simple use case. Imagine we need to send a new welcome letter when we onboard a new customer. You must follow the next steps:
1. Configure the [template](./managing-notification-templates) that you want to use for the welcome email, use the [WYSIWYG Editor](../../wysiwyg)
Make sure that the **Forward on Kafka** checkbox is ticked, so the notification will be forwarded to an external adapter.
2. Configure the data model for the template.
3. To configure a document template, first, you need to define some information stored in the [Body](../../wysiwyg#notification-templates):
* **Type** - MAIL (for email notifications)
* ❗️**Forward on Kafka** - if this box is checked, the notification is not being sent directly by the plugin to the destination, but forwarded to another adapter
* **Language** - choose the language for your notification template
* **Subject** - enter a subject


4. Use the FlowX Designer to create a process definition.
5. Add a [**Send Message Task**](../../../../building-blocks/node/message-send-received-task-node#configuring-a-message-send-task-node) and a [**Receive Message Task**](../../../../building-blocks/node/message-send-received-task-node#configuring-a-message-receive-task-node) (one to send the request, one to receive the reply).
6. Check if the needed topic (defined at the following environment variable) is configured correctly: `KAFKA_TOPIC_NOTIFICATION_INTERNAL_IN`.
7. Add the proper configuration to the action, the Kafka topic, and the body message.

**Forward on Kafka** option will forward the notification to an external adapter, make sure the needed Kafka topic for forwarding is defined/overwritten using the following environment variable: `KAFKA_TOPIC_EXTERNAL_OUT`.
7. Run the process and look for the response (you can view it via the **Audit log**) or by checking the responses on the Kafka topic

Response example at `KAFKA_TOPIC_NOTIFICATION_INTERNAL_OUT`:
```json theme={"system"}
{
"templateName": "welcomeLetter",
"receivers": [
"john.doe@mail.com"
],
"channel": "MAIL",
"language": "en"
}
```
# Managing notification templates
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/content-management/notifications-plugin/managing-notification-templates
You can create and manage notification templates using FlowX.AI Designer by accessing the dedicated section.

### Configuring a template
To configure a document template, first, you need to select some information stored in the **Body**:
1. **Type** - could be either MAIL or SMS notifications
2. [**Forward on Kafka**](./forwarding-notifications-to-an-external-system) - if this checkbox is ticked, the notification is not being sent directly by the plugin to the destination, but forwarded to another adapter (this is mandatory for SMS notifications templates, as they require an external adapter)
3. **Language** - choose the language for your notification template
4. **Subject** - enter a subject
You can edit the content for each language you have defined in the project.

#### Editing the content
You can edit the content of a notification template by using the [WYSIWYG](../../wysiwyg) editor embedded in the body of the notification templates body.
### Configuring the data model
Using the **Data model** tab, you can define key pair values (parameters) that will be displayed and reused in the editor. Multiple parameters can be added:
* STRING
* NUMBER
* BOOLEAN
* OBJECT
* OBJECT\_REF
* ARRAY
* ARRAY\_REF
* ENUM

After you defined some parameters in the **Data Model** tab, you can type "**#**" in the editor to trigger a dropdown where you can choose which one you want to use/reuse.

### Testing the template
You can use the test function to ensure that your template configuration is working as it should before publishing it.
If some keys (marked as mandatory) are not used in the template, the test will not go through.
### Other actions
When opening the contextual menu (accessible by clicking on the breadcrumbs button), you have multiple actions to work with the notifications templates:
* **Configure** - edit the template
* **Export template** - export a template (JSON format)
* **Audit log** - view the audit log
* **Copy to another project/library** - copy a template to another project/library
* **Duplicate** - duplicate a template
* **Delete** - delete a template

# Notification Templates
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/content-management/notifications-plugin/notifications-plugin-overview
The Notification Templates can be easily added to your custom FlowX.AI deployment. The plugin will **enhance the core platform capabilities with functionality specific to sending various notifications**.
The Notification Templates feature offers the following features:
* Email notifications
* SMS templates to mobile devices
To use the Notification Templates feature to send notifications, via SMS channel, a third party provider for SMS communication is needed, for example, [Twilio](https://www.twilio.com/).
* Forward custom notifications to external outgoing services
* Generate and validate OTP passwords for user identity verification
You can also use the Notification Templates feature to track what notifications have been sent and to whom.
Let's go through the steps needed to deploy and set up the Notification Templates feature:
## Using Notification Templates
After deploying the Notification Templates feature in your infrastructure, you can start sending notifications by configuring related actions in your **process definitions**.
Before adding the corresponding **actions** in your process definition, you will need to follow a few steps:
* make sure all prerequisites are prepared, for example, the [notification templates](./managing-notification-templates) you want to use
* the database is configured properly
* for each **Kafka** event type, you will need two Kafka topics:
* one for the request sent from the FlowX Engine to the Notification Templates feature
* one for the corresponding reply
**DEVELOPER**
The topic names configured for the plugin should match the ones used when configuring the engine and when adding plugin-related process actions:
* FlowX Engine is listening for messages on topics with names of a certain pattern, make sure to use an outgoing topic name that matches the pattern configured in the Engine
More details: [here](../../../../../setup-guides/flowx-engine-setup-guide/engine-setup#configuring-kafka)
* to make a request to the plugin, the process definition needs to have an action of type `Kafka send` that has an action parameter with key `topicName` and the needed topic name as a value
* to receive a reply from the plugin, the process definition needs to have a receiving node with a node value with key `topicName` and the topic name as the value
After all the setup is in place, you can start adding custom actions to the processes.
Let's go through a few examples. These examples cover both the configuration part, and the integration with the engine for all the use cases.
# Generate OTP
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/content-management/notifications-plugin/otp-flow/generate-otp
There are some cases when you will need to generate an OTP (One Time Password) from a business flow, for example when validating an email account.
The notifications plugin handles both the actual OTP code generation and sending the code to the user using a defined [notification template](../managing-notification-templates).

## Define needed Kafka topics
**DEVELOPER**: Kafka topic names can be set/found by using the following environment variables in your Notifications plugin deployment:
* `KAFKA_TOPIC_OTP_GENERATE_IN`
* `KAFKA_TOPIC_OTP_GENERATE_OUT` - after the OTP is generated and sent to the user, this is the topic used to send the response back to the Engine.
The Engine is listening for messages on topics with names of a certain pattern, make sure to use an outgoing topic name that matches the pattern configured in the Engine.
## Request to generate an OTP
Values expected in the request body:
* **templateName**: the name of the notification template that is used (created using the [WYSIWYG](../../../wysiwyg) editor)
* **channe**l: notification channel (SMS / MAIL)
* **recipient**: notification receiver: email / phone number
* **notification template content parameters (for example, clientId)**: parameters that should be replaced in the [notification template](../managing-notification-templates)

## Response from generate OTP
Values expected in the reply body:
* **processInstanceId** = process instance ID
* **clientId** = the client id (in this case the SSN number of the client)
* **channel** = notification channel used
* **otpSent** = confirmation if the notification was sent: true or false
* **error** = error description, if any
**Example:**

## Example: generate an OTP from a business flow
It is important to identify what is the business identifier that you are going to use to validate that OTP, it can be, for example, a user identification number.
1. Configure the templates that you want to use (for example, an SMS template).
2. Make sure the Kafka communication through (`KAFKA_TOPIC_OTP_GENERATE_IN` topic - send the otp request) and the topic used to receive the response (`KAFKA_TOPIC_OTP_GENERATE_OUT`) is defined properly.
You can check the defined topics by going to **FlowX Designer > Platform Status > notification-plugin-mngt > kafkaTopicsHealthCheckIndicator > details > configuration > topic > otp**.
3. Use the FlowX Designer to add a new **Kafka send event** to the correct node in the process definition.
4. Add the proper configuration to the action, the Kafka topic, and configure the body message.

5. Add a node to the process definition (for the Kafka receive event).
6. Configure on what key you want to receive the response on the process instance params.

# Handling OTP
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/content-management/notifications-plugin/otp-flow/otp-flow
The notifications plugin can also be used for handling the one time password (OTP) generation and validation flow.
The flow is made of two steps, the OTP generation and the OTP validation.
### OTP Configuration
The desired character size and expiration time of the generated one-time-passwords can also be configured using the following environment variables:
* `FLOWX_OTP_LENGTH`
* `FLOWX_OTP_EXPIRE_TIME_IN_SECONDS`
Let's go through the examples for both steps:
# Validate OTP
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/content-management/notifications-plugin/otp-flow/validate-otp
## Define needed Kafka topics
Kafka topic names can be set by using environment variables:
* `KAFKA_TOPIC_OTP_VALIDATE_IN` - the event sent on this topic (with an OTP and an identifier) will check if the OTP is valid
* `KAFKA_TOPIC_OTP_VALIDATE_OUT` - the response for this request will validate an OTP, the reply is sent back to the Engine on this topic
You can check the defined topics by going to **FlowX Designer > Platform Status > notification-plugin-mngt > kafkaTopicsHealthCheckIndicator > details > configuration > topic > otp**.
The Engine is listening for messages on topics with names of a certain pattern, make sure to use an outgoing topic name that matches the pattern configured in the Engine.
## Request to validate an OTP
Values expected in the request body:
* **processInstanceId** = process instance ID
* **client id** = the user unique ID in the system
* **channel** = notification channel: SMS/MAIL
* **otp** = OTP code that you received, used to compare with the one that was sent from the system
Example:
```json theme={"system"}
{
"processInstanceId": 12345,
"clientId": "1871201460101",
"channel": "MAIL",
"otp": "1111"
}
```
### Reply from validate OTP
Values expected in the reply body:
* **client id** = the user unique id in the system
* **channel** = notification channel used
* **otpValid** = confirmation if the provided OTP code was the same as the one sent from the system
Example:

## Example: validate an OTP from a business flow
Similar to the generation of the OTP you can validate the OTP that was generated for an identifier.
1. Check that the needed topics are configured correctly: (`KAFKA_TOPIC_OTP_VALIDATE_IN` and `KAFKA_TOPIC_OTP_VALIDATE_OUT`)
2. Add the actions for sending the request to validate the OTP on the node that contains the 'Generate OTP' actions
3. Add the proper configuration to the action, the Kafka topic and configure the body message.

4. Add a node to the process definition (for the [Receive Message Task](../../../../../building-blocks/node/message-send-received-task-node#receive-message-task))
5. Configure on what key you want to receive the response on the process instance parameters

# Sending a notification
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/content-management/notifications-plugin/sending-a-notification
Learn how to configure and implement notification functionality in your business processes using the FlowX.AI Notifications Plugin.
The FlowX.AI Notifications Plugin enables you to send various types of notifications such as emails and SMS messages. This document explains how to integrate notification functionality into your business processes.
## Configuring the notification process
To configure a business process that sends notifications, follow these steps:
1. Create or edit a [notification template](./managing-notification-templates) in **FlowX Designer**
2. Design your BPMN process in **Process Designer** with:
* A [send message task](../../../../building-blocks/node/message-send-received-task-node#send-message-task)
* A [receive message task](../../../../building-blocks/node/message-send-received-task-node#receive-message-task)
3. Configure required [node actions](../../../../building-blocks/actions/actions)
4. Set up the request body parameters
The notification process uses Send message task/receive message task nodes to manage communication between components.
The diagram below shows how the notification system integrates with your business processes:
**DEVELOPER NOTE**: Ensure that Kafka topics are properly configured in your environment by setting these variables:
* `KAFKA_TOPIC_NOTIFICATION_INTERNAL_IN` (default: `ai.flowx.plugin.notification.trigger.send.notification.v1`) - Topic for notification requests
* `KAFKA_TOPIC_NOTIFICATION_INTERNAL_OUT` (default: `ai.flowx.engine.receive.plugin.notification.confirm.send.notification.v1`) - Topic for notification responses
## Send notification request body parameters
Your notification request must include these parameters:
| Key | Definition | |
| :-----------: | :---------------------------------------------------------------: | :-------: |
| templateName | The name of the notification template to use | Mandatory |
| channel | Notification channel: SMS/MAIL | Mandatory |
| receivers | Notification recipients: email addresses or phone numbers | Mandatory |
| ccReceivers | Notification CC recipients: email addresses | Optional |
| bccReceivers | Notification BCC recipients: email addresses | Optional |
| language | The language code of the template to use (e.g., "en", "fr") | Mandatory |
| contentParams | Parameters for filling the template with dynamic content | Optional |
| senderEmail | Email address of the notification sender | Optional |
| senderName | Name of the notification sender | Optional |
| attachments | Files to attach to the notification (only for MAIL notifications) | Optional |
### Using dynamic keys
Notifications support dynamic keys (placeholders) that allow for personalized content:
* Dynamic keys use the syntax `${...}` to insert data from the process context
* The system fetches corresponding values from the specified data path
* This approach eliminates hardcoding and supports personalized content
* Example: `${application.client.firstName}` retrieves and displays the client's first name
```json Request Example with Dynamic Content theme={"system"}
{
"templateName": "ClientRelationshipEmailConfirmation",
"channel": "MAIL",
"receivers": [
"${application.client.email}"
],
"language": "en",
"data": {
"firstInputClient": "${application.client.firstName}"
},
"attachments": [
{
"path": "${generatedDocument.generatedFiles.1234.ClientRelationshipDetails.minioPath}",
"filename": "${generatedDocument.generatedFiles.1234.ClientRelationshipDetails.documentType}.pdf"
}
]
}
```
## Implementation example
Let's implement a welcome email notification for new customer onboarding.
First, create and configure your welcome email template. See [Managing notification templates](/platform-deep-dive/plugins/custom-plugins/notifications-plugin/managing-notification-templates) for detailed instructions.

With notification templates, you can:
* Set up subjects and body content with a WYSIWYG editor
* Add dynamic fields using the data model to include recipient-specific information
* Define multiple language versions of the same template
* Configure notification types and delivery channels
Inside your project, create a process definition with:
* A [User Task](../../../../building-blocks/node/user-task-node) to capture the recipient's email address and other user inputs if needed
* A [**Send Message Task**](../../../../building-blocks/node/message-send-received-task-node#send-message-task)
* A [**Receive Message Task**](../../../../building-blocks/node/message-send-received-task-node#receive-message-task)
This pattern enables asynchronous notification handling through Kafka messaging.

On the send message task, add a Kafka send action with the following settings:

* **Topics**:
* Use the value from `KAFKA_TOPIC_NOTIFICATION_INTERNAL_IN` environment variable
* Example (in our case): `flowx-notifications-devmain`
To find defined topics in your environment:
1. Navigate to **FlowX Designer > Platform Status**
2. Select **notification-plugin-mngt**
3. Open **kafkaTopicsHealthCheckIndicator > details > configuration > topic > notifications**

* **Message** (expected parameters):
* templateName (string)
* channel (string)
* language (string)
* receivers (array) - usually extracted from process context but also can be a static value
* **Can include**: `contentParams` (object) for dynamic content, `attachments` (array) for emails

* On the receive message task, add a data stream topic where you will receive the confirmation that the notification was sent:
* **Data stream topics**:
* Use the value from `KAFKA_TOPIC_NOTIFICATION_INTERNAL_OUT` environment variable
* Example (in our case): `ai.flowx.updates.devmain.notification.request.v1`
To add a data stream topic, follow the steps below:
1. On your **Receive Message Task** node, click on the **Node Config** tab.
2. Then under **Data stream topics** click **Add stream**.
3. Select **Custom** and enter the topic name from the `KAFKA_TOPIC_NOTIFICATION_INTERNAL_OUT` environment variable.
4. Add a key where you will see the response added to the process instance.
5. Click **Save**.
To find the corresponding data stream topic in your environment follow the same steps as in the [previous step](#configure-the-send-message-task)

Execute the process and verify the results by:
* Checking the audit log
* Checking the process instance status
* Monitoring responses on the `KAFKA_TOPIC_NOTIFICATION_INTERNAL_OUT` topic

When successful, you'll receive a response on the `KAFKA_TOPIC_NOTIFICATION_INTERNAL_OUT` topic similar to this:
```json Response Example theme={"system"}
{
"identifier": null,
"templateName": "welcomeLetter",
"language": "en",
"error": null
}
```
## Integration with document generation
You can enhance your notifications by attaching dynamically generated documents. To accomplish this:
Set up document templates using the Document Plugin
Generate documents in your process before sending the notification
Reference the generated documents in the notification request using dynamic keys:
```json theme={"system"}
"attachments": [
{
"path": "${generatedDocument.generatedFiles.1234.ClientRelationshipDetails.minioPath}",
"filename": "${generatedDocument.generatedFiles.1234.ClientRelationshipDetails.documentType}.pdf"
}
]
```
This integration creates a complete communication flow where personalized documents are automatically generated and sent to recipients.
## Troubleshooting
Ensure that all required Kafka topics are properly configured in your environment variables. Check the Platform Status screen for confirmation that topics are available and accessible.
Verify that the receiver information is correct and that your template is properly configured. Check the audit log for any error messages in the notification response.
If your notification is sent but doesn't display properly, check that all template variables are correctly defined and that the contentParams in your request match the expected template variables.
If a dynamic key isn't displaying the expected value, verify the path is correct and that the data exists in the process context. Dynamic keys are case-sensitive and must match the exact path to the data.
For issues with attachments, ensure the document was successfully generated and stored before attempting to attach it. Check that the path and filename are correctly specified in the attachment configuration.
# Sending an email
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/content-management/notifications-plugin/sending-an-email-with-attachments
To use the notification plugin for sending emails with attachments, you must define the same topic configuration as for sending regular notifications. A notification template must be created, and the corresponding Kafka topics must be defined.
Before proceeding, make sure you understand [how to send basic notifications](./sending-a-notification).
## Overview
This guide explains how to send emails with document attachments through the notification plugin. You'll learn how to:
* Configure email templates with dynamic content
* Reference generated documents as attachments
* Implement the complete email notification flow in your processes
## Prerequisites
1. A configured notification template (see [Managing notification templates](./managing-notification-templates))
2. Properly defined Kafka topics for the notification plugin
3. Files to attach (such as generated documents or uploaded files)
## Implementing email notifications with attachments
Let's walk through a common scenario: sending a customer a copy of their account details document via email.

If you need to generate the document first, see the document generation guide.
### Understanding document references
When you generate a document, as explained in the [Generating documents](../documents-plugin/generating-from-html-templates) guide, you need to reference two key pieces of information:
1. **minioPath**: The storage location of the generated document
2. **documentType**: The type identifier used to create the attachment filename
These values are stored in the process instance with the following structure:
```
generatedDocuments.generatedFiles.{{customId}}.{{templateName}}.minioPath
generatedDocuments.generatedFiles.{{customId}}.{{templateName}}.documentType
```
For example, if your document generation used:
* customId: "ClientsFolder"
* templateName: "AccountCreation"
The paths would be:
```json theme={"system"}
...
"attachments": [
{
"path": "${generatedDocuments.generatedFiles.ClientsFolder.AccountCreation.minioPath}",
"filename": "${generatedDocuments.generatedFiles.ClientsFolder.AccountCreation.documentType}.pdf"
}
]
```
You can verify these values in the process instance details:

### Step-by-step implementation
Configure the template you'll use for the email:
* Define subject line, body text, and placeholders for dynamic content
* Set proper HTML formatting if needed
* Test the template to ensure it displays correctly

See [Managing notification templates](./managing-notification-templates) for detailed instructions.
Confirm that the required Kafka topics are properly defined:
1. Navigate to **FlowX Designer → Platform Status**
2. Select **notification-plugin-mngt**
3. Expand **kafkaTopicsHealthCheckIndicator → details → configuration → topic → notification → internal**
4. Verify that the input and output topics for email notifications are listed

In your process definition:
1. Open the process definition in your project in FlowX Designer
2. Add a [Send Message Task (Kafka)](../../../../building-blocks/node/message-send-received-task-node#send-message-task) after the document generation step
3. Add a [Receive Message Task (Kafka)](../../../../building-blocks/node/message-send-received-task-node#receive-message-task) after the Send Message Task

On the Send Message Task, add a Kafka send action, add the corresponding Kafka topic and create the JSON payload containing all information needed for the email:
```json theme={"system"}
{
"templateName": "accountDetails",
"channel": "MAIL",
"receivers": ["something@email.com"],
"language": "en",
"contentParams": {
"firsInput": "${application.client.firstName}",
"secondInput": "${application.client.lastName}"
},
"attachments": [
{
"path": "${generatedDocuments.generatedFiles.ClientsFolder.AccountCreation.minioPath}",
"filename": "${generatedDocuments.generatedFiles.ClientsFolder.AccountCreation.documentType}.pdf"
}
]
}
```

Key parameters:
* **templateName**: The name of your configured email template
* **language**: The language code matching your template's language version
* **receivers**: Array of email addresses (can use process data variables)
* **ccReceivers**: Array of email addresses to be added as CC (can use process data variables)
* **bccReceivers**: Array of email addresses to be added as BCC (can use process data variables)
* **contentParams**: Values to replace template placeholders
* **attachments**: Array of files to attach, with filename and minioPath/storage path
On the Receive Message Task, add a Kafka receive action, add the corresponding Kafka topic and configure the node with the following properties:
* Go to **Node config** tab
* Under **Data stream topics** select **Custom**
* Add the topic name
* Click **Save**

Run the process and check the result in the process instance details:

## Request payload reference
### Required fields
| Field | Description | Example |
| ------------ | ---------------------------------------------- | -------------------------------------------------------- |
| templateName | The unique identifier of your email template | "accountDetails" |
| channel | The delivery channel (use "MAIL" for email) | "MAIL" |
| language | Language code (must match a template language) | "en" |
| receivers | List of email addresses to receive the message | \["[customer@example.com](mailto:customer@example.com)"] |
### Optional fields
| Field | Description | Example |
| ------------- | ------------------------------------------------- | ----------------------- |
| contentParams | Key-value pairs for template variable replacement | `{"firstName": "John"}` |
| attachments | List of files to attach to the email | See below |
### Attachment structure
Each attachment requires:
```json theme={"system"}
{
"path": "${path.to.file.in.storage}",
"filename": "desired_filename.extension"
}
```
* **path**: References the storage location (usually a MinIO path from document generation)
* **filename**: The name recipients will see for the attached file (can include process variables)
## Testing and troubleshooting
After configuring your email notification:
1. Verify that variables resolve correctly in the template and attachment references
2. Check email delivery to test recipients
3. Review notification plugin logs if issues occur
### Common issues
| Problem | Solution |
| ------------------- | ------------------------------------------------------------------------------- |
| Email not received | Verify template name, receiver address, and SMTP configuration |
| Missing attachment | Check that the MinIO path is correct and the file exists |
| Template errors | Ensure all variables in template have corresponding values in contentParams |
| Variable resolution | Confirm process variables use the correct path (check in process instance view) |
For further assistance, check the notification plugin logs in your environment.
# Substitution tags
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/content-management/substitution-tags
Substitution tags are used to generate dynamic content across the platform. As **enumerations**, substitution tags can be defined for each language set for the solution.

On the main screen inside **Substitution tags**, you have the following elements:
* **Key**
* **Values** - strings that are used in the end-user interface, according to the language set for the generated solution
* **Edit** - button used to edit substitution tags
* **Delete** - button used to delete substitution tags
* **New value** - button used to add a new substitution tag
* **Breadcrumbs menu**:
* **Import**
* from JSON
* from CSV
* **Export**
* to JSON
* to CSV
* **Search by** - search function used to easily look for a particular substitution tag
### Adding new substitution tags
To add a new substitution tag, follow the next steps.
1. Go to **FlowX Designer** and select the **Content Management** tab.
2. Select **Substitution tags** from the list.
3. Click **New value**.
4. Fill in the necessary details:
* Key
* Languages
5. Click **Add** after you finish.

When working with substitution tags or other elements that imply values from other languages defined in the CMS, when running a **process**, the default values extracted will be the ones marked by the default language.
### Getting a substitution tag by key
```
public func getTag(withKey key: String) -> String?
```
All substitution tags will be retrieved by the [**SDK**](../../../../sdks/angular-renderer) before starting the first process and will be stored in memory.
Whenever the container app needs a substitution tag value for populating the UI of the custom components, it can request the substitution tag using the method above, providing the key.
For example, substitution tags can be used to localize the content inside an application.
### Example
#### Localizing the app
You must first check and configure the FLOWX.AI Angular renderer to be able to replicate this example. Click [here](../../../../sdks/angular-renderer) for more information.
The `flxLocalize` pipe is found in the `FlxLocalizationModule`.
```typescript theme={"system"}
import { FlxLocalizationModule } from 'flowx-process-renderer';
```
```typescript theme={"system"}
import { Component } from '@angular/core';
@Component({
selector: 'app-dummy-component',
template: `
{{ "stringToLocalize" | flxLocalize}}
`,
})
export class DummyComponent{
stringToLocalize: string = `@@localizedString`
}
```
Strings that need to be localized must have the '**@@**' prefix which the **flxLocalize** pipe uses to extract and replace the string with a value found in the substitution tags enumeration.
Substitution tags are retrieved when a start process call is first made, and it's cached on subsequent start process calls.
## Task Management localization
Substitution tags are essential for localizing Task Management interfaces. FlowX.AI provides **51 system substitution tags** (prefixed with `sys_tm_*`) specifically for Task Management localization:
**Available since:** FlowX.AI 5.1.1
* Table columns (title, stage, assignee, status, priority)
* Process states (created, started, finished, etc.)
* Task actions (assign, hold, unassign, execute)
* Bulk operations
* History events and comments
* User selection dialogs
Complete guide to localizing Task Management with all 51 substitution tags. Table grid localization is automatic.
# FlowX.AI Scheduler
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/scheduler
The Scheduler is part of the core extensions of the FlowX.AI platform. It can be easily added to your custom FlowX deployment to enhance the core platform capabilities with functionality specific to scheduling messages.
The service offers the possibility to schedule a message that you only need to process after a configured time period.
It can be quickly deployed on the chosen infrastructure and then connected to the **FLOWX.AI Engine** through Kafka events.
## Using the scheduler
After deploying the scheduler service in your infrastructure, you can start using it to schedule messages that you need to process at a later time.
One such example would be to use the scheduler service to expire processes that were started but haven't been finished.
First you need to check the configured Kafka topics match the ones configured in the engine deployment.
For example the engine topics `KAFKA_TOPIC_PROCESS_SCHEDULE_OUT_SET` and `KAFKA_TOPIC_PROCESS_SCHEDULE_OUT_STOP` **must** be the same with the ones configured in the scheduler at `KAFKA_TOPIC_SCHEDULE_IN_SET` and `KAFKA_TOPIC_SCHEDULE_IN_STOP` environment variables.
When a process is scheduled to expire, the engine sends the following message to the scheduler service (on the topic `KAFKA_TOPIC_SCHEDULE_IN_SET`):
```json theme={"system"}
{
"applicationName": "onboarding",
"applicationId": "04f82408-ee66-4c68-8162-b693b06bba00",
"payload": {
"scheduledEventType": "EXPIRE_PROCESS",
"processInstanceUuid": "04f82408-ee66-4c68-8162-b693b06bba00"
},
"scheduledTime": 1621412209.353327,
"responseTopicName": "ai.flowx.process.expire.staging"
}
```
The scheduled time should be defined as `java.time.Instant`.
At the scheduled time, the payload will be sent back to the response topic defined in the message, like so:
```json theme={"system"}
{
"scheduledEventType": "EXPIRE_PROCESS",
"processInstanceUuid": "04f82408-ee66-4c68-8162-b693b06bba00"
}
```
If you don't need the scheduled message anymore, you can discard it by sending the following message (on the topic `KAFKA_TOPIC_SCHEDULE_IN_STOP`)
```json theme={"system"}
{
"applicationName": "onboarding",
"applicationId": "04f82408-ee66-4c68-8162-b693b06bba00"
}
```
These fields, `applicationName` and `applicationId` are used to uniquely identify a scheduled message.
Steps needed in order to deploy and set up the service
# FlowX.AI Data Search
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/search-data-service
Search for specific data across process instances using Elasticsearch-powered indexing for fast, precise results.

The Data Search service enables you to find specific data across process instances within your FlowX.AI platform. It uses Elasticsearch to perform fast, indexed searches across process data.
Search by a single field and value
Search using multiple criteria simultaneously
Search within array elements and nested structures
Search across multiple applications
Filter results by process creation dates
## Prerequisites
Before using the Data Search service, ensure you have:
* Elasticsearch cluster running and accessible
* Indexing enabled in FlowX Engine configuration
* Proper network connectivity between services
* `KAFKA_TOPIC_DATA_SEARCH_IN` configured for requests
* `KAFKA_TOPIC_DATA_SEARCH_OUT` configured for responses
* Proper topic permissions and access
* Process instances with indexed data
* Searchable fields defined in Process Settings
* Completed process instances for reliable results
***
## Quick start
Create a process that stores searchable data and configure field indexing.
Build a process with Kafka Send/Receive actions for search functionality.
Define your search criteria using simple, advanced, or array search syntax.
Process the returned data and display results to users.
### 1. Set up your data process
First, create a process that contains searchable data. Add a Service Task with a business rule:
```json Example Client Data theme={"system"}
output.put("application", {
"client": {
"personalInfo": {
"firstName": "Sarah",
"lastName": "Johnson",
"email": "sarah.johnson@techcorp.com",
"phone": "+1-555-0101"
},
"address": {
"country": "USA",
"city": "San Francisco",
"state": "California",
"zipCode": "94102"
},
"business": {
"company": "TechCorp Inc",
"industry": "Technology",
"position": "CTO"
},
"account": {
"type": "Premium",
"status": "Active",
"riskLevel": "Low"
}
}
});
```
```json Example Client List Data theme={"system"}
output.put("application", {
"listClient": [
{
"firstName": "Maria",
"lastName": "Rodriguez",
"email": "maria.rodriguez@company.com",
"department": "Engineering"
},
{
"firstName": "John",
"lastName": "Smith",
"email": "john.smith@company.com",
"department": "Sales"
},
{
"firstName": "Maria",
"lastName": "Garcia",
"email": "maria.garcia@company.com",
"department": "Marketing"
}
]
});
```

**Critical Step**: After creating your data structure, you must configure field indexing in **Process Settings → Data Search** for the search to work.
#### Configure Field Indexing
Navigate to **Process Settings → Data Search** and add the field paths you want to search:

**Fields that we indexed in our example:**
* `application.client.personalInfo.firstName`
* `application.client.personalInfo.lastName`
* `application.client.personalInfo.email`
* `application.listClient.[].firstName` (for array search)
* `application.listClient.[].lastName` (for array search)
* `application.listClient.[].department` (for array search)
### 2. Create your search process
Create a new process with a **Send Message Task**:

**Configuration:**
* **Action Type**: Kafka Send Action
* **Topic**: `KAFKA_TOPIC_DATA_SEARCH_IN`
### 3. Configure search parameters
Choose your search approach based on your needs:
Use when searching by a single field:
```json theme={"system"}
{
"searchKey": "application.client.personalInfo.lastName",
"value": "Johnson",
"processDefinitionNames": ["client_process"],
"states": ["FINISHED"]
}
```

Use when searching by multiple criteria (AND logic):
```json theme={"system"}
{
"searchKeys": [
{"key": "application.client.personalInfo.firstName", "value": "Sarah"},
{"key": "application.client.personalInfo.lastName", "value": "Johnson"}
],
"processDefinitionNames": ["client_process"],
"states": ["FINISHED"]
}
```
All conditions in `searchKeys` must match for a result to be returned.
Use when searching within arrays or lists. You can use either `searchKeys` or `searchByPaths`:
**Using searchKeys with array notation:**
```json theme={"system"}
{
"searchKeys": [
{"key": "application.listClient.[].firstName", "value": "Maria"}
],
"processDefinitionNames": ["client_process"],
"states": ["FINISHED"]
}
```
**Using searchByPaths (recommended for arrays):**
```json theme={"system"}
{
"searchByPaths": [
{"key": "application.listClient.[].firstName", "value": "Maria"}
],
"processDefinitionNames": ["client_process"],
"states": ["FINISHED"]
}
```
**Combined array search (multiple conditions in array):**
```json theme={"system"}
{
"searchByPaths": [
{"key": "application.listClient.[].firstName", "value": "Maria"},
{"key": "application.listClient.[].department", "value": "Engineering"}
],
"processDefinitionNames": ["client_process"]
}
```
* Use `[]` notation to search within array elements
* This searches through all items in the array
* Returns processes where any array element matches the criteria
Search across multiple applications:
```json theme={"system"}
{
"searchKey": "application.client.account.type",
"value": "Premium",
"applicationIds": [
"app-1-uuid",
"app-2-uuid"
]
}
```
Filter by process creation dates:
```json theme={"system"}
{
"searchKey": "application.client.business.industry",
"value": "Technology",
"processStartDateAfter": "2024-01-01T00:00:00Z",
"processStartDateBefore": "2024-12-31T23:59:59Z",
"states": ["FINISHED"]
}
```
### 4. Handle search results
Add a **Receive Message Task** with:
* **Data Stream**: `KAFKA_TOPIC_DATA_SEARCH_OUT`

**Success response example:**

```json Success Response theme={"system"}
{
"result": [
{
"processInstanceUUID": "b743ac99-4029-4b93-9ac3-4a45b4a62673",
"state": "FINISHED",
"processStartDate": "2025-05-28T12:18:50.532Z",
"data": {
"application": {
"client": {
"personalInfo": {
"firstName": "Sarah",
"lastName": "Johnson"
}
}
}
}
}
],
"tooManyResults": false,
"success": true
}
```
```json Array Search Response theme={"system"}
{
"result": [
{
"processInstanceUUID": "c854bd10-5140-5c04-0bd4-5b56c5b73784",
"state": "FINISHED",
"processStartDate": "2025-05-28T14:22:15.847Z",
"data": {
"application": {
"listClient": [
{
"firstName": "Maria",
"lastName": "Rodriguez",
"email": "maria.rodriguez@company.com",
"department": "Engineering"
},
{
"firstName": "Maria",
"lastName": "Garcia",
"email": "maria.garcia@company.com",
"department": "Marketing"
}
]
}
}
}
],
"tooManyResults": false,
"success": true
}
```
```json No Results Response theme={"system"}
{
"result": [],
"searchKey": "application.client.personalInfo.lastName",
"searchValue": "Smith",
"tooManyResults": false,
"success": true
}
```
## Search parameters reference
### Quick reference table
| Parameter | Type | Mandatory | Description | Example |
| ------------------------ | ------ | ------------------------ | -------------------------------------- | -------------------------------------------- |
| `searchKey` | String | Yes | Single field path to search | `"application.client.personalInfo.lastName"` |
| `value` | String | Yes | Value to search for (with searchKey) | `"Johnson"` |
| `searchKeys` | Array | Yes (if multiple fields) | Multiple field-value pairs (AND logic) | `[{"key": "field1", "value": "val1"}]` |
| `searchByPaths` | Array | Yes (for array search) | Array search field-value pairs | `[{"key": "list.[].field", "value": "val"}]` |
| `processDefinitionNames` | Array | Yes | Limit to specific processes | `["client_onboarding"]` |
| `applicationIds` | Array | No | Search across applications | `["uuid-1", "uuid-2"]` |
| `states` | Array | No | Filter by process states | `["FINISHED", "STARTED"]` |
| `processStartDateAfter` | String | No | Include processes after date | `"2024-01-01T00:00:00Z"` |
| `processStartDateBefore` | String | No | Include processes before date | `"2024-12-31T23:59:59Z"` |
### Basic search parameters
**Purpose**: The field path to search in for single-field searches.
**Usage**: Use dot notation to specify the exact path to the field you want to search or a specific key in the payload.
**Examples**:
* `"application.client.personalInfo.firstName"`
* `"application.client.address.city"`
* `"application.client.business.industry"`
**Important**: This field must be indexed in Process Settings → Data Search to work.
Cannot be used together with `searchKeys` or `searchByPaths`. Choose one approach.
**Purpose**: The exact value to search for when using `searchKey`.
**Usage**: Must match the stored value exactly (case-sensitive).
**Examples**:
* `"Johnson"` - searches for exact lastName match
* `"Technology"` - searches for exact industry match
* `"Active"` - searches for exact status match
**Note**: Only used with `searchKey`, not with `searchKeys` or `searchByPaths`.
**Purpose**: Array of key-value pairs for multi-field searches with AND logic.
**Usage**: All conditions must match for a result to be returned. Can also be used for array searches with `[]` notation.
**Format**:
```json theme={"system"}
[
{"key": "field.path.1", "value": "value1"},
{"key": "field.path.2", "value": "value2"}
]
```
**Examples**:
```json theme={"system"}
[
{"key": "application.client.personalInfo.firstName", "value": "Sarah"},
{"key": "application.client.business.industry", "value": "Technology"}
]
```
**Array Search Example**:
```json theme={"system"}
[
{"key": "application.listClient.[].firstName", "value": "Maria"}
]
```
Cannot be used together with `searchKey` or `searchByPaths`. Choose one approach.
**Purpose**: Array of key-value pairs specifically designed for searching within array elements and nested structures.
**Usage**: Use `[]` notation to search within array elements. This searches through all items in the array and is the recommended approach for array searches.
**Format**:
```json theme={"system"}
[
{"key": "arrayfield.[].property", "value": "searchvalue"}
]
```
**Examples**:
```json theme={"system"}
[
{"key": "application.listClient.[].firstName", "value": "Maria"}
]
```
**Multiple Array Conditions**:
```json theme={"system"}
[
{"key": "application.listClient.[].firstName", "value": "Maria"},
{"key": "application.listClient.[].department", "value": "Engineering"}
]
```
**Nested Array Example**:
```json theme={"system"}
[
{"key": "application.clients.[].addresses.[].city", "value": "New York"}
]
```
* **Recommended** for array searches over `searchKeys`
* Returns processes where any array element matches the criteria
* Supports deeply nested array structures
Cannot be used together with `searchKey` or `searchKeys`. Choose one approach.
### Filtering parameters
**Purpose**: Limit search to specific process definitions.
**Default**: Searches all processes if omitted.
**Usage**: Improves performance by narrowing search scope.
**Examples**:
* `["client_onboarding"]` - search only in client processes
* `["employee_registration", "contractor_onboarding"]` - search in multiple process types
**Best Practice**: Always specify to improve search performance.
**Purpose**: Search across specific applications.
**Default**: Searches current application if omitted.
**Usage**: Enable cross-application searches.
**Examples**:
* `["8dd20844-2dc5-4445-83a5-bbbcc82bed5f"]` - search in specific app
* `["app-1-uuid", "app-2-uuid", "app-3-uuid"]` - search across multiple apps
**Use Case**: Useful for consolidated reporting across different business units.
**Purpose**: Filter results by process instance status.
**Default**: Returns all states if omitted.
**Available States**:
* `"CREATED"` - Process instance created but not started
* `"STARTED"` - Process is currently running
* `"FINISHED"` - Process completed successfully
* `"FAILED"` - Process encountered an error and stopped
* `"TERMINATED"` - Process was manually stopped/cancelled
* `"ONHOLD"` - Process is paused or waiting for external input
**Examples**:
* `["FINISHED"]` - only completed processes
* `["STARTED", "ONHOLD"]` - active or paused processes
* `["FAILED", "TERMINATED"]` - processes that didn't complete normally
**Best Practice**: Use `["FINISHED"]` for most business searches to get complete data.
### Date range parameters
**Purpose**: Include only processes started after the specified date.
**Format**: ISO 8601 timestamp (`YYYY-MM-DDTHH:MM:SSZ`)
**Examples**:
* `"2024-01-01T00:00:00Z"` - processes started after Jan 1, 2024
* `"2024-06-15T09:30:00Z"` - processes started after June 15, 2024 at 9:30 AM
**Use Cases**:
* Monthly reports: `"2024-03-01T00:00:00Z"`
* Recent activity: `"2024-05-20T00:00:00Z"`
**Purpose**: Include only processes started before the specified date.
**Format**: ISO 8601 timestamp (`YYYY-MM-DDTHH:MM:SSZ`)
**Examples**:
* `"2024-12-31T23:59:59Z"` - processes started before end of 2024
* `"2024-06-30T23:59:59Z"` - processes started before end of June 2024
**Use Cases**:
* Historical analysis: `"2024-01-01T00:00:00Z"`
* Quarterly reports: `"2024-03-31T23:59:59Z"`
### Process states explained
Understanding process states is crucial for effective searching:
| State | Description | When to Use |
| -------------- | ---------------------------------------------------- | ---------------------------------------- |
| **CREATED** | Process instance exists but hasn't started execution | Rarely used for business searches |
| **STARTED** | Process is actively running | Find ongoing processes, current workload |
| **FINISHED** | Process completed successfully | Most common for business data searches |
| **FAILED** | Process encountered an error | Error analysis, troubleshooting |
| **TERMINATED** | Process was manually cancelled | Audit trails, cancelled applications |
| **ONHOLD** | Process is paused/waiting | Active cases needing attention |
**Recommendation**: Use `["FINISHED"]` for most business searches to ensure you're getting complete, reliable data.
### Response structure
The search returns a JSON object with these fields:
* **`result`** (Array): List of matching process instances
* `processInstanceUUID`: Unique process identifier
* `state`: Current process state
* `processStartDate`: When the process started
* `data`: The actual process data with your searchable fields
* **`tooManyResults`** (Boolean): True if more than 50 results found (limit applied)
* **`success`** (Boolean): Whether the search completed successfully
* **`errorMessage`** (String): Error details if search failed
## Use cases & examples
Search for employees by department, position, or location across HR systems.
Locate specific transactions or approvals for regulatory compliance.
Analyze process data patterns and generate reports.
Find processes containing specific individuals within contact lists or arrays.
### Real-world example: Employee directory search
HR department needs to find all employees named "Maria" across different departments.
```json theme={"system"}
{
"searchByPaths": [
{"key": "application.employees.[].firstName", "value": "Maria"}
],
"processDefinitionNames": ["employee_onboarding"],
"states": ["FINISHED"]
}
```
Receive all employee records containing anyone named "Maria" in their employee lists.
Add additional criteria like department or role to narrow results further.
### Real-world example: Customer support search
Support agent needs to find customer's account quickly.
```json theme={"system"}
{
"searchKeys": [
{"key": "customer.email", "value": "customer@email.com"},
{"key": "customer.status", "value": "Active"}
],
"processDefinitionNames": ["customer_onboarding"],
"states": ["FINISHED"]
}
```
Receive full customer profile with account details, order history, and support tickets.
Use the retrieved data to address the customer's concern effectively.
***
## Best practices
* **Use searchByPaths** for array searches instead of searchKeys when possible
* **Index array fields properly** using `[]` notation in Process Settings
* **Consider array size** - large arrays may impact search performance
* **Combine array searches** with filters to reduce result sets
* **Test nested array searches** thoroughly before deploying to production
* **Limit search scope** using `processDefinitionNames` and `states`
* **Use date ranges** for time-sensitive searches
* **Index only frequently searched fields** to reduce storage overhead
* **Monitor search response times** and optimize queries
* **Avoid wildcard searches** on large datasets
* **Use consistent field naming** across processes
* **Normalize data formats** (dates, phone numbers, etc.)
* **Consider search patterns** when designing data structures
* **Document indexed fields** for team reference
* **Plan for data growth** and scaling needs
* **Design arrays with search in mind** - consider what fields will be searched
* **Don't index sensitive data** (SSN, passwords, etc.)
* **Implement proper access controls** for search endpoints
* **Log search activities** for audit trails
* **Sanitize search inputs** to prevent injection attacks
* **Follow data retention policies** for search results
* **Handle empty results** gracefully in your UI
* **Implement retry logic** for failed searches
* **Provide meaningful error messages** to users
* **Set reasonable timeouts** for search operations
* **Monitor and alert** on search failures
***
## Troubleshooting
**Possible Causes:**
* Fields not indexed in Process Settings → Data Search
* Incorrect field path (case-sensitive)
* Process instances not in expected state
* Elasticsearch indexing delay
* Array notation missing for array searches
**Solutions:**
* Verify field indexing configuration
* Check exact field paths in process data
* Ensure processes are in FINISHED state
* Wait 30-60 seconds after process completion
* Use `[]` notation for array field searches
**Possible Causes:**
* Missing `[]` notation in field path
* Array fields not properly indexed
* Using wrong parameter (`searchKeys` vs `searchByPaths`)
* Array is empty or doesn't contain expected data
**Solutions:**
* Ensure field path includes `[]` for arrays (e.g., `list.[].field`)
* Verify array fields are indexed with `[]` notation
* Use `searchByPaths` for array searches when possible
* Check that arrays contain the expected data structure
* Test with simple array structures first
**Possible Causes:**
* Query too broad (searching all data)
* Elasticsearch cluster performance issues
* Large dataset without proper filtering
* Complex nested array searches
**Solutions:**
* Add more specific filters (`processDefinitionNames`, `states`)
* Use date ranges to limit scope
* Check Elasticsearch cluster health
* Optimize indexing strategy
* Simplify complex array search patterns
**Possible Causes:**
* Typos in field paths
* Field doesn't exist in process data
* Incorrect JSON format in request
* Missing array notation for array fields
**Solutions:**
* Verify field paths exist in process instances
* Check for case sensitivity
* Validate JSON syntax
* Test with simple field paths first
* Add `[]` notation for array field searches
**Possible Causes:**
* Kafka topics not properly configured
* Network connectivity problems
* Service authentication issues
**Solutions:**
* Verify Kafka topic configuration
* Check network connectivity
* Validate service credentials
* Review FlowX Engine logs
***
## Configuration templates
```json Simple search template theme={"system"}
{
"searchKey": "your.field.path",
"value": "search_value",
"processDefinitionNames": ["your_process"],
"states": ["FINISHED"]
}
```
```json Advanced search template theme={"system"}
{
"searchKeys": [
{"key": "field1", "value": "value1"},
{"key": "field2", "value": "value2"}
],
"processDefinitionNames": ["your_process"],
"states": ["FINISHED"]
}
```
```json Array search template (searchKeys) theme={"system"}
{
"searchKeys": [
{"key": "application.listField.[].property", "value": "search_value"}
],
"processDefinitionNames": ["your_process"],
"states": ["FINISHED"]
}
```
```json Array search template (searchByPaths) theme={"system"}
{
"searchByPaths": [
{"key": "application.listField.[].property", "value": "search_value"}
],
"processDefinitionNames": ["your_process"],
"states": ["FINISHED"]
}
```
```json Multiple array conditions template theme={"system"}
{
"searchByPaths": [
{"key": "application.employees.[].firstName", "value": "Maria"},
{"key": "application.employees.[].department", "value": "Engineering"}
],
"processDefinitionNames": ["employee_process"]
}
```
```json Cross-application template theme={"system"}
{
"searchKey": "your.field.path",
"value": "search_value",
"applicationIds": ["app-uuid-1", "app-uuid-2"],
"states": ["FINISHED"]
}
```
```json Date range template theme={"system"}
{
"searchKey": "your.field.path",
"value": "search_value",
"processStartDateAfter": "2024-01-01T00:00:00Z",
"processStartDateBefore": "2024-12-31T23:59:59Z",
"processDefinitionNames": ["your_process"]
}
```
***
## Related resources
Configure Elasticsearch indexing for FlowX Engine
Complete deployment and configuration guide
Learn how to design processes with searchable data
# Task Management localization
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/task-management/task-management-localization
Comprehensive localization support for Task Management, enabling multi-language experiences through FlowX substitution tags. Table grid localization is automatic.
Task Management in FlowX.AI includes comprehensive localization capabilities, allowing you to deliver fully translated task management interfaces in 34+ languages. Configure 51 FlowX substitution tags in CMS while table grid localization happens automatically based on your container app language.
**Available in:** FlowX.AI 5.1.1 LTS and 5.2.0 Tech Preview
## Localization approach
Task Management localization operates through two complementary systems:
### 1. FlowX Substitution Tags (51 Keys) - manual configuration
Custom Task Management UI elements that **must be configured manually in CMS** for each language:
* Table column names (title, stage, assignee, status, priority)
* Task actions (assign, unassign, hold, execute)
* Bulk operations (assign all to me, unassign all, hold all)
* History events and status values
* Comments and user selection dialogs
### 2. Table Grid Localization - automatic
Data table functionality is **automatically localized** based on the language configured in the container application. No manual configuration required.
Table grid components automatically translate:
* Filters (equals, contains, starts with, etc.)
* Menus (sort, group, export options)
* Pagination (page navigation, row counts)
* Data types (date formats, number formats)
If you need to configure FlowX substitution tags default text values (51 keys) in CMS, you can do so by navigating to **CMS** → **Substitution Tags** and adding the default text values for the substitution tags.
## Table grid localization
Table grid localization is **automatically handled by FlowX.AI** based on the language configured in your container application. The platform sets the appropriate locale in the background, translating without any manual configuration.
### What gets localized automatically
* **Filters**: Set filters, text filters, number filters, date filters with all operators
* **Menus**: Column menus, context menus, aggregation functions, sorting options
* **Pagination**: Page navigation, page size selectors, row counts
* **Data Types**: Boolean values, dates, numbers with proper formatting
* **Advanced Features**: Pivot mode, charting, column grouping, row operations
* **ARIA Labels**: Accessibility labels for screen readers and assistive technologies
Table grid localization is **fully automatic** and handled by FlowX.AI based on your container app language. No manual configuration or setup required from users.
## FlowX substitution tags
FlowX substitution tags control custom Task Management interface elements outside the data table. These **51 tags** must be configured manually in CMS for each language.

### Complete tag reference
**Search & Navigation**
* `sys_tm_search` - "Search"
**Table Columns**
* `sys_tm_title` - "Title"
* `sys_tm_stage` - "Stage"
* `sys_tm_assignee` - "Assignee"
* `sys_tm_status` - "Status"
* `sys_tm_priority` - "Priority"
* `sys_tm_last_updated` - "Last updated"
**Process States (Status Values)**
* `sys_tm_created` - "Created"
* `sys_tm_started` - "Started"
* `sys_tm_finished` - "Finished"
* `sys_tm_finished_with_error` - "Finished with error"
* `sys_tm_failed` - "Failed"
* `sys_tm_expired` - "Expired"
* `sys_tm_aborted` - "Aborted"
* `sys_tm_terminated` - "Terminated"
* `sys_tm_dismissed` - "Dismissed"
* `sys_tm_on_hold` - "On hold"
**Bulk Actions**
* `sys_tm_assign_to` - "Assign to…"
* `sys_tm_unassign_all` - "Unassign All"
* `sys_tm_assign_all_to_me` - "Assign All to me"
* `sys_tm_hold_all` - "Hold All"
* `sys_tm_unhold_all` - "Unhold All"
**Task Actions**
* `sys_tm_view_application` - "View Application"
* `sys_tm_unassign` - "Unassign"
* `sys_tm_assign_to_myself` - "Assign to myself"
* `sys_tm_unhold` - "Unhold"
* `sys_tm_hold` - "Hold"
* `sys_tm_assign` - "Assign"
* `sys_tm_execute` - "Execute"
* `sys_tm_start` - "Start"
**Task Details Sections**
* `sys_tm_assignee_deactivated` - "(Deactivated)"
* `sys_tm_comments` - "Comments"
* `sys_tm_write_a_comment` - "Write a comment…"
* `sys_tm_history` - "History"
**History Events**
* `sys_tm_task_created` - "Task created"
* `sys_tm_user_created_this_task` - "`${user}` created this task"
* `sys_tm_started_process_instance_with_id` - "Started Process Instance with ID"
* `sys_tm_started_process_instance_on_build` - "Started Process Instance on build"
* `sys_tm_task_ownership_changed_to` - "Task ownership changed to"
* `sys_tm_task_moved_to` - "Task moved to"
* `sys_tm_task_status_changed_to` - "Task status changed to"
* `sys_tm_task_assigned_to` - "Task assigned to"
* `sys_tm_task_owner_removed` - "Task owner removed"
**User Selection & Search**
* `sys_tm_select_person` - "Select person..."
* `sys_tm_search_person` - "Search users"
* `sys_tm_search_term_validation` - "Type at least 4 characters..."
**UI States**
* `sys_tm_loading` - "Loading..."
* `sys_tm_nothing_found` - "Nothing Found"
**Data display**
* `sys_tm_in` - "In" (custom filter operator)
* `sys_tm_yes` - "Yes" (boolean value)
* `sys_tm_no` - "No" (boolean value)
**Manual Configuration Required**: All 51 FlowX substitution tags must be configured manually in CMS for each language you want to support. They control custom Task Management UI elements outside of the data table.
## Implementation guide
To localize Task Management, you only need to configure the **51 FlowX substitution tags** in CMS. Table grid localization is handled automatically by the platform.
Set the language in your container application. FlowX.AI will automatically configure table grid localization based on this setting (supports 34 languages including English, Romanian, German, French, Spanish, and 29 more).
For each supported language:
1. Navigate to **CMS** → **Substitution Tags**
2. Add values for all 51 `sys_tm_*` tags for the target language
3. These control custom Task Management UI elements:
* Task actions (assign, hold, unassign)
* Bulk operations (assign all to me, unassign all, hold all, unhold all)
* History events (task created, user created this task, started process instance with id, started process instance on build, task ownership changed to, task moved to, task status changed to, task assigned to, task owner removed)
* Comments section (comments, write a comment...)
* User selection dialogs (select person, search users, search term validation)
* UI states (loading, nothing found)
* Data display (in, yes, no)
If you need columns beyond the default ones:
1. Define custom parameters in **Process Settings** → **Task Management**
2. Use substitution tags for column display names
3. These tags will also need CMS translations for each language
4. When you configure the column display name, use the substitution tag for the column name( it is called using "@@" prefix)
Verify that Task Management is properly localized:
**Table Grid Elements (Automatic - No action needed)**
* Table filters and operators should display in the container app language
* Sorting options, pagination, and data formatting are automatically localized
**FlowX Custom Elements (Verify CMS configuration)**
* Task action buttons (assign, unassign, hold, execute)
* Bulk operation buttons (assign all to me, unassign all, hold all)
* Task history timeline and status values
* Comments section and user assignment dialogs
**Simple Implementation**: You only configure CMS substitution tags. Table grid localization happens automatically based on your container app language.
## Localization best practices
### 1. Maintain consistency
Ensure translation consistency across:
* CMS substitution tags
* Custom column display names
### 2. Test date and number formatting
The table grid handles date and number formatting automatically based on locale:
```javascript theme={"system"}
// English (en-US)
- Date: MM/DD/YYYY
- Number: 1,234.56
- Currency: $1,234.56
// Romanian (ro-RO)
- Date: DD.MM.YYYY
- Number: 1.234,56
- Currency: 1.234,56 RON
// German (de-DE)
- Date: DD.MM.YYYY
- Number: 1.234,56
- Currency: 1.234,56 €
```
### 3. Handle dynamic content
For history events and comments that include dynamic values (user names, dates, IDs), use the variable placeholders:
```javascript theme={"system"}
// In CMS, use placeholders
sys_tm_user_created_this_task: "${user} created this task"
sys_tm_task_assigned_to: "Task assigned to ${user}"
// The system will replace ${user} with actual usernames at runtime
```
### 4. Plan for RTL languages
For RTL languages like Arabic and Hebrew:
* The table grid automatically handles RTL layouts
* Ensure custom UI elements also support RTL
* Test text alignment and icon positions
## Localization by component
### Task list view
| Component | Localized By | Configuration Required |
| ------------------------ | ------------ | ---------------------- |
| Column headers (default) | FlowX Tags | CMS translation |
| Column headers (custom) | FlowX Tags | CMS translation |
| Filter operators | Table Grid | Automatic |
| Sort options | Table Grid | Automatic |
| Pagination controls | Table Grid | Automatic |
| Search placeholder | FlowX Tags | CMS translation |
| Status values | FlowX Tags | CMS translation |
| "No data" message | Table Grid | Automatic |
### Task details panel
| Component | Localized By | Configuration Required |
| ----------------- | ------------ | ---------------------- |
| Action buttons | FlowX Tags | CMS translation |
| Section titles | FlowX Tags | CMS translation |
| History timeline | FlowX Tags | CMS translation |
| Comment input | FlowX Tags | CMS translation |
| User selector | FlowX Tags | CMS translation |
| Date/time display | Table Grid | Automatic |
### Bulk operations
| Component | Localized By | Configuration Required |
| ---------------------- | ------------ | ---------------------- |
| Bulk action buttons | FlowX Tags | CMS translation |
| Confirmation dialogs | FlowX Tags | CMS translation |
| Success/error messages | FlowX Tags | CMS translation |
## Troubleshooting
**Problem**: Table filters, menus, and pagination still display in English.
**Solutions**:
1. Verify that the **container app language** is set correctly - table grid localization is automatic based on this setting
2. Check that your container app is properly configured with language settings
3. Clear browser cache and refresh the application
4. Contact support if the issue persists - table grid localization is handled by the platform
**Problem**: Task actions, history, or comments display in English.
**Solutions**:
1. Verify all 51 `sys_tm_*` tags are configured in CMS
2. Check that translations exist for the current user's language
3. Ensure CMS language codes match your application's language selection
4. Verify substitution tag syntax is correct (no typos)
**Problem**: Date and number formats don't match the selected language.
**Solutions**:
1. Verify container app language is set correctly - the table grid automatically formats dates and numbers based on this
2. Check browser locale settings as they may override application settings
3. Clear browser cache and refresh
**Problem**: Some elements in one language, others in another.
**Solutions**:
1. This indicates incomplete CMS configuration - likely missing FlowX substitution tags
2. Verify all 51 `sys_tm_*` tags are translated in CMS for the target language
3. Check container app language is set correctly (table grid elements should translate automatically)
4. Use browser dev tools to identify which specific elements are untranslated
**Problem**: Custom columns display original names instead of translations.
**Solutions**:
1. Ensure custom column display names use substitution tags
2. Verify those substitution tags are configured in CMS for all languages
3. Check that column configuration points to correct substitution tag keys
## Example: complete Romanian localization
Here's an example of configuring Task Management for Romanian language:
Configure your container application to use Romanian language. FlowX.AI will automatically translate all table grid elements:
* "Search..." → "Căutare..."
* "Filter..." → "Filtrare..."
* "Equals" → "Egal cu"
* "Contains" → "Conține"
* "Next Page" → "Pagina următoare"
* And more keys automatically
**No manual configuration needed** - table grid localization is handled by the platform.
In CMS, add translations for all 51 tags:
```json theme={"system"}
{
"sys_tm_search": "Căutare",
"sys_tm_title": "Titlu",
"sys_tm_stage": "Etapă",
"sys_tm_assignee": "Asignat",
"sys_tm_status": "Status",
"sys_tm_priority": "Prioritate",
"sys_tm_last_updated": "Ultima actualizare",
"sys_tm_created": "Creat",
"sys_tm_started": "Început",
"sys_tm_finished": "Finalizat",
"sys_tm_assign_to": "Atribuie către…",
"sys_tm_unassign": "Anulează atribuirea",
"sys_tm_comments": "Comentarii",
"sys_tm_history": "Istoric",
// ... add all 51 tags
}
```
Test all areas to confirm:
* ✅ Table filters show Romanian operators (automatic)
* ✅ Pagination displays Romanian text (automatic)
* ✅ Task actions show Romanian labels (from CMS)
* ✅ History events display in Romanian (from CMS)
* ✅ Comments section uses Romanian labels (from CMS)
* ✅ Dates format as DD.MM.YYYY (automatic)
* ✅ Numbers use European formatting (1.234,56) (automatic)
**Summary**: For Romanian localization, you only added 51 CMS translations. All table grid elements (filters, pagination, date/number formatting) were automatically localized by the platform.
## Additional resources
Learn about Task Management features and configuration
Configure substitution tags in Content Management System
Task Management localization in FlowX.AI 5.1.1 LTS
Task Management localization in FlowX.AI 5.2.0 Tech Preview
# Task management
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/task-management/task-management-overview
Task Management in FlowX.AI is a core functionality that allows users to create, configure, and manage tasks within the platform, providing a structured way to handle work processes. It enables the definition of tasks based on business processes, offers tools for allocating, tracking, and managing tasks across various roles and departments, and supports customization through views, filters, and rules.

Task Management also includes capabilities for user roles, customizable tables, and integration with the project through both low-code and full-code approaches, ensuring flexibility for various use cases.
## Key features
* **Views**: Configurable interfaces to display task-related data based on process definitions.
* **Stages**: used to monitor the progression of tasks within a process by identifying where it may have stalled. This functionality can be used for teams but also for various business stages: onboarding, verification, and validation processes.
* **Allocation Rules**: Facilitate the equal distribution of tasks among users with permissions in a specific swimlane.
* **Localization** (Available in 5.1.1+): Comprehensive multi-language support with 34+ languages. Configure 51 FlowX substitution tags in CMS while table grid localization happens automatically. See [**Task Management Localization**](./task-management-localization) for details.
## Task Management Views
Views offer a flexible way to tailor task data display according to business needs. By configuring views, users can create structured, customized interfaces that help specific roles, departments, or use cases access relevant data effectively.
Example of custom view:

### All tasks
In the All Tasks section, you can view all tasks generated from any process definition marked as "to be used in task manager" within a project. This provides a centralized view of all relevant tasks, as long as you have the appropriate permissions.

It provides an interactive visualization, with built-in filtering functionalities for refined data display.
Dataset Config and Table Config options are not accessible in the All Tasks view.
### Creating a view
In the Views section, you can create a new view by selecting a name and choosing a process definition. The process definition is crucial because it determines which keys you can access when configuring the view.
To set up a view, navigate to the Views section in the Task Management interface:
1. Click **Add View**.
2. Enter a **Name** for the view.
3. **Choose a Process Definition**: This will link the view's configuration to a specific process and its associated keys.
Once a view is created for a process (e.g., Process X), it cannot be reassigned to another process. This ensures consistent data structuring based on the selected process definition.
Upon creating a view, you are automatically redirected to configure its parameters.

The Task Management default view contains four primary columns, with two additional default columns that can be added.

You also have the option to add custom parameters to the table, with no limit on the number of columns.
**Columns explained**:
* **Stage**: Indicates where the process halted, providing a clear view of its current state.
* **Assignee**: Displays the individual to whom the task is assigned.
* **Priority**: Reflects the urgency level of the task.
* **Last Updated**: Shows the timestamp of the most recent action taken on the task.
* **Title**: Displays the designated name of the task, which can be customized by using Business Rules.
* **Status**: Represents the current state of a Token, such as 'Started' or 'Finished.'
* **Custom parameters**: User-defined keys within the process settings, which become available only after their configuration is complete.
### Customer parameters and display names
### Display names
You can rename default and custom parameters to make them contextually relevant for various business needs. For example:
* Rename an address field to clarify if it refers to "Residence" or "Issuing Location."

* Use Substitution Tags for dynamic display names.
Renaming a parameter's Display Name will only change how it's shown in the interface, without altering the actual data model. The rename option is also available for default parameters (not just custom parameters). Changing the Display Name also allows the use of Substitution Tags.
For multi-language support, configure substitution tags in CMS for each language. See [**Task Management Localization**](./task-management-localization) for complete localization setup.
### Custom Parameters in Task Management
Custom parameters in Task Management provide a way to tailor task displays and ensure that task data aligns with specific business needs and contexts.
**Key setup and configuration**
1. **Adding Custom Parameters**:
* In **Process Settings** → **Task Management**, you can define the custom keys that will be indexed and made available for tasks.

* Each custom parameter can be renamed to suit different business contexts, ensuring clarity in cases where parameters may have multiple meanings.
Ensure that the custom key exists in the **Data Model** before it can be mapped in Task Management.
If the **attribute type** of a custom key is modified after it has been indexed, the key must be re-indexed in the **Task Management** section. This re-indexing step is crucial to ensure that Task Management reflects the updated attribute type correctly.

For data from custom parameters to flow correctly, ensure that **Forms to Validate** is set on the **UI Action button** in your UI for the corresponding process. This configuration is necessary for custom parameters to be validated and included in Task Management.
2. **Labeling Custom Parameters**:
* When adding a custom parameter, use the rename option to assign it a label relevant to the process context (as demonstrated in the example [**above**](#display-names)).
* This allows parameters to remain flexible for different roles or departments, adapting to each use case seamlessly.
3. **Enabling Task Management Integration**:
* To ensure that data flows correctly into Task Management, enable the **Use process in task management** toggle in **Process Settings** within your **project** in **FlowX Designer**.
* Some actions may be restricted based on user roles and access rights, so confirm that your role allows necessary access.
4. **Configuring Node-Specific Updates**:
* To enable Task Manager to send targeted updates from specific parts of a process:
* In **FlowX Designer**, open the relevant **project** and then the desired **process definition** and click **Edit**.
* Select the node(s) where updates should be triggered and enable the **Update task management?** switch.
* You can configure this action for multiple nodes, allowing flexibility in tracking and updating based on process flow.

Activating the **Use process in task management** flag at both the process settings level and node level is essential for ensuring data consistency and visibility in Task Management.
### Table config and Dataset config in Task Management
You can use **Table Config** and **Dataset Config** to configure and filter task data effectively. These configurations help create a customized and user-friendly interface for different roles, departments, or organizational needs.

#### Table config
**Table Config** is used to define the structure and content of the Task Management table view. Here, you can configure the columns displayed in the table and set up default sorting options.
1. **Configuring the Table Columns**:
* **Default Columns**: By default, the table includes the following columns: **Stage**, **Assignee**, **Priority**, and **Last Updated**.
* You can add additional columns, such as **Title**, **Status**, and **Custom Parameters**. Custom parameters can be chosen from the keys configured in **Process Settings** → **Task Management**.
2. **Setting Default Sorting**:
* You can select one column for **default sorting** in ascending or descending order. This configuration helps prioritize how data is initially displayed, often based on “Last Updated” or other relevant fields.
* If no specific sorting rule is configured, the table will automatically apply sorting based on the **Last Updated** column.

#### Dataset config
**Dataset Config** is used to filter and refine the data displayed in Task Management views. This helps create targeted views based on specific needs, such as differentiating data for front office vs. back office or specific roles like managers and operators.
1. **Adding Filters**:
* You can apply filters on the keys brought into the **Dataset Config** to customize the data shown. Filters can be applied based on various data types, such as enums, strings, numbers, dates, and booleans.
2. **Filtering Options by Data Type**:
* **Enums**: Can be filtered using the `In` operator. Only parent enums are available for mapping in Task Management (ensure enums are mapped in the data model beforehand).
Before you can map enums in Task Management, they must be configured in the Data Model. Only parent enums can be mapped.
If any changes are made to the Data Model after the keys have been configured and indexed in Task Management, these changes will not be automatically reflected. You must re-add and re-index the keys in the process settings to ensure that the updated information is indexed correctly.
### View filter operators reference
The following table provides a comprehensive reference of all available view filter operators and their compatible data types:
| Filter Operator | Compatible Data Types | Description |
| ------------------------- | ------------------------------------------------------------------------ | --------------------------------------------------------------------- |
| **Equals** | STRING, BOOLEAN, DATE\_TIME, ZONED\_DATE\_TIME, INTEGER, FLOAT, CURRENCY | Matches values that are exactly equal to the specified value |
| **Not Equals** | STRING, DATE\_TIME, ZONED\_DATE\_TIME | Matches values that are not equal to the specified value |
| **In** | STRING, ENUM | Matches values that are contained within a specified list |
| **Greater Than** | DATE\_TIME, ZONED\_DATE\_TIME, INTEGER, FLOAT, CURRENCY | Matches values that are greater than the specified value |
| **Less Than** | DATE\_TIME, ZONED\_DATE\_TIME, INTEGER, FLOAT, CURRENCY | Matches values that are less than the specified value |
| **Greater Than or Equal** | DATE\_TIME, ZONED\_DATE\_TIME, INTEGER, FLOAT, CURRENCY | Matches values that are greater than or equal to the specified value |
| **Less Than or Equal** | DATE\_TIME, ZONED\_DATE\_TIME, INTEGER, FLOAT, CURRENCY | Matches values that are less than or equal to the specified value |
| **Range** | DATE\_TIME, ZONED\_DATE\_TIME, INTEGER, FLOAT, CURRENCY | Matches values within a specified range (between two values) |
| **Starts With** | STRING | Matches string values that begin with the specified text |
| **Ends With** | STRING | Matches string values that end with the specified text |
| **Contains** | STRING | Matches string values that contain the specified text anywhere within |
| **Not Contains** | STRING | Matches string values that do not contain the specified text |
#### Data type filter compatibility
**String filters:**
* `Equals`, `Not Equals`, `In`, `Starts With`, `Ends With`, `Contains`, `Not Contains`
**Numeric filters (INTEGER, FLOAT, CURRENCY):**
* `Equals`, `Greater Than`, `Less Than`, `Greater Than or Equal`, `Less Than or Equal`, `Range`
**Date filters (DATE\_TIME, ZONED\_DATE\_TIME):**
* `Equals`, `Not Equals`, `Greater Than`, `Less Than`, `Greater Than or Equal`, `Less Than or Equal`, `Range`
**Boolean filters:**
* `Equals`
**Enum filters:**
* `In`
When using range filters, you'll need to specify both a minimum and maximum value. For date ranges, ensure the date format matches your system's configured format.

3. **Role-Specific Configurations**:
* **Dataset Config** allows creating views tailored to specific audiences, such as different departments or roles within an organization. However, note that filters in Dataset Config do not override user permissions on task visibility.
Example with filter applied a number attribute:
### Managing data model changes
While creating a view, you may want to modify the **data model**. It's important to note that changes to the **data model** do not directly impact the views. Views are tied to the process definition, not the data model. Therefore, if you make changes to the data model, you do not need to create a new view unless the changes also impact the underlying process.
### Task details
The **Task Details** tab within **Task Manager** provides key process information, including:
* **Priority**: Enables task prioritization.
* **Status**: The current process status (in our example, `STARTED`)
* **Stage**: Specific stages during process execution.
* **Comments**: User comments.
* **History**: Information such as task creation, creator, and status changes.
* **Last Updated**: Displays the most recent timestamp of any changes made to a task.
* **View Application**: Provides direct access to the container application URL where the FlowX.AI process related to a specific task is running.

**Accessing Task details in Task Management**
To access the **Task Details** of a specific task in a Task Management view, follow these steps:
1. **Navigate to the Task Management Interface**:
* Open the Task Management section within the project and select the desired **View** that contains the list of tasks.
2. **Locate the Task**:
* In the selected view (e.g., All Tasks, Custom View), find the task you want to inspect. Use filters and sorting options if necessary to locate the task more efficiently.
3. **Open Task Details**:
* Click on the task or select the **Details** option (often represented by an icon or “Details” link) associated with the task entry.
* This action will open the **Task Details** panel, which provides an in-depth view of information specific to that task.
Please note that specific roles must be defined in a process to utilize all the task management features. For configuration details, see [**Configuring Access Roles for Task Manager**](../../../../setup-guides/plugins-access-rights/configuring-access-rights-for-task-management).
## Process status updates
Task Manager displays various statuses based on process state:
| Status | Definition |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Created** | This status is visible only if there is an issue with the process creation. If the process is error-free in its configuration, you will see the **Started** status instead. |
| **Started** | Indicates that the process is in progress and running. |
| **Finished** | The process has reached an end node and completed its execution. |
| **Failed** | Displayed when a [CronJob](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/) is enabled in the [FlowX Engine](../../core-components/flowx-engine). For example, if a CronJob is triggered but not completed on time, tasks move to the `FAILED` status. |
| **Expired** |
Displayed when expiryTime field is defined within the process definition. To set up an expiryTime function, follow these steps
Go to FlowX.AI Designer > Processes > Definitions.
Select a process and click the "⋮" button, then choose Settings.
Inside the General tab, you can edit the Expiry time field.
|
| **Aborted** | This status is available for processes that also contain subprocesses. When a subprocess is running (and the [token is moved backward](../../../flowx-designer/managing-a-project-flow/moving-a-token-backwards-in-a-process) to redo a series of previous actions) - the subprocess will be aborted. |
| **Dismissed** | Available for processes that contain subprocesses. It is displayed when a user stops a subprocess. |
| **On hold** | Freezes the process, blocking further actions. A superuser can trigger this status for clarification or unfreeze. |
| **Terminated** | A request is sent via Kafka to terminate a process instance, ending all active tokens in the current process or subprocesses. |
## Swimlanes and Stages updates
Task Manager also tracks swimlane and stage changes:
### Swimlanes updates
| Status | Definition |
| ------------------ | ------------------------------------ |
| **Swimlane Enter** | Marks token entering a new swimlane. |
| **Swimlane Exit** | Indicates token exiting a swimlane. |
### Stages updates
| Status | Definition |
| --------------- | --------------------------------- |
| **Stage Enter** | Marks token entering a new stage. |
| **Stage Exit** | Indicates token exiting a stage. |
## Using the plugin
The Task Manager plugin offers a range of features tailored to different roles, including:
* [Swimlane permissions for Task Management](#swmlane-permissions-for-task-management)
* [Assigning and unassigning Tasks](#task-assignment-and-reassignment)
* [Hold/unhold tasks](#hold/unhold-tasks)
* [Adding comments](#adding-comments)
* [Viewing the application](#viewing-the-application)
* [Bulk updates (via Kafka)](#bulk-updates)
### Swimlane permissions for Task Management
To perform specific actions within Task Management at process level, you must configure swimlane permissions at the process settings level. Each swimlane (e.g., BackOffice, FrontOffice, Manager) should be assigned appropriate roles and permissions based on the responsibilities and access needs of each user group.

**Example permissions configuration**
Below are example configurations for swimlane permissions based on roles commonly used in a loan application approval process:
1. **BackOffice Swimlane**:
* Role: `FLOWX_BACKOFFICE`
* Permissions:
* **Unhold**: Allows the user to resume tasks that have been put on hold.
* **Execute**: Enables the user to perform task actions.
* **Self Assign**: Permits users to assign tasks to themselves.
* **View**: Grants viewing rights for tasks.
* **Hold**: Allows tasks to be temporarily paused.
2. **Manager (Supervisor) Swimlane**:
* Role: `FLOWX_MANAGER`
* Permissions:
* **Unhold**: Allows the user to resume tasks that have been put on hold.
* **Execute**: Enables the user to perform task actions.
* **Self Assign**: Permits users to assign tasks to themselves.
* **View**: Grants viewing rights for tasks.
* **Hold**: Allows tasks to be temporarily paused.
These permissions can be customized depending on each use case and organizational needs. Ensure that permissions are aligned with the roles' responsibilities within the workflow.
### Task assignment and reassignment
Consider this scenario: you're the HR manager overseeing the onboarding process for new employees. In order to streamline this operation, you've opted to leverage the task manager plugin. This process consists of two key phases: the Initiation Stage and the Account Setup Stage, each requiring a designated team member.
The Initiation Stage has successfully concluded, marking the transition to the Account Setup Stage. At this juncture, it's essential to reassign the task, originally assigned to John Doe, to Jane Doe, a valuable member of the backoffice team.
### Hold/unhold tasks
As a project manager overseeing various ongoing projects, you may need to temporarily pause one due to unforeseen circumstances. To manage this, you use the "On Hold" status.

### Adding comments
When handling on-hold projects, document the reasons, inform the team, and plan for resumption. This pause helps address issues and ensures a smoother project flow upon resuming. Never forget to add comments:

### Viewing the application

Container App URL represents an URL or a configuration parameter used to redirect users directly to a specific FlowX process instance.

#### Process settings level
In the Process Definition settings, navigate to the **Task Management** tab and locate the **Container App URL** field. Here, paste the container application URL where the process is loaded, following this format:
```
{container app url}/process
```
**Example**:


You can also use a predefined generic parameter as the URL: `${genericParameter}`.


#### Process data level
If task.baseUrl is specified in the process parameters, it will be sent to the Task Manager to update the tasks accordingly.
```java theme={"system"}
output.put("task", {"baseUrl": "https://your_base_url"});
```

The `baseURL` set in the process data (business rules) will override the `baseURL` set in the process definition settings.
## Bulk updates
Send bulk update requests via Kafka (using Process Engine) to perform multiple operations at once. Use the Kafka topic:
* `KAFKA_TOPIC_PROCESS_OPERATIONS_BULK_IN` (request sent from the Process Engine) to send bulk operations to `KAFKA_TOPIC_PROCESS_OPERATIONS_BULK_OUT` (Task Management) as an array, allowing multiple operations at once. More details [**here**](../../../../setup-guides/flowx-engine-setup-guide/engine-setup#topics-related-to-the-task-management-plugin).
Example of a bulk request:
```json theme={"system"}
{
"operations": [
{
"operationType": "HOLD",
"taskId": "some task id",
"processInstanceUuid": "d3aabfd8-d041-4c62-892f-22d17923b223", // the id of the process instance
"swimlaneName": "Default", //name of the swimlane
"owner": null,
"author": "john.doe@flowx.ai",
"requestID": "1234567891"
},
{
"operationType": "HOLD",
"taskId": "some task id",
"processInstanceUuid": "d3aabfd8-d041-4c62-892f-22d17923b223",
"swimlaneName": "Default", //name of the swimlane
"owner": null,
"author": "jonh.doe@flowx.ai",
"requestID": "1234567890"
}
]
}
```
For more information on bulk updates configuration, see FlowX Engine setup:
## Updating Task Manager metadata through Business Rules
You can dynamically update task metadata (title and priority) during process execution using Business Rules. This allows you to customize how tasks are displayed and prioritized in the Task Manager based on process data.
### Updating task title and priority
Here's how to update both the title and priority:
```javascript theme={"system"}
// Define your task title
taskTitle = "SME Branch Lending";
taskPriority = 1;
// Update the task title
output.put("task", {
"title": taskTitle,
"priority": taskPriority
});
```
### Setting dynamic value based on business logic
You can set priority dynamically based on business conditions:
```javascript theme={"system"}
// Get client data and loan amount
const clientDataSection = input.clientDataSection;
const loanAmount = input.loanAmount;
// Create a descriptive task title
const taskTitle = `Loan Application # ${clientDataSection.firstName} - ${clientDataSection.lastName}`;
// Set priority based on loan amount
let taskPriority;
if (loanAmount > 50000) {
taskPriority = 1; // HIGH priority for large loans
} else if (loanAmount > 10000) {
taskPriority = 2; // MEDIUM priority for medium loans
} else {
taskPriority = 3; // LOW priority for small loans
}
// Update both title and priority
output.put("task", {
"title": taskTitle,
"priority": taskPriority
});
```

You can make task titles more dynamic and informative by incorporating process data:
```javascript theme={"system"}
// Get relevant data from the process
const clientName = input.get("customer.fullName");
const applicationId = input.get("application.id");
const loanAmount = input.get("loan.amount");
// Create a descriptive task title
const taskTitle = `Loan Application #${applicationId} - ${clientName} - ${loanAmount}`;
// Update the task title
output.put("task", {
"title": taskTitle
});
```
## Full-Code implementation
For more customized UX, the **full-code** implementation using the **Task Management SDKs (React and Angular)** allows developers to build custom tables, cards, or any other UI elements based on the views and columns configured in Task Management.
## FAQs
A: The format changes will only affect how the data is displayed, not how it's indexed.
A: Yes, you can always switch to full-code and create custom views or tables using the Task Management SDK.
A: To use data from a subprocess, you must send it to the parent process first. Subprocess keys are currently displayed in the task manager once indexed through the parent process.
# Using allocation rules
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/task-management/using-allocation-rules
Allocation rules are meant to define when tasks should be auto-assigned to users when they reach a swimlane that has a specific role configured (for example, specific tasks will be assigned for the _front office_ and specific tasks for the _back office_ only).

Tasks will always be allocated depending on the users load (number of tasks) from current/other processes. If there are two or more users with the same number of assigned tasks, the task will be randomly assigned to one of them.
## Accessing allocation rules
To access the allocation rules, follow the next steps:
1. Open **FlowX Designer**.
2. Go to your **Application** and from the side menu, under **Task Management**, select the **Allocation rules** entry.
## Adding process and allocation rules
To add process and allocation rules, follow the next steps:
1. Click **Add process** button, in the top-right corner.

2. Select a [**process definition**](../../../building-blocks/process/process-definition) from the drop-down list.
3. Click **Add swimlane allocations button (+)** to add allocations.

If there are no users with execute rights in the swimlane you want to add (`hasExecute: false`), the following error message will be displayed:

4. **Option 1**: Allocate all users with `execute rights`.

5. **Option 2**: Allocate only users you choose from the drop-down list. You can use the search function to filter users by name.

6. Click **Save**.
Users with out-of-office status will be skipped by automatic allocation. More information about out-of-office feature, [here](using-out-of-office-records).
## Editing allocation rules
To edit allocation rules, follow the next steps:
1. Click **Edit** button.

2. Change the allocation method.

3. Click **Save**.
### Viewing allocation rules
The allocation rules list displays all the configured swimlanes grouped by process:
1. **Process** - the process definition name where the swimlanes were configured
2. **Swimlane** - the name of the swimlane
3. **Allocation** - applied allocation rules
4. **Edited at** - the last time when an allocation was edited
5. **Edited by** - the user who edited/created the allocation rules
## Exporting/importing process allocation rules
To copy process allocation rules and move them between different environments, you can use the export/import feature.
You can export process allocation rules as JSON files directly from the allocation rules list:


## Related resources
Learn about Task Management features and configuration
Localize Task Management UI in 34+ languages
Manage user availability for task allocation
# Using out of office records
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/task-management/using-out-of-office-records
The Out-of-office feature allows you to register users availability to perform a task. It can be allocated manually or automatically.

Users with out-of-office status are excluded from the candidates for automatic task allocation list during the out-of-office period. More information about allocation rules, [here](./using-allocation-rules).
## Accessing out-of-office records
To add out-of-office records, follow the next steps:
1. Open **FlowX Designer**.
2. From the side menu, under **Task Management,** select the **Out office entry**.

## Adding out-of-office records
To add out-of-office records, follow the next steps:
1. Click **Add out-of-office** button, in the top-right corner.
2. Fill in the following mandatory details:
* Assignee - user single select
* Start Date (:exclamation:cannot be earlier than tomorrow)
* End Date (:exclamation:cannot be earlier than tomorrow)

3. Click **Save**.
## Editing out-of-office records
To edit out-of-office records, follow the next steps:
1. Click **Edit** button.
2. Modify the dates (:exclamation:cannot be earlier than tomorrow).
3. Click **Save**.

## Deleting out-of-office records
To delete out-of-office records, follow the next steps:
1. From the **out-of-office list**, select a **record**.
2. Click **Delete** button. A pop-up message will be displayed: *"By deleting this out-of-office record, the user will become eligible to receive tasks in the selected period. Do you want to proceed?"*

If you choose to delete an out-of-office record, the user is eligible to receive tasks allocation during the mentioned period. More information about automatic task allocation, [here](./using-allocation-rules).
3. Click **Yes, proceed** if you want to delete the record, click **Cancel** if you want to abort the deletion.
If the out-of-office period contains days selected in the past, the user cannot delete the record, the following message is displayed: *“You can’t delete this record because it already affected allocations in the past. Try to shorten the period, if it didn’t end.”*

## Viewing out-of-office records
The out-of-office records list contains the following elements:
1. **User** - firstName, lastName, userName
2. **Start Date** - the date when the out-of-office period will be effective
3. **End Date** - the date when the out-of-office period will end
4. **Edited at** - the last time when an out-of-office record was edited
5. **Edited by** - the user who edited/created the out-of-office record

The list is sorted in reverse chronological order by "edited at" `dateTime` (newest added on top).
## Related resources
Learn about Task Management features and configuration
Localize Task Management UI in 34+ languages
Configure automatic task allocation rules
# Using stages
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/core-extensions/task-management/using-stages
You can define specific stages during the execution of a process. Stages are configured on each node and they will be used to trigger an event when passing from one stage to another.
## Creating a new stage
To create a new stage, follow the next steps:
1. Open **FlowX Designer**.
2. Go to Task Manager and select **Stages**.
3. Click **New Stage.**
4. Fill in the required details.

## Assigning a node to a stage
To assign a node to a stage, follow the next steps:
1. Open **FlowX Designer** and then select your **process**.
2. Choose the node you want to assign and select the **Node Config** tab.
3. Scroll down until you find the **Stage** field and click the dropdown button.
4. Choose the stage you want to assign.

## Related resources
Learn about Task Management features and configuration
Localize stage names and Task Management UI in 34+ languages
# null
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/integrations/building-a-connector
Connectors are the vital gateway to enhancing FlowX.AI's capabilities. They seamlessly integrate external systems, introducing new functionalities by operating as independently deployable, self-contained microservices.
## Connector essentials
At its core, a connector acts as an anti-corruption layer. It manages interactions with external systems and crucial data transformations for integrations.

## Key functions
Connectors act as lightweight business logic layers, performing essential tasks:
1. **Data Transformation**: Ensure compatibility between different data formats, like date formats, value lists, and units.
2. **Information Enrichment:** Add non-critical integration information like flags and tracing GUIDs.
## Creating a connector
1. **Create a Kafka Consumer:** Follow [**this guide**](./creating-a-kafka-consumer) to configure a Kafka consumer for your Connector.
2. **Create a Kafka Producer:** Refer to [**this guide**](./creating-a-kafka-producer) for instructions on setting up a Kafka producer.
Adaptable Kafka settings can yield advantageous event-driven communication patterns. Fine-tuning partition counts and consumers based on load testing is crucial for optimal performance.
### Design considerations
Efficient Connector design within an event-driven architecture demands:
* Load balancing solutions for varying communication types between the Connector and legacy systems.
* Custom implementations for request load balancing, Connector scaling, and more.
Incorporate all received Kafka headers in responses to ensure seamless communication with the FlowX Engine.
### Connector configuration sample
Here's a basic setup example for a connector:
* Configurations and examples for Kafka listeners and message senders.
* **OPTIONAL**: Activation examples for custom health checks.
[Sample available here](https://github.com/flowx-ai/quickstart-connector/tree/feature/easy-start)
Follow these steps and check the provided code snippets to effectively implement your custom FLOWX connector:
1. **Name Your Connector**: Choose a meaningful name for your connector service in the configuration file (`quickstart-connector/src/main/resources/config/application.yml`):
```yaml theme={"system"}
spring:
application:
name: easy-connector-name # TODO 1. Choose a meaningful name for your connector service.
jackson:
serialization:
write_dates_as_timestamps: false
fail-on-empty-beans: false
```
2. **Select Listening Topic:** Decide the primary topic for your connector to listen on ( you can do this at the following path → `quickstart-connector/src/main/resources/config/application-kafka.yml`):
If the connector needs to listen to multiple topics, ensure you add settings and configure a separate thread pool executor for each needed topic (refer to `KafkaConfiguration`, you can find it at `quickstart-connector/src/main/java/ai/flowx/quickstart/connector/config/KafkaConfiguration.java`).
3. **Define Reply Topic**: Determine the reply topic, aligning with the Engine's topic pattern.
4. **Adjust Consumer Threads**: Modify consumer thread counts to match partition numbers.
```yaml theme={"system"}
kafka:
consumer.threads: 3 # TODO 4. Adjust number of consumer threads. Make sure number of instances * number of threads = number of partitions per topic.
auth-exception-retry-interval: 10
topic:
in: ai.flowx.easy-connector.in # TODO 2. Decide what topic should the connector listen on.
out: ai.flowx.easy-connector.out # TODO 3. Decide what topic should the connector reply on (this topic name must match the topic pattern the Engine listens on).
```
5. **Define Incoming Data Format (DTO)**: Specify the structure for incoming and outgoing data using DTOs. This can be found at the path: `quickstart-connector/src/main/java/ai/flowx/quickstart/connector/dto/KafkaRequestMessageDTO.java`.
```java theme={"system"}
//Example for incoming DTO Format
package ai.flowx.quickstart.connector.dto;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class KafkaRequestMessageDTO { // TODO 5. Define incoming DTO format.
private String Id;
}
```
6. **Define Outgoing Data Format (DTO)**: Specify the structure for outgoing data at the following path → `quickstart-connector/src/main/java/ai/flowx/quickstart/connector/dto/KafkaResponseMessageDTO.java`.
```java theme={"system"}
// Example for Outgoing DTO Format
package ai.flowx.quickstart.connector.dto;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
@Builder
public class KafkaResponseMessageDTO implements BaseApiResponseDTO { // TODO 6. Define outgoing DTO format.
private String name;
private String errorMessage;
}
```
7. **Implement Business Logic**: Develop logic for handling messages from the Engine and generating replies. Ensure to include the process instance UUID as a Kafka message key.
Optional Configuration Steps:
* **Health Checks:** Enable health checks for all utilized services in your setup.
```yaml theme={"system"}
management: # TODO optional: enable health check for all the services you use in case you add any
health:
kafka.enabled: false
```
Upon completion, your configuration files (`application.yaml` and `application-kafka.yaml`) should resemble the provided samples, adjusting settings according to your requirements:
```yaml theme={"system"}
logging:
level:
ROOT: INFO
ai.flowx.quickstart.connector: INFO
io.netty: INFO
reactor.netty: INFO
jdk.event.security: INFO
server:
port: 8080
spring:
application:
name: easy-connector-name
jackson:
serialization:
write_dates_as_timestamps: false
fail-on-empty-beans: false
management:
health:
kafka.enabled: false
spring.config.import: application-kafka.yml
logging.level.ROOT: DEBUG
logging.level.ai.flowx.quickstart.connector: DEBUG
```
And your Kafka configuration file (`application-kafka.yaml`) should look like this:
```yaml theme={"system"}
spring:
kafka:
bootstrap-servers: localhost:9092
security.protocol: "PLAINTEXT"
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
properties:
interceptor:
classes: io.opentracing.contrib.kafka.TracingProducerInterceptor
message:
max:
bytes: ${KAFKA_MESSAGE_MAX_BYTES:52428800} #50MB
max:
request:
size: ${KAFKA_MESSAGE_MAX_BYTES:52428800} #50MB
consumer:
group-id: kafka-connector-group
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
properties:
interceptor:
classes: io.opentracing.contrib.kafka.TracingConsumerInterceptor
kafka:
consumer.threads: 3
auth-exception-retry-interval: 10
topic:
in: ai.flowx.easy-connector.in
out: ai.flowx.easy-connector.out
spring:
kafka:
security.protocol: "SASL_PLAINTEXT"
properties:
sasl:
mechanism: "OAUTHBEARER"
jaas.config: "org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required oauth.client.id=\"${KAFKA_OAUTH_CLIENT_ID:kafka}\" oauth.client.secret=\"${KAFKA_OAUTH_CLIENT_SECRET:kafka-secret}\" oauth.token.endpoint.uri=\"${KAFKA_OAUTH_TOKEN_ENDPOINT_URI:kafka.auth.localhost}\" ;"
login.callback.handler.class: io.strimzi.kafka.oauth.client.JaasClientOauthLoginCallbackHandler
```
## Setting up the connector locally
For detailed setup instructions, refer to the Setting Up FlowX.AI Quickstart Connector Readme:
Prerequisites:
* a terminal to clone the GitHub repository
* a code editor and IDE
* JDK version 17
* the Docker Desktop app
* an internet browser
## Integrating a connector in FlowX.AI Designer
To integrate and utilize the connector within FlowX.AI Designer, follow these steps:
1. **Process Designer Configuration**: Utilize the designated communication nodes within the [Process Designer](../../building-blocks/process/process):
* [**Send Message Task**](../../building-blocks/node/message-send-received-task-node#message-send-task): Transmit a message to a topic monitored by the connector. Make sure you choose **Kafka Send Action** type.

* [**Receive Message Task**](../../building-blocks/node/message-send-received-task-node#message-receive-task): Await a message from the connector on a topic monitored by the engine.

2. **Connector Operations**: The connector identifies and processes the incoming message.
3. **Handling Response**: Upon receiving a response, the connector serializes and deposits the message onto the specified OUT topic.
4. **Engine Processing**: The engine detects the new message, captures the entire content, and stores it within its variables based on the configured variable settings.
You can check another example of a more complex connector by checking the following repository:
# Creating a Kafka consumer
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/integrations/creating-a-kafka-consumer
This guide focuses on creating a **Kafka** consumer using Spring Boot.
Here are some tips, including the required configurations and code samples, to help you implement a Kafka consumer in Java.
## Required dependencies
Ensure that you have the following dependencies in your project:
```xml theme={"system"}
org.springframework.kafkaspring-kafkaio.strimzikafka-oauth-client0.6.1org.apache.kafkakafka-clients2.5.1io.opentracing.contribopentracing-kafka-client0.1.13
```
## Configuration
Ensure that you have the following configuration in your `application.yml` or `application.properties` file:
```yaml theme={"system"}
spring:
kafka:
bootstrap-servers: localhost:9092
security.protocol: "PLAINTEXT"
consumer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
properties:
max:
partition:
fetch:
bytes: ${KAFKA_MESSAGE_MAX_BYTES:52428800} #50MB
kafka:
consumer:
group-id:
...
threads:
...
```
## Code sample for a Kafka Listener
Here's an example of a Kafka listener method:
```java theme={"system"}
@KafkaListener(topics = "TOPIC_NAME_HERE")
public void listen(ConsumerRecord record) throws JsonProcessingException {
SomeDTO request = objectMapper.readValue(record.value(), SomeDTO.class);
// process received DTO
// Make sure to replace *"TOPIC_NAME_HERE"* with the actual name of the Kafka topic you want to consume from. Additionally, ensure that you have the necessary serialization and deserialization logic based on your specific use case.
}
```
# Creating a Kafka producer
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/integrations/creating-a-kafka-producer
This guide focuses on creating a **Kafka** producer using Spring Boot.
Here are some tips, including the required configurations and code samples, to help you implement a Kafka producer in Java.
## Required dependencies
Ensure that you have the following dependencies in your project:
```xml theme={"system"}
org.springframework.kafkaspring-kafkaio.strimzikafka-oauth-client0.6.1org.apache.kafkakafka-clients2.5.1io.opentracing.contribopentracing-kafka-client0.1.13
```
## Configuration
Ensure that you have the following configuration in your `application.yml` or `application.properties` file:
```yaml theme={"system"}
spring:
kafka:
bootstrap-servers: localhost:9092
security.protocol: "PLAINTEXT"
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
properties:
message:
max:
bytes: ${KAFKA_MESSAGE_MAX_BYTES:52428800} #50MB
max:
request:
size: ${KAFKA_MESSAGE_MAX_BYTES:52428800} #50MB
```
## Code sample for a Kafka producer
Ensure that you have the necessary KafkaTemplate bean autowired in your producer class. The sendMessage method demonstrates how to send a message to a Kafka topic with the specified headers and payload. Make sure to include all the received Kafka headers in the response that is sent back to the **FlowX Engine**.
```java theme={"system"}
private final KafkaTemplate kafkaTemplate;
public void sendMessage(String topic, Headers headers, Object payload) {
ProducerRecord producerRecord = new ProducerRecord<>(topic, payload);
// make sure to send all the received headers back to the FlowX Engine
headers.forEach(header -> producerRecord.headers().add(header));
kafkaTemplate.send(producerRecord);
}
```
## Kafka headers
### Understanding Kafka headers in FlowX Integration
When integrating with FlowX Engine via Kafka, headers play a crucial role in message routing and processing. It's essential to preserve and include all received headers in responses back to the FlowX Engine.
**Need help finding identifier values?** Check out the [Finding Identifiers and Parameters](./finding-identifiers-and-parameters) guide to learn where to locate workspace IDs, application IDs, build IDs, process instance UUIDs, and other identifiers in FlowX Designer.
### Important headers
| Header | Purpose | Consequences If Missing |
| ----------------------------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| `fxContext` | Identifies the target process/subprocess in the hierarchy | Messages may be incorrectly routed or not processed |
| `Fx-AppId` | Identifies the application processing the message | Application context may be lost |
| `Fx-RootAppId` | Identifies the original application that initiated the process chain | Process origin tracking may be lost; important for complex process hierarchies |
| `Fx-BuildId` (deprecated since 5.0) | Contains the build identifier for versioning and traceability | Version-specific behaviors may be affected; debugging becomes more difficult |
| `Fx-Build-App-Version-Id` | Contains the application version identifier for data querying | Version-specific behaviors may be affected; data queries may fail |
| `Fx-WorkspaceId` | Identifies the workspace context for multi-tenant environments | Workspace isolation may be compromised; data queries may fail |
| `processInstanceId`/`processInstanceUuid` | Primary keys for message correlation | Message correlation may fail |
| `Fx-ProcessName` | Required for cross-process communication | "Start another process via Kafka" functionality may break |
### The fxContext header explained
The `fxContext` header is particularly important for routing messages in architectures with embedded processes and subprocesses:
* For kafka-receive nodes in the root process: `fxContext = "main"`
* For an embedded subprocess with nodeId=4: `fxContext = "main:4"`
* For an embedded sub-subprocess with nodeId=12: `fxContext = "main:4:12"`
This hierarchical format ensures messages are delivered to their intended recipients within the process structure.
### Understanding Fx-RootAppId
The `Fx-RootAppId` header is used to track the originating application throughout the entire process chain. This is particularly important when:
* Multiple applications are involved in a workflow
* Processes spawn subprocesses across different components
* You need to trace a complete transaction back to its originating application
Unlike `Fx-AppId` which may change as a message passes through different components, `Fx-RootAppId` preserves the original initiator's identity.
### Best Practices
1. **Preserve All Headers**: Always include all received Kafka headers in responses to the FlowX Engine.
```java theme={"system"}
headers.forEach(header -> producerRecord.headers().add(header));
```
# Finding identifiers and parameters
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/integrations/finding-identifiers-and-parameters
A comprehensive reference guide for locating identifiers, UUIDs, and parameters required for API calls, Kafka integrations, and external system connections.
When integrating with FlowX APIs, configuring Kafka producers, or connecting external systems, you'll need various identifiers and parameters. This guide shows you exactly where to find each one in the FlowX Designer interface.
**Quick tip**: Most UUIDs and identifiers in FlowX Designer can be copied by clicking the copy icon next to them or by right-clicking and selecting "Copy UUID" from the context menu.
## Common identifiers overview
Required for multi-tenant environments and data isolation
Identifies your project/application in API calls
References a specific deployed version of your application
Various identifiers for processes and their instances
## Workspace identifiers
### Workspace ID (Fx-WorkspaceId)
The workspace ID is used to identify the workspace context in multi-tenant environments. It's required in certain Kafka headers and API calls.
Navigate to **Organization Settings** from the main menu (available for organization admins and workspace admins).
Click on **Workspaces** in the left sidebar.
You'll see all workspaces listed. Each workspace card displays:
* Workspace name
* Workspace UUID (this is your **Workspace ID**)
Click the contextual menu (three dots) and then select "Copy UUID" to copy the workspace UUID or copy it directly from the workspace URL when you're inside a workspace:

```
https://your-domain.flowx.ai/workspace/{workspace-id}/projects
```
The workspace ID is also visible in your browser's address bar when navigating within a workspace.
**Default Workspace**: If you migrated from a pre-5.x version, your default workspace has the UUID: `00000000-0000-0000-0000-000000000001`
**Where it's used**:
* Kafka header: `Fx-WorkspaceId`
* API calls requiring workspace context
* Cross-workspace queries and data isolation
## Project identifiers
### Project ID (Fx-AppId, appId)
The project ID (also called application ID or app ID) identifies your project within FlowX. It's one of the most commonly required identifiers.
Go to your workspace and click on **Projects** in the main navigation.
Click on the project you're working with to open it.
The project ID can be found in multiple places:
**Option 1: From the URL**
```
https://your-domain.flowx.ai/workspace/{workspace-id}/projects/{project-id}/...
```
**Option 2: From Project Settings**
* Click the three dots to access the contextual menu
* Select "Copy UUID" to copy the project UUID

**Where it's used**:
* Kafka header: `Fx-AppId`
* API path parameter: `/app/{appId}/...`
* Process start requests
* Runtime API calls
### Root Application ID (Fx-RootAppId)
The root application ID tracks the originating application throughout process chains, especially when processes spawn subprocesses across different components.
In most cases, `Fx-RootAppId` will be the same as `Fx-AppId` unless you're dealing with complex multi-application workflows.
**Where it's used**:
* Kafka header: `Fx-RootAppId`
* Tracking process chains across multiple applications
* Subprocess communication
## Build identifiers
### Build ID (buildId)
The build ID is a unique identifier for a specific committed version of your application that's been deployed to runtime.
From your project, go to **Runtime → Builds**.
You'll see all your builds listed with:
* Build version number
* Commit status
* Creation date
**UI Limitation**: Currently, the build UUID is not displayed in the builds list, and there's no copy UUID button available. You can obtain the build ID through the [API](#obtaining-build-id-via-api) or from browser developer tools when viewing build details.
**Active Policy**: The build marked as "Active Policy" is the one currently running in production. This is typically the build you'll want to use for API calls.
**Where it's used**:
* API path parameter: `/build/{buildId}/...`
* Runtime endpoints used by renderers
* Version-specific API calls
#### Obtaining Build ID via API
You can retrieve the build ID by calling the builds API endpoint:
```bash theme={"system"}
GET /appmanager/api/app/{appId}/builds
```
The response includes all builds with their `buildId` values.
### Application Version ID (appVersionId, Fx-Build-App-Version-Id)
The application version ID (also called `appVersionId` or `applicationVersionId`) identifies a specific app version. Unlike `buildId`, this identifier is **not unique by itself** - it's only unique when combined with `workspaceId`.
**Key distinction**:
* **buildId**: Unique identifier for a committed build (globally unique)
* **appVersionId**: Identifier for an app version (unique only within a workspace when combined with `workspaceId`)
* **Kafka header `Fx-Build-App-Version-Id`** contains the `appVersionId`, NOT the `buildId`
**Where it's used**:
* API path parameter: `/app-version/{appVersionId}/...`
* Kafka header: `Fx-Build-App-Version-Id` (replaces deprecated `Fx-BuildId`)
* Internal Kafka communication between FlowX components
* Always used in combination with `workspaceId` for unique identification
**Technical note**: In API responses (e.g., `/api/app/{appId}/app-version/{appVersionId}`), you may see the app version ID duplicated in both the main response and within a `settings.applicationVersionId` field. This happens because the settings object represents a separate database table, and the view combines multiple tables without explicitly excluding the duplicate data.
**Deprecated Header**: `Fx-BuildId` is deprecated since FlowX 5.0. Use `Fx-Build-App-Version-Id` instead. Note that this header contains the `appVersionId`, despite the "Build" in the header name.
## Process identifiers
### Process Definition Name (processDefinitionName)
The process definition name is the human-readable name you assigned when creating the process.
From your project, go to **Definitions → Processes**.
The process name is displayed prominently for each process in the list.
You can copy the exact process name by:
* Selecting and copying the text directly
* Opening the process and copying from the process settings
Process names are case-sensitive and must match exactly when used in API calls or Kafka messages.
**Where it's used**:
* API path parameter: `/process-name/{processDefinitionName}/start`
* Kafka header: `Fx-ProcessName` (when starting a process via Kafka)
* Process configuration and queries
### Process Definition UUID
Process definitions have two types of UUIDs, each serving different purposes:
1. **Resource Definition ID** (`resourceDefinitionId`, `processDefinitionFlowxUuid`) - Permanent identifier
2. **Resource ID** (`resourceId`) - Version-specific identifier
**Critical distinction**:
* **`resourceDefinitionId`** (also known as `processDefinitionFlowxUuid`): Stays **constant across ALL app versions**. This is the logical identifier for the process.
* **`resourceId`**: Changes **with each app version** when the process is modified. This identifies a specific version of the process.
#### Finding Process Definition UUID (resourceDefinitionId)
The `resourceDefinitionId` is the permanent identifier that stays the same across all versions. This is what you typically need for process references and integrations.
Navigate to **Definitions → Processes** and click on your process to open it.
Click the **Settings** icon (gear icon) in the process editor toolbar.
The process UUID displayed in process settings is the `resourceDefinitionId`.
**UI Limitation**: Currently, there's no copy UUID button in the process list view. You need to open the process settings to access the UUID.
Alternatively, you can find it in the browser URL when editing a process:
```
https://your-domain.flowx.ai/.../processes/{process-uuid}/edit
```
**Where it's used**:
* Also referred to as `processDefinitionFlowxUuid` in some contexts
* Process references and linking
* Cross-version queries
* Most integration scenarios (unless you specifically need a version-specific identifier)
#### Finding Resource ID (version-specific)
The `resourceId` identifies a specific version of a process and changes with each app version.
**When you might need resourceId**: Typically, you won't need the version-specific `resourceId` unless you're working with internal APIs that specifically require it. Most integrations use `resourceDefinitionId` instead.
**Where it's used**:
* Version-specific API operations
* Internal queries that need to target a specific app version
* API responses (returned alongside `resourceDefinitionId`)
### Resource Definition ID (resourceDefinitionId)
The resource definition ID is a **persistent identifier** for a resource that **stays the same across all app versions**. It's used to track the evolution of a resource through different versions and to link resources together.
**Key difference from resourceId**:
* **resourceDefinitionId**: Permanent identifier that stays constant across versions. Use this to link resources together (e.g., a process using another process, a process using a workflow) and to track changes between different versions of the same resource.
* **resourceId**: Version-specific identifier that changes with each app version. Use this when you need to modify or reference a specific version of a resource.
**How to find it**: This ID is not directly visible in the FlowX Designer UI. It's returned in the response body when you make a GET request to fetch a specific resource by its resource ID.
The `resourceDefinitionId` is present in every resource request (GET, update, delete). The URL pattern follows:
```
/appmanager/api/resource/app/{appId}/app-version/{appVersionId}/rt/{resourceType}/ri/{resourceId}/...
```
**Examples by resource type**:
**Workflows**:
```bash theme={"system"}
GET /appmanager/api/resource/app/{appId}/app-version/{appVersionId}/rt/workflow/ri/{resourceId}/integration/api/workflows/getById
```
**Processes**:
```bash theme={"system"}
GET /appmanager/api/resource/app/{appId}/app-version/{appVersionId}/rt/process/ri/{resourceId}/...
```
The response includes the `resourceDefinitionId`:
```json theme={"system"}
{
"resourceId": "36ab1a35-fc4e-49ee-872d-b3551e3e33ce",
"resourceDefinitionId": "e96fb0fb-a710-44db-b3bd-1a57bc2cb3e8",
"applicationId": "fd44d9d9-b072-40fe-b12e-b7714105ba48",
"name": "My Resource",
...
}
```
You can also find the `resourceDefinitionId` in the response when fetching lists of resources:
**Get all workflows**:
```bash theme={"system"}
GET /appmanager/api/resource/app/{appId}/app-version/{appVersionId}/rt/workflow/integration/api/workflows/all
```
Each item in the response array will include its `resourceDefinitionId`.
1. Open FlowX Designer and navigate to your resource (process, workflow, etc.)
2. Open browser developer tools (F12)
3. Go to the **Network** tab
4. Load or refresh the resource
5. Find the GET request matching the pattern `/rt/{resourceType}/ri/{resourceId}/...`
6. Check the response body for the `resourceDefinitionId` field
The GET request is usually the first call made when entering the details of a resource.
**Where it's used**:
* **Linking resources**: When one resource references another (process calls another process, process uses a workflow, etc.)
* **Version tracking**: To track how a resource evolves across different app versions
* **Cross-version queries**: Finding all versions of the same logical resource
* **API responses**: Present in both individual resource requests and list endpoints
**When to use resourceDefinitionId vs resourceId**:
* Use `resourceDefinitionId` when you need to reference a resource logically, regardless of version
* Use `resourceId` when you need to work with a specific version of a resource (editing, viewing, deploying)
#### Understanding the relationship: A practical example
Let's say you have:
* **Process A** (Customer Onboarding)
* **Workflow B** (Document Verification)
**Scenario**: Process A needs to use Workflow B.
**Version 1.0 (Initial):**
```json theme={"system"}
{
"workflowB": {
"resourceId": "abc-123-v1",
"resourceDefinitionId": "workflow-doc-verify"
}
}
```
Process A references Workflow B using `resourceDefinitionId: "workflow-doc-verify"`
**Version 2.0 (After modifying Workflow B):**
```json theme={"system"}
{
"workflowB": {
"resourceId": "abc-456-v2", // ⬅️ Changed
"resourceDefinitionId": "workflow-doc-verify" // ⬅️ Stays the same
}
}
```
✅ **The link still works** because Process A uses `resourceDefinitionId`, which remains constant.
**Why this matters**:
* When you modify Workflow B and create a new app version, its `resourceId` changes from `abc-123-v1` to `abc-456-v2`
* But `resourceDefinitionId` stays `workflow-doc-verify`
* Process A doesn't need to be updated because it references the logical resource, not a specific version
* FlowX automatically resolves to the latest version of Workflow B in the active build
**When modifying resources**:
* Use `resourceId` in your API calls to edit/update/delete a specific version
* Use `resourceDefinitionId` to understand which logical resource is being modified
* Use `resourceDefinitionId` to track history: "Show me all versions of this workflow"
### Process Instance UUID (processInstanceUuid)
When you start a process, FlowX creates a process instance with its own unique identifier.
Navigate to **Runtime → Active Process → Process instances**.
You'll see a list of all running and completed process instances.
Click on a process instance to view its details, then click the **Process Status** icon.
At the top of the process status view, you'll see:
* **Active process instance**: The UUID of this specific process execution
* Click the copy icon to copy the UUID
**Where to find it programmatically**: Process instance UUIDs are returned in the response when you start a process via API. Store this value if you need to reference the instance later.
**Where it's used**:
* Kafka header: `processInstanceUuid`
* API calls to query or manipulate specific process instances
* Correlation in Kafka messages
* Audit log queries
### Process Instance ID (processInstanceId)
In addition to the UUID, each process instance has a numeric ID.
Open the process status (as described above for Process Instance UUID).
Scroll to the **Instance Metadata** section, which displays:
* `processInstanceId`: The numeric ID
* `processInstanceUuid`: The UUID
Both `processInstanceId` (numeric) and `processInstanceUuid` (UUID) identify the same process instance. Use the UUID for most integrations as it's globally unique.
**Where it's used**:
* Kafka header: `processInstanceId`
* Internal database queries
* Some legacy integrations
## Token identifiers
### Token ID
Tokens represent the current position in a process flow. Each token has an identifier.
Navigate to **Runtime → Active Process → Process instances** and open a process instance.
In the process status view, expand the **Tokens** section.
Each token displays:
* Token ID (numeric)
* Token state (ACTIVE, FINISHED, etc.)
* Current node position
**Where it's used**:
* Advanced process debugging
* Custom integrations that need to track token movement
* Internal FlowX Engine operations
## Context and correlation identifiers
### fxContext
The `fxContext` header is crucial for routing messages in architectures with embedded processes and subprocesses.
**fxContext structure**:
* Root process: `"main"`
* Embedded subprocess (nodeId=4): `"main:4"`
* Sub-subprocess (nodeId=12 inside subprocess 4): `"main:4:12"`
This value is automatically set by FlowX Engine when sending Kafka messages. You must preserve and return it unchanged in your responses.
**Where it's used**:
* Kafka header: `fxContext`
* Routing messages to specific subprocesses
* Message correlation in complex process hierarchies
## Authentication identifiers
### JWT Token
Most API calls and Kafka messages require authentication via JWT token.
**For Development and Testing Only**:
1. Log into FlowX Designer
2. Open browser developer tools (F12)
3. Go to the **Network** tab
4. Make any request in FlowX Designer
5. Click on the request and view headers
6. Find the `Authorization` header and copy the JWT token (the part after "Bearer ")
Tokens obtained this way are temporary and tied to your user session. They will expire quickly and should only be used for development and testing purposes.
**For Production Integrations**:
In production environments, external systems should authenticate using your configured Identity Provider (Keycloak or other OAuth2 provider) with appropriate user credentials or OAuth2 flows based on your security requirements.
Work with your Customer Success team or security administrator to set up proper authentication flows for your production integrations. The authentication method will depend on your specific use case and security policies.
**Security considerations**:
* **Never hardcode JWT tokens** in your code. Tokens expire and should be refreshed regularly.
* **Service accounts** (client credentials flow) have elevated privileges in FlowX and should be handled with extreme care.
* **For on-premise deployments**: Service account setup should be coordinated with your Customer Success team.
* **For cloud deployments**: Contact FlowX support to discuss proper authentication strategies for your integration needs.
**Where it's used**:
* HTTP header: `Authorization: Bearer {token}`
* Kafka header: `jwt` (for process starts via Kafka)
* All authenticated API calls
## Quick reference table
Here's a quick lookup table for common identifiers:
| Identifier | Also Known As | Format | Where to Find | Used In |
| ------------------------------ | ----------------------------------------------------------------- | ------ | --------------------------------------------------- | --------------------------- |
| Workspace ID | `Fx-WorkspaceId` | UUID | Organization Settings → Workspaces OR URL | Kafka headers, API calls |
| Application ID | `appId`, `Fx-AppId` | UUID | Project URL, Project Settings | API paths, Kafka headers |
| Root Application ID | `Fx-RootAppId` | UUID | Same as Application ID (in most cases) | Kafka headers |
| Build ID | `buildId` | UUID | API: `/api/app/{appId}/builds` | Runtime API paths |
| Application Version ID | `appVersionId`, `applicationVersionId`, `Fx-Build-App-Version-Id` | UUID | Runtime → Builds (not directly visible in UI) | API paths, Kafka headers |
| Process Definition Name | `processDefinitionName` | String | Definitions → Processes (process name) | API paths, Kafka headers |
| Process Definition UUID | `processDefinitionFlowxUuid`, `resourceDefinitionId` | UUID | Process Settings OR URL when editing | Process references, queries |
| Resource ID (version-specific) | `resourceId`, `rid` | UUID | API responses only | Version-specific API ops |
| Process Instance UUID | `processInstanceUuid` | UUID | Runtime → Process Instances → Process Status | Kafka headers, API calls |
| Process Instance ID | `processInstanceId` | Number | Runtime → Process Instances → Instance Metadata | Kafka headers |
| Token ID | N/A | Number | Process Status → Tokens section | Advanced debugging |
| fxContext | N/A | String | Automatically set by Engine (preserve in responses) | Kafka headers |
**Important distinctions**:
* **buildId** vs **appVersionId**:
* `buildId` is globally unique and identifies a specific committed build
* `appVersionId` is only unique when combined with `workspaceId`
* The Kafka header `Fx-Build-App-Version-Id` contains `appVersionId`, NOT `buildId`
* **resourceDefinitionId** vs **resourceId**:
* `resourceDefinitionId` (also known as `processDefinitionFlowxUuid`): Stays constant across ALL app versions
* `resourceId`: Changes with each app version when the process is modified
## Common integration scenarios
### Starting a process via HTTP API
Required identifiers:
* **appId**: Application ID (from project)
* **buildId**: Build ID (obtained via API: `GET /appmanager/api/app/{appId}/builds`)
* **processDefinitionName**: Process name (from Definitions → Processes)
* **JWT token**: From authentication
```bash theme={"system"}
curl -X POST "https://your-domain.flowx.ai/rtm/api/runtime/app/{appId}/build/{buildId}/process-name/{processDefinitionName}/start" \
-H "Authorization: Bearer {jwt-token}" \
-H "Content-Type: application/json" \
-H "flowx-platform: web" \
-d '{"key": "value"}'
```
**Note**: The `buildId` is not directly visible in the FlowX Designer UI. Use the API endpoint mentioned above to retrieve it, or work with your Customer Success team to identify the correct build ID for your environment.
### Starting a process via Kafka
Required Kafka headers:
* **Fx-AppId**: Application ID
* **Fx-ProcessName**: Process definition name
* **Fx-WorkspaceId**: Workspace ID (for multi-tenant setups)
* **jwt**: JWT token
```json theme={"system"}
{
"headers": {
"Fx-AppId": "dbe0ab87-539b-4015-962d-6e73226b9e58",
"Fx-ProcessName": "customer_onboarding",
"Fx-WorkspaceId": "00000000-0000-0000-0000-000000000001",
"jwt": "your-jwt-token"
},
"variables": {
"customerName": "John Doe"
}
}
```
### Responding to Kafka messages from FlowX
Required Kafka headers to preserve:
* **fxContext**: Process context (received from FlowX)
* **Fx-AppId**: Application ID
* **Fx-RootAppId**: Root application ID
* **Fx-Build-App-Version-Id**: Application version ID (contains `appVersionId`, used with `Fx-WorkspaceId` for unique identification)
* **Fx-WorkspaceId**: Workspace ID
* **processInstanceId**: Process instance numeric ID
* **processInstanceUuid**: Process instance UUID
```java theme={"system"}
public void sendMessage(String topic, Headers headers, Object payload) {
ProducerRecord producerRecord = new ProducerRecord<>(topic, payload);
// IMPORTANT: Preserve all received headers
headers.forEach(header -> producerRecord.headers().add(header));
kafkaTemplate.send(producerRecord);
}
```
**Critical**: Always include ALL received Kafka headers when responding to FlowX Engine. Missing headers can cause message routing failures or data isolation issues.
**Backward compatibility**: You may still see the deprecated `Fx-BuildId` header in some messages. FlowX reads both `Fx-Build-App-Version-Id` (preferred) and `Fx-BuildId` (legacy) for backward compatibility. Always preserve both headers if present.
## Troubleshooting
**Solution**: Make sure you have either **Organization Admin** or **Workspace Admin** permissions. Workspace IDs are visible in Organization Settings → Workspaces.
If you can't access Organization Settings, ask your organization admin to provide the workspace ID or grant you appropriate permissions.
**Solution**: Ensure you're using the correct identifier for your API endpoint:
1. **For `/build/{buildId}/...` endpoints**: You need the actual `buildId` which can be obtained via the API:
```bash theme={"system"}
GET /appmanager/api/app/{appId}/builds
```
2. **For `/app-version/{appVersionId}/...` endpoints**: Use the `appVersionId` (also referred to in the header as `Fx-Build-App-Version-Id`)
3. Go to **Runtime → Builds** and verify the build status is "COMMITTED"
4. Check if there's an **Active Policy** - this is usually the build you want to reference
5. Note that the build UUID is not currently displayed in the UI - use the API endpoint above to retrieve it
**Common issues**:
1. **Missing or incorrect headers**: Verify `Fx-AppId`, `Fx-ProcessName`, and `jwt` headers
2. **No active policy**: Check that the build is set as Active Policy in Runtime → Active Policy
3. **Authentication failure**: Ensure the JWT token is valid and not expired
4. **Process name mismatch**: Process names are case-sensitive - copy exact name from process list
5. **Payload too large**: Ensure your Kafka message payload is under 1MB
**Solution**: Check the `fxContext` header:
* For subprocesses, `fxContext` must follow the hierarchical format
* Example: `"main:4:12"` for a subprocess with nodeId=12 inside subprocess nodeId=4
* Always preserve the exact `fxContext` received from FlowX Engine
* Missing or incorrect `fxContext` causes messages to be delivered to the wrong process level
**Solution**:
1. Navigate to **Runtime → Active Process → Process instances**
2. Find your process instance by:
* Process definition name
* Start date/time
* Current status
3. Click to open process instance
4. Click **Process Status** icon
5. The UUID is shown at the top as "Active process instance"
If you can't find it, check:
* You're in the correct workspace
* You have the correct project selected
* The process might be in "Finished" status (use filters)
## Related documentation
Learn how to create Kafka producers and understand required headers
Explore all available API endpoints and their parameters
Understand workspace concepts and multi-tenant architecture
Learn different methods for initiating process instances
# FlowX Database
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/integrations/flowx-database
Store and access structured data between processes and applications
## What is FlowX Database?
FlowX Database (FlowX DB) is a persistence layer that allows you to store structured data independently of process instances. This enables you to:
* Share data between different process instances
* Store and retrieve data across multiple processes
* Create a persistent data store within the FlowX ecosystem
* Access structured data without directly interacting with external systems
FlowX Database is powered by the **nosql-db-runner** microservice, which provides MongoDB functionality within the FlowX ecosystem. This service supports both **native MongoDB** and **Azure Cosmos DB (MongoDB API)**, enabling you to choose the database backend that best fits your infrastructure needs while maintaining FlowX's workflow integration capabilities.
For more information about the **nosql-db-runner** service and CosmosDB considerations, see the [NoSQL DB Runner documentation](../../../setup-guides/nosql-db-runner).
## Key concepts
In the FlowX platform, Data Sources represent connections to different data repositories. With the introduction of FlowX Database, there are now two types of data sources available in the Integration Designer:
| Data Source Type | Description |
| ---------------- | -------------------------------------------------------------- |
| RESTful System | Traditional integration with external REST APIs |
| FlowX Database | Connection to the internal FlowX Database for data persistence |

Each FlowX Database data source represents a collection in the underlying MongoDB database.
Collections are containers for storing documents in FlowX Database. Each collection:
* Stores documents with similar structure
* Has a unique identifier
* Can be accessed from different processes
* Functions similarly to a database table, but with more flexibility
Collections are created and managed through the Data Sources section in the Integration Designer.
Operations define the actions you can perform on a collection. FlowX Database supports the full range of essential MongoDB operations:
| Operation | Description | MongoDB Docs |
| ------------ | --------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| `find` | Retrieve multiple documents based on criteria | [MongoDB find()](https://www.mongodb.com/docs/manual/reference/method/db.collection.find/) |
| `findOne` | Retrieve a single document | [MongoDB findOne()](https://www.mongodb.com/docs/manual/reference/method/db.collection.findOne/) |
| `insertOne` | Add a single document | [MongoDB insertOne()](https://www.mongodb.com/docs/manual/reference/method/db.collection.insertOne/) |
| `insertMany` | Add multiple documents at once | [MongoDB insertMany()](https://www.mongodb.com/docs/manual/reference/method/db.collection.insertMany/) |
| `updateOne` | Modify a single document | [MongoDB updateOne()](https://www.mongodb.com/docs/manual/reference/method/db.collection.updateOne/) |
| `updateMany` | Modify multiple documents at once | [MongoDB updateMany()](https://www.mongodb.com/docs/manual/reference/method/db.collection.updateMany/) |
| `deleteOne` | Remove a single document | [MongoDB deleteOne()](https://www.mongodb.com/docs/manual/reference/method/db.collection.deleteOne/) |
| `deleteMany` | Remove multiple documents at once | [MongoDB deleteMany()](https://www.mongodb.com/docs/manual/reference/method/db.collection.deleteMany/) |
Each operation is configured with specific parameters that determine how it interacts with the data.
## Prerequisites
Before working with FlowX Database, you should have a solid understanding of:
Basic knowledge of MongoDB operations, document structure, and query syntax
Understanding of JSON payloads and data formatting
Familiarity with Create, Read, Update, and Delete operations in database systems
Knowledge of query parameters like filters, sorting, projection, and pagination
If you're new to MongoDB, we recommend reviewing the [MongoDB Manual](https://www.mongodb.com/docs/manual/) before working with FlowX Database operations.
## Benefits of FlowX Database
Share data between different process instances, enabling more complex workflows and business scenarios
Store data structured according to your needs, independent of external systems
Enable new business cases that require persistent data across multiple processes
Reduce the need for creating custom connectors to external systems for basic data persistence
Integrate with workflows through the existing workflow designer
Perform all standard Create, Read, Update, and Delete operations on your data
Handle multiple documents efficiently with insertMany, updateMany, and deleteMany operations
Use MongoDB's powerful query syntax to filter, sort, and project your data
## How to use FlowX Database
### Creating a collection
Navigate to the 'Integrations' section in the left sidebar of FlowX Designer, then click on 'Data Sources'.

Click the "+" button to add a new Data Source. In the "Add Data Source" dialog, select "FlowX Database" from the dropdown list.

Provide a name and description for your collection. The name will be used to identify this database collection in your workflows.
**Data Model Required**: You must have a data model defined before creating a FlowX Database collection. The data model becomes the schema for your database collection and defines the structure of documents that will be stored.

* **Schema Definition**: Define the schema for your collection (the selected schema enhances auto-completion but does not enforce validation during insert or update)
* **Partitioning Key**: The attribute used to partition data in your collection. By default, this is set to the `id` attribute, but you can specify a different field based on your data model.
Click "Create" to save the collection in FlowX Database. Your new collection will appear in the Data Sources list with the type "FlowX Database".
Each FlowX Database data source represents a collection in the underlying MongoDB database. When you create a new data source with the FlowX Database type, you're essentially creating a new collection where your documents will be stored.
### Viewing collection data
Go to the collection you want to view in the 'Data Sources' section.
Click the 'Documents' section within the collection.
You'll see a listing of currently saved documents in the collection.

Use the search functionality to find specific documents in the collection. You can add queries to filter documents, sort them, and use projections to choose what content from each entry you want to see.

FlowX Database currently relies on MongoDB’s native sorting behavior for query results.
All sorting is performed using MongoDB’s default binary comparison rules.
### Managing collection settings
Each FlowX Database collection has a **Settings** tab where you can configure performance optimizations:
Navigate to your collection and click on the 'Settings' tab.
Create indexes for your collection to improve query performance. Indexes are particularly important for large collections as they significantly reduce query execution time.
Create indexes on fields that you frequently use in filter conditions, sort operations, or queries to optimize performance.

For large collections with thousands of documents, proper indexing is crucial for maintaining good query performance. Consider indexing frequently queried fields before your collection grows large.
### Creating database operations
Navigate to your FlowX Database collection in the Data Sources section.
Click the "+" button to create a new operation.

Choose the operation type from the dropdown (find, findOne, insertOne, insertMany, etc.).

Give your operation a meaningful name and description that indicates its purpose.
Configure the parameters for your operation based on its type. For example, for a find operation:

* **Filter**: Define the criteria to match documents
* **Projection**: Select which fields to include in the results
* **Sort**: Specify the sorting order
* **Skip**: For find operations, specify the number of documents to skip
* **Limit**: Set the maximum number of documents to return
**Parameter Syntax**: When defining operation parameters, remember:
* **Parameters defined in the operation** are referenced using `${parameterName}` syntax
* **Database field names** must be in quotes (e.g., `"firstName"`, `"customerId"`)
* Parameters don't need to match your data model exactly - they're placeholders that get replaced with actual values
* Field names in quotes must match exactly what's stored in the database (same as your data model)
Use the test functionality to verify your operation works correctly.

**Testing Delete Operations**: Be extremely careful when testing delete operations (`deleteOne` and `deleteMany`) as they will actually remove documents from your collection. Always use test data or ensure you have backups before testing deletion operations in collections with important data.
Click "Save" to add the operation to your collection. It will now be available for use in workflows.
From the list of operations, select the one you want to update.
Update the operation name, description, or parameters as needed.
Test the updated operation to ensure it works as expected.
Save your changes to apply them to the operation.
From the list of operations, select the one you want to delete.
Click the delete button and confirm the deletion when prompted.
Verify that the operation has been removed from the collection.
## Working with FlowX Database in workflows

FlowX Database integrates directly with the workflow designer through the "Data Source" node type:
In your workflow, add a new node and select the 'DATA\_SOURCE' type.
In the node properties panel:

1. Choose "FlowX Database" as the system type from the dropdown
2. Select your collection from the available options
3. Choose the operation you want to perform (find, findOne, insertOne, insertMany, updateOne, updateMany, deleteOne, deleteMany)
Set the parameters for your selected operation. The available parameters will depend on the operation type:
* **filter** - For find operations, define the criteria to match documents
* **sort** - For find operations, specify the sorting order for results
* **document** - For insert operations, define the document to insert
* **update** - For update operations, define the document to update
* **delete** - For delete operations, define the criteria to match documents
* **skip** - For find operations, specify the number of documents to skip
* **limit** - For find operations, specify the maximum number of documents to return
* **projection** - For find operations, specify the fields to include or exclude in the results

You can use static JSON or reference process variables using the expression syntax.
Specify where the operation result should be stored in the process instance. This makes the data available to subsequent nodes in your workflow.
```json theme={"system"}
{
"age": { "$gt": 30 },
"status": "active"
}
```
This filter will return all documents where the age is greater than 30 and the status is "active".
For more information about MongoDB comparison operators like \$gt, see [Comparison Query Operators](https://www.mongodb.com/docs/manual/reference/operator/query/comparison/).
```json theme={"system"}
{
"customerId": "${processInstance.customerData.id}"
}
```
This filter uses a value from the process instance to find documents matching a specific customer ID.
Learn more about MongoDB query syntax in the [Query Documents Tutorial](https://www.mongodb.com/docs/manual/tutorial/query-documents/).
## MongoDB operations supported
FlowX Database leverages MongoDB's powerful query capabilities through the **nosql-db-runner** service, providing pure MongoDB functionality. For detailed information about MongoDB query operators, filters, and syntax, refer to the [MongoDB Query and Projection Operators documentation](https://www.mongodb.com/docs/manual/reference/operator/query/).
The following MongoDB operations are supported in FlowX Database. Each tab includes practical examples that you can use as a starting point for your own operations.
**Parameters:**
For complete documentation on find operations and query syntax, see [MongoDB db.collection.find()](https://www.mongodb.com/docs/manual/reference/method/db.collection.find/).
* **filter** (document, optional): Criteria to match documents. See [Query Filter Documents](https://www.mongodb.com/docs/manual/tutorial/query-documents/)
* **sort** (document, optional): Document specifying the sorting order. See [Sort Query Results](https://www.mongodb.com/docs/manual/reference/method/cursor.sort/)
* **skip** (integer, optional): Number of documents to skip. See [Limit Query Results](https://www.mongodb.com/docs/manual/reference/method/cursor.skip/)
* **limit** (integer, optional): Maximum number of documents to return. See [Limit Query Results](https://www.mongodb.com/docs/manual/reference/method/cursor.limit/)
* **projection** (document, optional): Fields to include or exclude. See [Project Fields](https://www.mongodb.com/docs/manual/tutorial/project-fields-from-query-results/)
This example finds all active customers, sorts them by registration date (newest first), limits to 10 results, and returns only specific fields.
Operation name: listActiveCustomers
```json theme={"system"}
{
"status": "active"
}
```
```json theme={"system"}
{
"customerSince": -1
}
```
```json theme={"system"}
{
"customerId": 1,
"firstName": 1,
"lastName": 1,
"email": 1,
"status": 1,
"_id": 0
}
```
```
0
```
```
10
```
This operation will return up to 10 active customers, with the most recently registered customers first.
This example finds products in a specific category within a price range.
Operation name: findAffordableElectronics
```json theme={"system"}
{
"category": "electronics",
"price": { "$gte": 10, "$lte": 100 }
}
```
```json theme={"system"}
{
"price": 1
}
```
```json theme={"system"}
{
"productName": 1,
"price": 1,
"rating": 1,
"inStock": 1,
"_id": 0
}
```
```
20
```
This operation will return up to 20 electronics products with prices between $10 and $100, sorted from lowest to highest price.
**Parameters:**
For complete documentation on findOne operations, see [MongoDB db.collection.findOne()](https://www.mongodb.com/docs/manual/reference/method/db.collection.findOne/).
* **filter** (document, optional): Criteria to match the document. See [Query Filter Documents](https://www.mongodb.com/docs/manual/tutorial/query-documents/)
* **projection** (document, optional): Fields to include or exclude. See [Project Fields](https://www.mongodb.com/docs/manual/tutorial/project-fields-from-query-results/)
* **sort** (document, optional): Document specifying the sorting order. See [Sort Query Results](https://www.mongodb.com/docs/manual/reference/method/cursor.sort/)
This example retrieves a single customer by their unique customer ID.
Operation name: findCustomerById
```json theme={"system"}
{
"customerId": "${processInstance.customerId}"
}
```
```json theme={"system"}
{
"firstName": 1,
"lastName": 1,
"email": 1,
"phone": 1,
"status": 1,
"customerSince": 1,
"address": 1,
"_id": 0
}
```
This operation uses a process variable for the customer ID and returns specific customer fields. Since findOne only returns one document, sort is usually unnecessary unless you need the first document matching certain criteria.
This example finds the most recent order for a customer.
Operation name: findLatestOrder
```json theme={"system"}
{
"customerId": "${processInstance.customerId}"
}
```
```json theme={"system"}
{
"orderDate": -1
}
```
```json theme={"system"}
{
"orderId": 1,
"orderDate": 1,
"totalAmount": 1,
"status": 1,
"items": 1,
"_id": 0
}
```
This operation will find the most recent order for a specific customer by sorting by orderDate in descending order and returning only the first match.
**Parameters:**
For complete documentation on insertOne operations, see [MongoDB db.collection.insertOne()](https://www.mongodb.com/docs/manual/reference/method/db.collection.insertOne/).
* **document** (document, required): The document to insert. See [Insert Documents](https://www.mongodb.com/docs/manual/tutorial/insert-documents/)
This example inserts a new customer record using data from a process instance.
Operation name: createCustomer
```json theme={"system"}
{
"customerId": "${processInstance.customerData.id}",
"firstName": "${processInstance.customerData.firstName}",
"lastName": "${processInstance.customerData.lastName}",
"email": "${processInstance.customerData.email}",
"phone": "${processInstance.customerData.phone}",
"status": "active",
"customerSince": "${processInstance.customerData.registrationDate}",
"address": {
"street": "${processInstance.customerData.address.street}",
"city": "${processInstance.customerData.address.city}",
"state": "${processInstance.customerData.address.state}",
"zipCode": "${processInstance.customerData.address.zipCode}"
}
}
```
This operation creates a new customer document with nested address data, using values from the process instance.
This example logs a system event with static and dynamic data.
Operation name: logSystemEvent
```json theme={"system"}
{
"eventType": "user_action",
"action": "${processInstance.actionType}",
"timestamp": "${processInstance.currentDateTime}",
"userId": "${processInstance.userId}",
"details": "${processInstance.actionDetails}",
"source": "workflow",
"processId": "${processInstance.id}"
}
```
This operation creates an event log entry with information about user actions in the system.
**Parameters:**
For complete documentation on insertMany operations, see [MongoDB db.collection.insertMany()](https://www.mongodb.com/docs/manual/reference/method/db.collection.insertMany/).
* **documents** (array, required): Array of documents to insert. See [Insert Documents](https://www.mongodb.com/docs/manual/tutorial/insert-documents/)
This example inserts multiple customer records at once, typically from an imported data source.
Operation name: importCustomers
```json theme={"system"}
[
{
"customerId": "CUST001",
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@example.com",
"status": "active",
"customerSince": "2025-01-15"
},
{
"customerId": "CUST002",
"firstName": "Jane",
"lastName": "Smith",
"email": "jane.smith@example.com",
"status": "active",
"customerSince": "2025-01-20"
},
{
"customerId": "CUST003",
"firstName": "Robert",
"lastName": "Johnson",
"email": "robert.j@example.com",
"status": "inactive",
"customerSince": "2024-11-05"
}
]
```
This operation inserts multiple customer records at once. In a real scenario, you would typically reference a process variable containing the array: `{processInstance.importedCustomers}`
This example creates multiple order items for a single order.
Operation name: createOrderItems
```json theme={"system"}
[
{
"orderId": "${processInstance.orderId}",
"productId": "${processInstance.items[0].productId}",
"quantity": "${processInstance.items[0].quantity}",
"unitPrice": "${processInstance.items[0].price}",
"subtotal": "${processInstance.items[0].subtotal}"
},
{
"orderId": "${processInstance.orderId}",
"productId": "${processInstance.items[1].productId}",
"quantity": "${processInstance.items[1].quantity}",
"unitPrice": "${processInstance.items[1].price}",
"subtotal": "${processInstance.items[1].subtotal}"
}
]
```
This operation creates multiple order item records for a single order. In practice, you would use `{processInstance.items}` directly if your process data model matches the database structure.
**Parameters:**
For complete documentation on updateOne operations, see [MongoDB db.collection.updateOne()](https://www.mongodb.com/docs/manual/reference/method/db.collection.updateOne/).
* **filter** (document, required): Criteria to match the document to update. See [Query Filter Documents](https://www.mongodb.com/docs/manual/tutorial/query-documents/)
* **update** (document, required): Update operations to apply. See [Update Operators](https://www.mongodb.com/docs/manual/reference/mql/update/)
**Important Update Behavior**: When using update operations without the `$set` operator, the entire document will be replaced with the new data. This means any fields not included in your update payload will be removed from the document. Always use the `$set` operator to update specific fields while preserving others.
This example updates a customer's status and records when the change occurred.
Operation name: updateCustomerStatus
```json theme={"system"}
{
"customerId": "${processInstance.customerId}"
}
```
```json theme={"system"}
{
"$set": {
"status": "${processInstance.newStatus}",
"lastUpdated": "${processInstance.currentDate}",
"statusReason": "${processInstance.statusChangeReason}"
}
}
```
This operation updates a customer's status along with the reason and timestamp.
This example updates an order with shipping details and increments a counter.
Operation name: updateOrderShipping
```json theme={"system"}
{
"orderId": "${processInstance.orderId}"
}
```
```json theme={"system"}
{
"$set": {
"status": "shipped",
"shippingDetails": {
"carrier": "${processInstance.shippingData.carrier}",
"trackingNumber": "${processInstance.shippingData.trackingNumber}",
"estimatedDelivery": "${processInstance.shippingData.estimatedDelivery}"
},
"lastUpdated": "${processInstance.currentDateTime}"
},
"$inc": {
"statusUpdates": 1
}
}
```
This operation updates an order with shipping information, sets the status to "shipped", and increments a counter tracking the number of status updates.
**Parameters:**
For complete documentation on updateMany operations, see [MongoDB db.collection.updateMany()](https://www.mongodb.com/docs/manual/reference/method/db.collection.updateMany/).
* **filter** (document, required): Criteria to match documents to update. See [Query Filter Documents](https://www.mongodb.com/docs/manual/tutorial/query-documents/)
* **update** (document, required): Update operations to apply. See [Update Operators](https://www.mongodb.com/docs/manual/reference/mql/update/)
**Important Update Behavior**: When using update operations without the `$set` operator, the entire document will be replaced with the new data. This means any fields not included in your update payload will be removed from the document.
For example, if a document has `id`, `name`, and `email`, and you update only the `name` field without using `$set`, the `email` field will be deleted. Always use the `$set` operator to update specific fields while preserving others.
This example updates the status of multiple customers based on their last activity date.
Operation name: deactivateInactiveCustomers
```json theme={"system"}
{
"lastActivityDate": { "$lt": "${processInstance.thresholdDate}" },
"status": "active"
}
```
```json theme={"system"}
{
"$set": {
"status": "inactive",
"deactivationDate": "${processInstance.currentDate}",
"deactivationReason": "inactivity"
}
}
```
This operation identifies all active customers whose last activity date is older than a threshold date and marks them as inactive.
**Key MongoDB Operators**: This example uses `$lt` (less than) for date comparison and `$set` to update specific fields without affecting other customer data. The `$set` operator is essential for partial document updates.
This example demonstrates updating multiple specific customers using the `$in` operator.
Operation name: updateCustomersByIdList
```json theme={"system"}
{
"customerId": { "$in": ["${processInstance.customerIds}"] }
}
```
```json theme={"system"}
{
"$set": {
"lastContactedDate": "${processInstance.currentDate}",
"contactMethod": "${processInstance.contactMethod}",
"notes": "${processInstance.contactNotes}"
}
}
```
This operation updates all customers whose IDs are in the provided list, setting contact information for multiple customers at once.
**Standard MongoDB Pattern**: The combination of `$in` for filtering and `$set` for updating is a standard pattern in MongoDB. Use `$in` when you need to match against a list of values, and always use `$set` to avoid replacing the entire document.
This example applies a discount to all products in a specific category.
Operation name: applySeasonalDiscount
```json theme={"system"}
{
"category": "${processInstance.discountCategory}",
"onSale": false
}
```
```json theme={"system"}
{
"$mul": {
"price": ${processInstance.discountFactor}
},
"$set": {
"onSale": true,
"discountPercent": "${processInstance.discountPercent}",
"saleEndDate": "${processInstance.saleEndDate}"
}
}
```
This operation applies a discount to all products in a specific category by multiplying the price by a discount factor (e.g., 0.8 for 20% off) and setting sale-related fields.
**MongoDB Operators in Action**: This example demonstrates essential MongoDB operators:
* `$mul` multiplies the price by the discount factor
* `$set` updates specific fields without affecting others
* In the filter, you could use `$in` to target multiple categories: `"category": {"$in": ["electronics", "clothing"]}`
**Parameters:**
For complete documentation on deleteOne operations, see [MongoDB db.collection.deleteOne()](https://www.mongodb.com/docs/manual/reference/method/db.collection.deleteOne/).
* **filter** (document, required): Criteria to match the document to delete. See [Query Filter Documents](https://www.mongodb.com/docs/manual/tutorial/query-documents/)
This example removes a single customer record by ID.
Operation name: deleteCustomer
```json theme={"system"}
{
"customerId": "${processInstance.customerIdToDelete}"
}
```
This operation deletes a customer record with the specified ID. Make sure to implement proper validation and confirmation before executing deletion operations.
This example removes an abandoned shopping cart after confirmation.
Operation name: removeAbandonedCart
```json theme={"system"}
{
"cartId": "${processInstance.cartId}",
"status": "abandoned",
"lastUpdated": { "$lt": "${processInstance.thresholdDate}" }
}
```
This operation deletes a shopping cart that's been marked as abandoned and hasn't been updated since a specific date.
**Parameters:**
For complete documentation on deleteMany operations, see [MongoDB db.collection.deleteMany()](https://www.mongodb.com/docs/manual/reference/method/db.collection.deleteMany/).
* **filter** (document, required): Criteria to match documents to delete. See [Query Filter Documents](https://www.mongodb.com/docs/manual/tutorial/query-documents/)
This example removes all temporary records older than a specified date.
Operation name: purgeTemporaryRecords
```json theme={"system"}
{
"status": "temporary",
"createdDate": { "$lt": "${processInstance.purgeThresholdDate}" }
}
```
This operation removes all documents marked as "temporary" that were created before a specific date. Use with caution as this will delete all matching records.
This example removes all completed tasks for a specific user.
Operation name: clearCompletedTasks
```json theme={"system"}
{
"assignedTo": "${processInstance.userId}",
"status": "completed",
"completedDate": { "$lt": "${processInstance.olderThanDate}" }
}
```
This operation removes all tasks that are marked as completed, were assigned to a specific user, and were completed before a certain date.
Always use caution with update and delete operations, especially those that affect multiple documents (updateMany, deleteMany). Always include specific filter criteria to avoid unintended changes to your data.
## Real-world example: Customer management system
This example demonstrates how a customer management system could use FlowX Database to persist and share customer data across different processes.
Create a new FlowX Database data source named "Customers".

Create the following operations:
**Operation Type**: findOne

**Parameters**:
```json theme={"system"}
{
"filter": {
"customerId": "${processInstance.customerId}"
},
"projection": {
"firstName": 1,
"lastName": 1,
"email": 1,
"phone": 1,
"status": 1,
"customerSince": 1,
"_id": 0
}
}
```
This operation retrieves a single customer by their customerId, returning only selected fields.
**Operation Type**: insertOne

**Parameters**:
```json theme={"system"}
{
"document": {
"customerId": "${processInstance.customerData.id}",
"firstName": "${processInstance.customerData.firstName}",
"lastName": "${processInstance.customerData.lastName}",
"email": "${processInstance.customerData.email}",
"phone": "${processInstance.customerData.phone}",
"status": "active",
"customerSince": "${processInstance.customerData.registrationDate}",
"address": {
"street": "${processInstance.customerData.address.street}",
"city": "${processInstance.customerData.address.city}",
"state": "${processInstance.customerData.address.state}",
"zipCode": "${processInstance.customerData.address.zipCode}"
}
}
}
```
This operation inserts a new customer document using data from the process instance.
**Operation Type**: updateOne

**Parameters**:
```json theme={"system"}
{
"filter": {
"customerId": "${processInstance.customerId}"
},
"update": {
"$set": {
"status": "${processInstance.newStatus}",
"lastUpdated": "${processInstance.currentDate}"
}
}
}
```
This operation updates a customer's status and sets the lastUpdated timestamp.
**Operation Type**: find()

**Parameters**:
```json theme={"system"}
{
"filter": {
"status": "active"
},
"sort": {
"customerSince": -1
},
"limit": 50,
"projection": {
"customerId": 1,
"firstName": 1,
"lastName": 1,
"email": 1,
"status": 1,
"_id": 0
}
}
```
This operation retrieves a list of active customers, sorted by registration date (newest first), limited to 50 results.
In this process:
1. Support agent enters the customer ID
2. A Data Source node retrieves the customer details from the Customers collection
3. Customer information is displayed to the agent
4. After resolving the issue, the support agent updates the customer status
5. Another Data Source node updates the customer record in the database
This example shows how FlowX Database:
* Enables data persistence across multiple processes
* Provides a single source of truth for customer data
* Simplifies data retrieval and updates
* Eliminates the need for external systems to store basic customer information
## Limitations and considerations
Multiple versions of documents are stored in the collection. Upon retrieval, all data that fits the filter conditions will be retrieved regardless of version.
No automatic migration capabilities are available. Any migration will need to be done manually by the DevOps team.
In the initial release, FlowX Database does not support transactions across multiple collections.
Data validation based on a schema is not yet supported.
## Best practices
**Design before implementation**: Plan your collections and operations carefully before implementation.
**Keep document structure simple**: Avoid deeply nested structures for better performance and easier querying.
**Use meaningful names**: Choose clear names for collections and operations.
**Limit document size**: Keep individual documents under 16MB for optimal performance.
**Test operations thoroughly**: Use the testing functionality to ensure operations work as expected.
**Consider indexing**: For large collections, consider indexing frequently queried fields.
**Provide default values**: Ensure all data types have default values (e.g., empty string for null, 0 for integers).
## Troubleshooting
Find operation fails with an error related to the filter syntax.
Check your filter syntax to ensure it follows MongoDB query syntax. Common issues:
* Missing quotes around string values
* Incorrect operator syntax (e.g., using > instead of \$gt)
* Mismatched brackets or braces
Your query doesn't return expected documents.
* Verify your filter conditions are correct
* Check if documents actually exist in the collection
* Try a more general query to see if documents are returned
* Check if field names in your filter match exactly with the document structure
Queries returning large amounts of data are slow.
* Add pagination using skip and limit parameters
* Add more specific filter conditions
* Use projection to return only needed fields
* Consider indexing frequently queried fields
Insert operation fails with an error.
* Check that your document JSON is valid
* Ensure document size is under 16MB
* Verify all required fields are present
* Check for any unique constraint violations
## Related features
Learn about the Data Search service for indexing and searching process data.
Understand how to manage integrations with external systems.
See how workflows can interact with data sources.
Learn about data models used within processes.
## Summary
FlowX Database provides a powerful persistence layer that enables you to store and share data across different processes and projects. By leveraging MongoDB's capabilities through the **nosql-db-runner** service, FlowX Database offers:
1. **Flexible data storage** for any structured data
2. **Data sharing** between process instances
3. **Integration** with workflows
4. **Independence** from external systems for basic data persistence
## MongoDB learning resources
To get the most out of FlowX Database, familiarize yourself with MongoDB concepts and operations:
Complete MongoDB documentation covering all operations and concepts
Learn how to construct effective MongoDB queries
Master document update operations and operators
Best practices for structuring your data in MongoDB
## FAQs
FlowX Database does not replace Data Search. Each serves different purposes in the platform.
* Acts as a persistent data store
* Optimized for CRUD operations
* Stores structured business data
* Designed for sharing data across processes
* Uses MongoDB as the underlying technology (via nosql-db-runner service)
* Provides indexing and search capabilities
* Optimized for quick lookups and aggregations
* Used for debugging and analytics
* Enables searching across process instances
* Uses Elasticsearch as the underlying technology
FlowX Database is designed for **operational data with temporary character**, including:
* **Dashboard data**: Aggregated information for reporting and visualization. For example, create operations that gather information from multiple processes and pull all the data to calculate sums, averages, or other metrics for executive dashboards
* **Cached data**: Frequently accessed information that changes periodically, such as:
* Daily exchange rates for financial calculations
* Product catalogs that update weekly
* Configuration data that multiple processes need to access
* **Internal operational comments**: Information that needs to be shared between users but shouldn't reach business systems, such as:
* Internal comments in a client's profile for bank tellers
* Notes and annotations that support decision-making across different process instances
* Communication logs between team members working on the same case
* **Shared process data**: Information that needs to be accessed across multiple process instances - this solves the key pain point of data sharing between different process instances
* **Temporary operational data**: Working data that supports business processes but isn't part of your permanent records
**Important**: FlowX Database should **not become your primary book of records** or system of record. Use it for operational data that supports your processes, not for critical business data that requires long-term retention and governance.
Yes, you can share collections between projects using the library approach:
1. **Create collections in one project**: Set up your FlowX Database collections in a primary project
2. **Include as libraries**: Add these collections as libraries in other projects that need access
3. **Maintain consistency**: This approach ensures all projects use the same data structures and operations
4. **Future-proof management**: Having centralized collection definitions makes updates and maintenance easier across all projects
This pattern is particularly useful for shared reference data, common configurations, or cross-project operational data.
**Collection Ownership**: Each FlowX Database collection has an owner - either the project where it was created or the library that contains it. By default, only processes and workflows within the same project can access a collection. If you need to access the same collection from multiple projects, create it in a library and then include that library in all projects that need access.
FlowX Database intentionally does not provide automatic migration capabilities for several important reasons:
* **Data integrity**: Many documents need to remain in their original format to maintain historical accuracy and compliance requirements
* **Process dependencies**: Existing processes may depend on specific data structures, and automatic changes could break functionality
* **Business context**: Data migration often requires business logic and context that automated systems cannot provide
* **Risk management**: Manual migration allows for proper testing and validation before changes are applied
When you need to modify data structures, plan for manual migration processes with proper testing and validation procedures handled by your DevOps team.
**No, this is strongly discouraged.** Each collection should contain documents with the same structure and purpose.
**DON'T DO IT** - Mixing different document types in one collection can lead to:
* **Query complexity**: Filtering becomes more complex when documents have different schemas
* **Performance issues**: Indexes become less effective with mixed document types
* **Maintenance problems**: Updates and changes become harder to manage
* **Data consistency**: Harder to ensure data quality and validation
Instead, create separate collections for each document type, even if they seem related. This follows MongoDB best practices and keeps your data organized and manageable.
FlowX Database solves the key pain point of **accessing the same data from multiple process instances**:
* **Cross-instance access**: Multiple process instances can read from and write to the same collections simultaneously
* **Data persistence**: Data remains available even after individual processes complete
* **Concurrent access**: The underlying MongoDB technology (via nosql-db-runner) handles concurrent read/write operations safely
* **Shared state**: Enables complex workflows where processes need to coordinate through shared data
This capability enables use cases like multi-step approval processes, shared customer data across different business processes, and coordinated workflows that span multiple process instances - addressing a major limitation of traditional process-scoped data storage.
FlowX Database is powered by the **nosql-db-runner** microservice, which provides:
* **Pure MongoDB functionality**: Direct access to MongoDB operations within the FlowX ecosystem
* **Native integration**: Connection between FlowX workflows and MongoDB operations
* **Scalable architecture**: A dedicated service that can be scaled independently based on database operation needs
The nosql-db-runner acts as the bridge between FlowX's workflow engine and MongoDB, enabling you to leverage MongoDB's full power while maintaining FlowX's process orchestration capabilities.
# Integration Designer
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/integrations/integration-designer
The Integration Designer simplifies the integration of FlowX with external systems using REST APIs. It offers a user-friendly graphical interface with intuitive drag-and-drop functionality for defining data models, orchestrating workflows, and configuring system endpoints.
Unlike [Postman](https://www.postman.com/), which focuses on API testing, the Integration Designer automates workflows between systems. With drag-and-drop ease, it handles REST API connections, real-time processes, and error management, making integrations scalable and easy to mantain.
## Overview
Integration Designer facilitates the integration of the FlowX platform with external systems, applications, and data sources.

Integration Designer focuses on REST API integrations, with future updates expanding support for other protocols.
***
## Key features
You can easily build complex API workflows using a drag-and-drop interface, making it accessible for both technical and non-technical audience.
Specifically tailored for creating and managing REST API calls through a visual interface, streamlining the integration process without the need for extensive coding.
Allows for immediate testing and validation of REST API calls within the design interface.
***
## Managing integration endpoints
### Data Sources
A data source is a collection of resources—endpoints, authentication, and variables—used to define and run integration workflows.

### Creating a new data source definition
With **Data Sources** feature you can create, update, and organize endpoints used in API integrations. These endpoints are integral to building workflows within the Integration Designer, offering flexibility and ease of use for managing connections between systems. Endpoints can be configured, tested, and reused across multiple workflows, streamlining the integration process.
Go to the **Data Sources** section in FlowX Designer at **Workspaces** -> **Your workspace** -> **Projects** -> **Your project** -> **Integrations** -> **Data Sources**.
### Data sources types
There are two types of data sources:
* **RESTful System**: for REST API integrations
* **FlowX Database**: for FlowX Database integrations

#### RESTful System
Add a **New Data Source**, set the data source's unique code, name, and description:
* **Select Data Source**: RESTful System
* **Name**: The data source's name.
* **Code**: A unique identifier for the external data source.
* **Base URL**: The base URL is the main address of a website or web application, typically consisting of the protocol (`http` or `https`), domain name, and a path.
* **Description**: A description of the data source and its purpose.
* **Enable enumeration value mapping**: If checked, this system will be listed under the mapped enumerations. See [enumerations](../core-extensions/content-management/enumerations) section for more details.

To dynamically adjust the base URL based on the upper environment (e.g., dev, QA, stage), you can use environment variables and configuration parameters. For example: `https://api.${environment}.example.com/v1`.
Additionally, keep in mind that the priority for determining the configuration parameter (e.g., base URL) follows this order: first, input from the user/process; second, configuration parameters overrides (set directly on FlowX.AI designer or environment variables); and lastly, configuration parameters.
2. Set up authorization (Service Token, Bearer Token, or No Auth). In our example, we will set the auth type as a bearer and we will set it at system level:

The value of the token might change depending on the environment so it is recommended to define it at system level and apply [Configuration Parameters Overrides](../../projects/runtime/configuration-parameters-overrides) at runtime.
### Defining REST integration endpoints
In this section you can define REST API endpoints that can be reused across different workflows.
1. Under the **Endpoints** section, add the necessary endpoints for system integration.

2. Configure an endpoint by filling in the following properties:
* **Method**: GET, POST, PUT, PATCH, DELETE.
* **Path**: Path for the endpoint.
* **Parameters**: Path, query, and header parameters.
* **Body**: JSON, Multipart/form-data, or Binary.
* **Response**: JSON or Single binary file.
* **Response example**: Body or headers.

### REST endpoint caching
**Available since**: FlowX.AI 5.2.0
For GET endpoints, you can configure response caching to reduce redundant API calls, avoid rate limits, and lower operational costs. When data is stable for a defined period, caching eliminates unnecessary external API calls and improves workflow performance.
#### Configuring cache Time-To-Live (TTL)
Choose between two TTL policies based on your use case:
Cache responses for a specific duration after each request.
**Configuration Options**:
* **ISO Duration**: Use ISO 8601 duration format
* `PT1H` - Cache for 1 hour
* `PT30M` - Cache for 30 minutes
* `P1D` - Cache for 1 day
* `P1W` - Cache for 1 week
* **Dynamic Duration**: Reference configuration parameters using `${myConfigParam}`
* **Default**: `R/P1D` (1 day)
**Use Case**: Ideal when you want consistent cache duration regardless of time of day.
**Example**: Cache country list for 24 hours after each request
```
P1D
```
Cache responses until a specific time with recurring patterns.
**Configuration Options**:
* **Expire Time**: Set the time when cache expires (format: `HH:MM`)
* `00:00` - Midnight
* `18:00` - 6 PM
* `08:00` - 8 AM
* **Recurrency**: How often the pattern repeats (integer > 0, default: 1)
* **Time Unit**: Choose from Day, Week, or Month (default: Day)
**Use Cases**:
* Data that updates at specific times (e.g., daily reports at midnight)
* Batch processes that refresh data on schedule
* Business hours data that changes after 5 PM
**Example 1**: Cache until midnight every day
```
Expire Time: 00:00
Recurrency: 1
Time Unit: Day
```
**Example 2**: Cache until 6 PM every Friday
```
Expire Time: 18:00
Recurrency: 1
Time Unit: Week
```
#### Cache visibility and management
**Testing Modal**

When testing endpoints, you can view:
* **Cache Status**: Whether results came from cache (hit) or external API (miss)
* **Cache Key**: Unique identifier for the cached response
* **TTL Information**: When the cache will expire
* Duration-based: "Expires after PT10M" (10 minutes)
* Time-based: "Expires at 23:00 on 2025-11-04"
**Workflow Console**
Monitor cache usage during workflow execution with the same detailed information visible in logs.

**Clear Cache**
Manually invalidate cached responses when needed:
* Available in the endpoint testing modal
* Available from the endpoint definition page
* Only visible when caching is configured
Clear cache after updating data in the external system to ensure workflows fetch fresh data on the next request.
#### How caching works
When a GET endpoint is called for the first time, FlowX.AI:
1. Calls the external API
2. Stores the response in cache with the configured TTL
3. Returns the response to the workflow
If the cache is still valid (within TTL):
1. FlowX.AI returns the cached response immediately
2. No external API call is made
3. Response time is significantly faster
Once the TTL expires:
1. Next request fetches fresh data from the external API
2. Cache is updated with the new response
3. New TTL period begins
#### Error handling
**Reliability First**: If any issue occurs with cache retrieval or storage, FlowX.AI automatically falls back to calling the external API directly. Your workflows always receive correct data.
Automatic fallback scenarios:
* Cache service unavailable → Direct API call
* Cache corruption or invalid data → Direct API call
* Cache storage failure → Direct API call (with warning logged)
#### Use cases
Cache country lists, product catalogs, currency rates, or other reference data that changes infrequently
Stay within third-party API rate limits by reducing the number of requests
Lower operational costs by reducing billable API calls to external services
Improve workflow execution speed by eliminating network latency for cached responses
**Example**: An e-commerce platform caches product catalog data for 1 hour. With 1000 workflow executions per hour, caching reduces API calls from 1000 to just 1, saving 999 external calls while ensuring data freshness every hour.
### Defining variables
The Variables tab allows you to store system-specific variables that can be referenced throughout workflows using the format `${variableName}`.
These declared variables can be utilized not only in workflows but also in other sections, such as the Endpoint or Authorization tabs.
For example:
* For our integration example, you can declare configuration parameters and use the variables to store your `tableId` and `baseId` and reference them the **Variables** tab.


* Use variables in the **Base URL** to switch between different environments, such as UAT or production.
### Endpoint parameter types
When configuring endpoints, several parameter types help define how the endpoint interacts with external systems. These parameters ensure that requests are properly formatted and data is correctly passed.
#### Path parameters
Elements embedded directly within the URL path of an API request that acts as a placeholder for specific value.
* Used to specify variable parts of the endpoint URL.
* Defined with `${parameter}` format.
* Mandatory in the request URL.

Path parameters must always be included, while query and header parameters are optional but can be set as required based on the endpoint's design.
#### Query parameters
Query parameters are added to the end of a URL to provide extra information to a web server when making requests.
* Query parameters are appended to the URL after a `?` symbol and are typically used for filtering or pagination (e.g., `?search=value`)
* Useful for filtering or pagination.
* Example URL with query parameters: [https://api.example.com/users?search=johndoe\&page=2](https://api.example.com/users?search=johndoe\&page=2).

These parameters must be defined in the Parameters table, not directly in the endpoint path.
To preview how query parameters are sent in the request, you can use the **Preview** feature to see the exact request in cURL format. This shows the complete URL, including query parameters.
#### Header parameters
Used to give information about the request and basically to give instructions to the API of how to handle the request
* Header parameters (HTTP headers) provide extra details about the request or its message body.
* They are not part of the URL. Default values can be set for testing and overridden in the workflow.
* Custom headers sent with the request (e.g., `Authorization: Bearer token`).
* Define metadata or authorization details.

#### Body parameters
The data sent to the server when an API request is made.
* These are the data fields included in the body of a request, usually in JSON format.
* Body parameters are used in POST, PUT, and PATCH requests to send data to the external system (e.g., creating or updating a resource).

#### Response body parameters
The data sent back from the server after an API request is made.
* These parameters are part of the response returned by the external system after a request is processed. They contain the data that the system sends back.
* Typically returned in GET, POST, PUT, and PATCH requests. Response body parameters provide details about the result of the request (e.g., confirmation of resource creation, or data retrieval)

### Enum mapper
The enum mapper for the request body enables you to configure enumerations for specific keys in the request body, aligning them with values from the External System or translations into another language.

On enumerations you can map both translation values from different languages or values for different source systems.

Make sure you have the enumerations created with corresponding translations and system values values in your application already:

Select whether to use in the integration the enumeration value corresponding to the External System or the translation into another language.
For translating into language a header parameter called 'Language' is required to specify the language for translation.
### Configuring authorization
* Select the required **Authorization Type** from a predefined list.
* Enter the relevant details based on the selected type (e.g., Realm and Client ID for Service Accounts).
* These details will be automatically included in the request headers when the integration is executed.
### Authorization methods
The Integration Designer supports several authorization methods, allowing you to configure the security settings for API calls. Depending on the external system's requirements, you can choose one of the following authorization formats:

#### Service account
Service Account authentication requires the following key fields:
* **Identity Provider Url**: The URL for the identity provider responsible for authenticating the service account.
* **Client Id**: The unique identifier for the client within the realm.
* **Client secret**: A secure secret used to authenticate the client alongside the Client ID.
* **Scope**: Specifies the access level or permissions for the service account.

When using Entra as an authentication solution, the **Scope** parameter is mandatory. Ensure it is defined correctly in the authorization settings.
#### Basic authentication
* Requires the following credentials:
* **Username**: The account's username.
* **Password**: The account's password.
* Suitable for systems that rely on simple username/password combinations for access.

#### Bearer
* Requires an **Access Token** to be included in the request headers.
* Commonly used for OAuth 2.0 implementations.
* Header Configuration: Use the format `Authorization: Bearer {access_token}` in headers of requests needing authentication.

* System-Level Example: You can store the Bearer token at the system level, as shown in the example below, ensuring it's applied automatically to future API calls:

Store tokens in a configuration parameter so updates propagate across all requests when tokens are refreshed or changed.

#### Certificates
You might want to access another external system that require a certificate to do that. Use this setup to configure the secure communication with the system.
It includes paths to both a Keystore (which holds the client certificate) and a Truststore (which holds trusted certificates). You can toggle these features based on the security requirements of the integration.

When the Use Certificate option is enabled, you will need to provide the following certificate-related details:
* **Keystore Path**: Specifies the file path to the keystore, in this case, `/opt/certificates/testkeystore.jks`. The keystore contains the client certificate used for securing the connection.
* **Keystore Password**: The password used to unlock the keystore.
* **Keystore Type**: The format of the keystore, JKS or PKCS12, depending on the system requirements.
**Truststore credentials**
* **Truststore Path**: The file path is set to `/opt/certificates/testtruststore.jks`, specifying the location of the truststore that holds trusted certificates.
* **Truststore Password**: Password to access the truststore.

***
## File handling
You can now handle file uploads and downloads with external systems directly within Integration Designer. This update introduces native support for file transfers in RESTful connectors, reducing the need for custom development and complex workarounds.
### Core scenarios
Integration Designer supports two primary file handling scenarios:
Can call an external API (`GET` or `POST`) and receives a response containing one or more files. Integration Designer saves these files to a specified location and returns their new paths to the workflow for further processing.

Can send a file that is already stored in the **Document Plugin** or a custom **S3 Bucket** to an external API via a `POST` request. The workflow transmits the file path, enabling file transfer without manual handling.

Common use cases include contract generation workflows where data is sent to external document services and the generated files are retrieved back into the process.
***
### Receiving files (endpoint response configuration)
To configure an endpoint to handle incoming files from an external system, navigate to its **Response** tab. This functionality is available for both `GET` and `POST` methods.
#### Enabling and configuring file downloads
Switch the **Save Files** toggle to the "on" position to activate file processing for the response.
If this toggle is **off**, the system will not process files. A `Single Binary` response will result in an error, and a `JSON` response with Base64 data will be passed through as a raw string.
Select the expected format of the successful API response from the **Content-Type** dropdown:
* `JSON` (Default): For responses containing Base64 encoded file data
* `Single Binary`: For responses where the body is the file itself
#### Handling JSON content-type
This option is used when the API returns a JSON object containing one or more Base64 encoded files.
**File Destination Configuration:**
Saves files to the platform's managed storage, linking them to a specific process instance. The Document Plugin acts as a wrapper over the file system and provides special integration capabilities with document templates.
The ID of the process instance. This field defaults to `${processInstanceId}` to be mapped dynamically at runtime.
When using Document Plugin for file operations, you typically send only the document reference (ID) rather than the entire file content. The Integration Designer handles the special integration with document templates automatically.
**Files Mapping Table:**
| Column | Description | Example |
| --------------------- | ----------------------------------------------------------- | ------------------ |
| **Base 64 File Key** | The JSON path to the Base64 encoded string | `files.user.photo` |
| **File Name Key** | *Optional.* The JSON path to the filename string | `files.photoName` |
| **Default File Name** | A fallback name to use if the File Name Key is not found | `imagineProfil` |
| **Default Folder** | The business-context folder, such as a client ID (`CNP`) | `folder_client` |
| **Default Doc Type** | The document type for classification in the Document Plugin | `Carte Identitate` |
Saves files to a custom S3 bucket, ideal for files not tied to a specific process instance or when Document Plugin is not available.
This configuration requires the same **Files** table but omits the `Process Instance` and `Default Document Type` fields since S3 storage operates independently of the FlowX document management system.
Use S3 Protocol when you want to manipulate files at the workflow level for scenarios like AI processing, report generation, or CMS integrations with unassociated documents.
The `Translate or Convert Enumeration Values` toggle can be used in conjunction with the `Save Files` feature.
#### Handling Single Binary content-type
This option is used when the entire API response body is the file itself. The Single Binary content-type is ideal for endpoints that return raw file data directly in the response body.
In the **Response** tab of your endpoint configuration:
1. Enable the **Save Files** toggle
2. Select **Single Binary** from the **Content-Type** dropdown

If the **Save Files** toggle is disabled, attempting to handle a Single Binary response will result in an error.
Select your preferred file storage destination:
For files stored in custom S3 buckets, ideal for files not tied to specific process instances.
For files managed by FlowX's document system, linked to process instances with additional metadata.
Choose how the system should identify the filename from the response.
**File Name Identification Methods:**
The system automatically parses the `Content-Disposition` HTTP header to extract the `filename` attribute. This is the standard approach for most file download endpoints.
**When to use:** When the external API follows standard HTTP conventions and includes file information in the `Content-Disposition` header.
**Example of standard Content-Disposition header:**
```
Content-Disposition: attachment; filename="document.pdf"
```
The system will automatically extract `document.pdf` as the filename.
Configure custom header parsing when the external system doesn't follow standard conventions or uses custom headers for file information.
Turn off the **Auto Identify File** toggle to enable manual configuration options.
The name of the HTTP header that contains the filename information.
**Examples:**
* `X-Dctm-Object-Name`
* `X-File-Name`
* `Custom-Filename-Header`
The specific attribute or value within the header to extract as the filename.
**Examples:**
* For simple headers: leave empty or use the full header value
* For complex headers: specify the attribute name
Enable the **Apply Custom Regex** toggle when you need to extract the filename using pattern matching.
**When to use regex:** When the filename is embedded within a larger header value and needs to be extracted using pattern matching.
**Example scenarios:**
* Header value: `filename=document.pdf; size=1024`
* Regex pattern: `filename=([^;]+)`
* Extracted result: `document.pdf`
**Common regex patterns:**
```regex theme={"system"}
# Extract filename from "filename=document.pdf"
filename=(.+)
# Extract filename with extension from complex header
([a-zA-Z0-9_-]+\.[a-zA-Z]{2,4})
# Extract quoted filename: filename="my document.pdf"
filename="([^"]+)"
```
Use manual configuration when working with legacy systems, custom APIs, or when the external server provides file information through non-standard headers.
**File Destination Configuration:**
For files managed within FlowX's document system with full process integration:
Fallback filename if header extraction fails
Business context folder (e.g., client ID, case number)
Document classification for the Document Plugin
Files stored via Document Plugin are automatically linked to process instances and can be used with document templates and other FlowX document features.
For files stored in custom S3 buckets with flexible storage options:
Fallback filename if header extraction fails
Optional folder structure within the S3 bucket
S3 Protocol storage is ideal for files that need to be processed by external systems, used in AI workflows, or when Document Plugin is not available.
**Configuration Examples:**
```json Auto Identify Example theme={"system"}
{
"contentType": "Single Binary",
"saveFiles": true,
"autoIdentifyFile": true,
"fileDestination": "S3 Protocol",
"defaultFileName": "downloaded_file",
"defaultFolder": "client_${clientId}"
}
```
```json Manual Configuration Example theme={"system"}
{
"contentType": "Single Binary",
"saveFiles": true,
"autoIdentifyFile": false,
"fileNameHeaderKey": "X-Document-Name",
"fileNameHeaderAttribute": "filename",
"applyCustomRegex": true,
"customRegex": "filename=\"([^\"]+)\"",
"fileDestination": "Document Plugin",
"defaultFileName": "fallback_document",
"defaultFolder": "documents",
"defaultDocumentType": "Contract",
}
```
***
### Sending files (endpoint POST body configuration)
To configure an endpoint to send a file, navigate to the **Body** tab and select the appropriate **Content Type**.
#### Content Type: Multipart/Form-data
Use this to send files and text fields in a single request. This format is flexible and can handle mixed content types within the same POST request.
Select where the file originates:
* `Document Plugin`
* `S3 Protocol`
Add rows to the resource table, defining each part of the form:
* **Key Type**: Choose `File` or `Text`
* **Value**:
* For files: Provide the `filePath` (Minio path for S3 or Document Plugin reference)
* For text: Provide the string value or variable reference

Multipart requests can be sent even without files - you can include only text fields by setting all Key Types to `Text`. The difference between content types is primarily in how data is packaged for transmission to the target server.
#### Content Type: Single binary
Use this to send the raw file as the entire request body. This method sends only the file content without any additional form data or metadata.
Select `Document Plugin` or `S3 Protocol`
Specify the path of the file to be sent (Minio path for the file location)
When using Single Binary, only the Minio path is required since the entire request body will be the file content itself, without any additional packaging or metadata.
#### Content Type: JSON
This option should be used for standard JSON payloads **only**. It does not support embedding files for uploads; use `Multipart/Form-Data` or `Single Binary` for that purpose.
***
### Runtime behavior & testing
#### Workflow node configuration
All configured file settings (e.g., `File Path`, `Folder`, `Process Instance ID`) are exposed as parameters on the corresponding workflow nodes, allowing them to be set dynamically using process variables at runtime.
#### Response payload & logging
When a node successfully downloads and saves a file, its output will contain the **`filePath`** to the stored file, **not** the raw Base64 string or binary content.
For security and performance, runtime logs will also only contain the `filePath`, not the raw file content.
#### Error handling
If a node is configured to receive a `Single Binary` file but the external system returns a `JSON` error (e.g., file not found), the JSON error will be correctly passed through to the workflow for handling.
#### Testing guidelines
The **Test Modal** is context-aware. It will only display input fields for file parameters (`Process Instance ID`, `Folder`, etc.) if `Save Files` is enabled on the endpoint.
If you test an endpoint that returns a binary file without configuring it as `Single Binary`, the test will fail with the error: "*Endpoint returns a binary file. Please configure the Content-Type to handle binary responses.*"
The **Response Example** tab is now separate from the **Response** configuration tab and includes both `Body` and `Headers` sections for better clarity.
### Example: sending files to an external system after uploading a file to the Document Plugin
In this example, we'll send a file to an external system using the Integration Designer.
Configure a process where you will upload a file to the Document Plugin.
* Configure a User Task node where you will upload the file to the Document Plugin.
* Configure an Upload File Action node to upload the file to the Document Plugin.
* Configure a Save Data Action node to save the file to the Document Plugin.
Configure the Integration Designer to send the file to an external system:
* Configure a REST Endpoint node to send the file to an external system.
***
## Workflows
A workflow defines a series of tasks and processes to automate system integrations. Within the Integration Designer, workflows can be configured using different components to ensure efficient data exchange and process orchestration.

### Creating a workflow
1. Navigate to Workflow Designer:
* In FlowX.AI Designer to **Projects -> Your application -> Integrations -> Workflows**.
* Create a New Workflow, provide a name and description, and save it.
2. Start to design your workflow by adding nodes to represent the steps of your workflow:
* **Start Node**: Defines where the workflow begins and also defines the input parameter for subsequent nodes.
* **REST endpoint nodes**: Add REST API calls for fetching or sending data.
* **Fork nodes (conditions)**: Add conditional logic for decision-making.
* **Data mapping nodes (scripts)**: Write custom scripts in JavaScript or Python.
* **End Nodes**: Capture output data as the completed workflow result, ensuring the process concludes with all required information.

### Workflow nodes overview
Workflow nodes are the building blocks of your integration logic. Each node type serves a specific function, allowing you to design, automate, and orchestrate complex processes visually.
| Node Type | Purpose |
| ------------------- | ------------------------------------------------------------ |
| Start Node | Defines workflow input and initializes data |
| REST Endpoint Node | Makes REST API calls to external systems |
| FlowX Database Node | Reads/writes data to the FlowX Database |
| Condition (Fork) | Adds conditional logic and parallel branches |
| Script Node | Transforms or maps data using JavaScript or Python |
| Subworkflow Node | Invokes another workflow as a modular, reusable subcomponent |
| End Node | Captures and outputs the final result of the workflow |
***
### Start node
The Start node is the mandatory first node in any workflow. It defines the input data model and passes this data to subsequent nodes.
Define all required input fields in the Start node to ensure data mapping from processes or user tasks.
***
### REST endpoint node
Enables communication with external systems via REST API calls. Supports GET, POST, PUT, PATCH, and DELETE methods. Endpoints are selected from a dropdown, grouped by system.
* **Params**: Configure path, query, and header parameters.
* **Input/Output**: Input is auto-populated from the previous node; output displays the API response.
You can test REST endpoint nodes independently to validate connections and data retrieval.
***
### FlowX database node
Allows you to read and write data to the FlowX Database within your workflow.
***
### Condition (Fork) node
Evaluates logical conditions (JavaScript or Python) to direct workflow execution along different branches.
* **If/Else**: Routes based on condition evaluation.
* **Parallel Processing**: Supports multiple branches for concurrent execution.
Use fork nodes to implement business rules, error handling, or multi-path logic.
***
### Parallel workflow execution
**Available from version 5.2.0**
Execute multiple workflow branches concurrently to improve performance and reduce total execution time. The Integration Designer supports parallel execution using Start Parallel and End Parallel nodes.
#### Key concepts
Split workflow execution into multiple concurrent branches that run independently
Merge parallel branches back together, waiting for all branches to complete before continuing
Visual path indexing in the workflow diagram shows which nodes belong to which parallel branch
Track parallel path execution with timing information for each branch and merge points
#### How to use parallel workflows
Add a Start Parallel node and create multiple sequences from it, each representing an independent execution path
Add workflow nodes to each parallel branch - API calls, transformations, database operations, or any other node type
Close parallel branches with an End Parallel node that waits for all branches to complete before continuing
At runtime, all branches execute concurrently. The End Parallel node completes when the slowest branch finishes
#### Use cases
Call multiple independent APIs concurrently instead of sequentially, reducing total execution time
Fetch data from multiple sources in parallel for comprehensive data aggregation
Send notifications through multiple channels (email, SMS, push) simultaneously
Process different document types or sections in parallel for faster throughput
#### Runtime behavior
* **Path Time**: Sum of all node execution times within that branch
* **End Parallel Time**: Node processing time + maximum time across all parallel paths
* **Example**: If Branch A takes 2s and Branch B takes 5s, the End Parallel node completes after 5s (plus its own processing time)
* **Start Parallel Node**: Displays Input tab showing data split across branches
* **End Parallel Node**: Displays Output tab showing merged results from all branches
* **Path Grouping**: Nodes within each parallel path are grouped for easy monitoring
* If any branch fails, the workflow handles it according to standard error handling rules
* End Parallel node waits for all non-failed branches before continuing
* Runtime validation ensures parallel branches are configured correctly
#### Limitations and considerations
This is the initial implementation of parallel branches with the following considerations:
* **Array Processing**: Arrays aren't merged across parallel branches. When multiple branches modify the same array path, the last branch to complete determines the final array value. Cannot process individual objects from the same array in different parallel branches (for example, first element in branch 1, second element in branch 2). To preserve data from all branches, save to different keys and merge manually using a script before the end node
* **Proper Branch Closure**: All start parallel branches must be properly closed with end parallel nodes. Nodes following a start parallel node must merge into the same end parallel node (except those terminating with end workflow nodes)
Based on user feedback and raised exceptions during runtime execution, additional configuration constraints and validations are planned for future releases.
#### Benefits
Reduce workflow execution time by running independent operations concurrently instead of sequentially
Maximize throughput by executing multiple operations simultaneously
Explicitly model concurrent operations in your workflow diagrams
Track execution time for each parallel path to identify bottlenecks
When designing parallel workflows, ensure that branches are truly independent. Avoid scenarios where one branch depends on data produced by another branch, as this can lead to race conditions or unexpected results.
***
### Script node
Executes custom JavaScript or Python code to transform, map, or enrich data between nodes.
***
### Subworkflow node
The Subworkflow node allows you to modularize complex workflows by invoking other workflows as reusable subcomponents. This approach streamlines process design, promotes reuse, and simplifies maintenance.
Select Start Subworkflow from the Select Next Node dropdown. Choose from workflows categorized as Local or Libraries.
* Workflow Selection: Pick the workflow to invoke.
* Open: Edit the subworkflow in a new tab.
* Preview: View the workflow canvas in a popup.
* Response Key: Set a key (e.g., response\_key) for output.
* Input: Provide input in JSON format.
* Output: Output is read-only JSON after execution.
Use subworkflows for reusable logic such as data enrichment, validation, or external system calls.
#### Execution logic and error handling
* Parent workflow waits for subworkflow completion before proceeding.
* If the subworkflow fails, the parent workflow halts at this node.
* Subworkflow output is available to downstream nodes via the response key.
* Logs include workflow name, instance ID, and node statuses for both parent and subworkflow.
If a subworkflow is deleted, an error displays: \[name] subworkflow not found.
Subworkflow runs are recorded in workflow instance history for traceability.
#### Console logging, navigation, and read-only mode
* Console shows input/output, workflow name, and instance ID for each subworkflow run.
* Open subworkflow in a new tab for debugging from the console.
* Breadcrumbs enable navigation between parent and subworkflow details.
* In committed/upper environments, subworkflow configuration is read-only and node runs are disabled (preview/open only).
Subworkflow instances are logged in history, and you can navigate between parent and child workflow runs for comprehensive debugging.
#### Use case: CRM Data Retrieval with subworkflows
Suppose you need to retrieve CRM details in a subworkflow and use the output for further actions in the parent workflow.
Design a workflow that connects to your CRM system, fetches user details, and outputs the data in a structured JSON format.
In your main workflow, add a Subworkflow Node and select the CRM retrieval workflow. Map any required input parameters.
Downstream nodes in the parent workflow can reference the subworkflow's output using the defined responseKey.
```json theme={"system"}
{
"crmData": "${responseKey}"
}
```
Use the console to view input/output data, workflow names, and instance IDs. Open subworkflow runs in new tabs for detailed debugging.
This modular approach allows you to build scalable, maintainable integrations by composing workflows from reusable building blocks.
***
### End node
The End node signifies the termination of a workflow's execution. It collects the final output and completes the workflow process.
* Receives input in JSON format from the previous node.
* Output represents the final data model of the workflow.
* Multiple End nodes are allowed for different execution paths.
If the node's output doesn't meet mandatory requirements, it will be flagged as an error to ensure all necessary data is included.
***
## Integration with external systems
This example demonstrates how to integrate FlowX with an external system, in this example, using Airtable, to manage and update user credit status data. It walks through the setup of an integration system, defining API endpoints, creating workflows, and linking them to BPMN processes in FlowX Designer.
Before going through this example of integration, we recommend:
* Create your own base and table in Airtable, details [here](https://www.airtable.com/guides/build/create-a-base).
* Check Airtable Web API docs [here](https://airtable.com/developers/web/api/introduction) to get familiarized with Airtable API.
### Integration in FlowX.AI
Navigate to the **Integration Designer** and create a new system:
* Name: **Airtable Credit Data**
* **Base URL**: `https://api.airtable.com/v0/`

In the **Endpoints** section, add the necessary API endpoints for system integration:
1. **Get Records Endpoint**:
* **Method**: GET
* **Path**: `/${baseId}/${tableId}`
* **Path Parameters**: Add the values for the baseId and for the tableId so they will be available in the path.
* **Header Parameters**: Authorization Bearer token
See the [API docs](https://airtable.com/developers/web/api/list-records).

2. **Create Records Endpoint**:
* **Method**: POST
* **Path**: `/${baseId}/${tableId}`
* **Path Parameters**: Add the values for the baseId and for the tableId so they will be available in the path.
* **Header Parameters**:
* `Content-Type: application/json`
* Authorization Bearer token
* **Body**: JSON format containing the fields for the new record. Example:
```json theme={"system"}
{
"typecast": true,
"records": [
{
"fields": {
"First Name": "${firstName}",
"Last Name": "${lastName}",
"Age": ${age},
"Gender": "${gender}",
"Email": "${email}",
"Phone": "${phone}",
"Address": "${address}",
"Occupation": "${occupation}",
"Monthly Income ($)": ${income},
"Credit Score": ${creditScore},
"Credit Status": "${creditStatus}"
}
}
]
}
```

1. **Open the Workflow Designer** and create a new workflow.
* Provide a name and description.
2. **Configure Workflow Nodes**:
* **Start Node**: Initialize the workflow.
On the start node add the data that you want to extract from the process. This way when you will add the **Start Workflow Integration** node action it will be populated with this data.

```json theme={"system"}
{
"firstName": "${firstName}",
"lastName": "${lastName}",
"age": ${age},
"gender": "${gender}",
"email": "${email}",
"phone": "${phone}",
"address": "${address}",
"occupation": "${occupation}",
"income": ${income},
"creditScore": ${creditScore},
"creditStatus": "${creditStatus}"
}
```
Make sure this keys are also mapped in the data model of your process with their corresponding attributes.
* **REST Node**: Set up API calls:
* **GET Endpoint** for fetching records from Airtable.
* **POST Endpoint** for creating new records.
* **Condition Node**: Add logic to handle credit scores (e.g., triggering a warning if the credit score is below 300).
Condition example:
```json theme={"system"}
input.responseKey.data.records[0].fields["Credit Score"] < 300
```
* **Script Node**: Include custom scripts if needed for processing data (not used in this example).
* **End Node**: Define the end of the workflow with success or failure outcomes.
1. **Integrate the workflow** into a BPMN process:
* Open the process diagram and include a **User Task** and a **Receive Message Task**.

In this example, we'll use a User Task because we need to capture user data and send it to our workflow.
2. **Map Data** in the **UI Designer**:
* Create the data model
* Link data attributes from the data model to form fields, ensuring the user input aligns with the expected parameters.


3. **Add a Start Integration Workflow** node action:
* Make sure all the input will be captured.
**Receive Workflow Output**:
* Use the **Receive Message Task** to capture workflow outputs like status or returned data.
* Set up a **Data stream topic** to ensure workflow output is mapped to a predefined key.

* Start your process to initiate the workflow integration. It should add a new user with the details captured in the user task.
* Check if it worked by going to your base in Airtable. You can see, our user has been added.
***
This example demonstrates how to integrate Airtable with FlowX to automate data management. You configured a system, set up endpoints, designed a workflow, and linked it to a BPMN process.
## FAQs
**A:** Currently, the Integration Designer only supports REST APIs, but future updates will include support for SOAP and JDBC.
**A:** The Integration Service handles all security aspects, including certificates and secret keys. Authorization methods like Service Token, Bearer Token, and OAuth 2.0 are supported.
**A**: Errors are logged within the workflow and can be reviewed in the monitoring dedicated console for troubleshooting and diagnostics
**A**: Currently, the Integration Designer only supports adding endpoint specifications manually. Import functionality (e.g., importing configurations from sources like Swagger) is planned for future releases.
For now, you can manually define your endpoints by entering the necessary details directly in the system.
**A**: No, caching is only available for GET endpoints. POST, PUT, PATCH, and DELETE methods cannot be cached as they are designed to modify data rather than retrieve it.
**A**: FlowX.AI automatically falls back to calling the external API directly. Your workflows always receive correct data even if caching fails. The failure is logged for monitoring purposes.
**A**: No, the cache policy is configured at the endpoint level in the Data Source definition. All workflows using that endpoint share the same cache. If you need different caching behavior, create separate endpoint definitions.
**A**: Cache status is visible in both the endpoint testing modal and the workflow console logs. You'll see whether the response came from cache (hit) or from the external API (miss), along with the cache key and TTL information.
# Overview
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/integrations/integrations-overview
Integrations play a crucial role in connecting legacy systems or third-party applications to the FlowX Engine. They enable seamless communication by leveraging custom code and the Kafka messaging system.

Integrations serve various purposes, including working with legacy APIs, implementing custom file exchange solutions, or integrating with RPAs.
#### High-level architecture

Integrations involve interaction with legacy systems and require custom development to integrate them into your FLOWX.AI setup.
## Developing a custom integration
Developing custom integrations for the FlowX.AI platform is a straightforward process. You can use your preferred technology to write the necessary custom code, with the requirement that it can send and receive messages from the **Kafka** cluster.
#### Steps to create a custom integration
Follow these steps to create a custom integration:
1. Develop a microservice, referred to as a "Connector," using your preferred tech stack. The Connector should listen for Kafka events, process the received data, interact with legacy systems if required, and send the data back to Kafka.
2. Configure the [process definition](../../building-blocks/process/process-definition) by adding a [message](../../building-blocks/node/message-send-received-task-node) send action in one of the [nodes](../../building-blocks/node/node). This action sends the required data to the Connector.
3. Once the custom integration's response is ready, send it back to the FLOWX.AI engine. Keep in mind that the process will wait in a receive message node until the response is received.
For Java-based Connector microservices, you can use the following startup code as a quickstart guide:
## Managing an integration
#### Managing Kafka topics
It's essential to configure the engine to consume events from topics that follow a predefined naming pattern. The naming pattern is defined using a topic prefix and suffix, such as "*ai.flowx.dev.engine.receive*."
We recommend the following naming convention for your topics:
```yaml theme={"system"}
topic:
naming:
package: "ai.flowx."
environment: "dev."
version: ".v1"
prefix: ${kafka.topic.naming.package}${kafka.topic.naming.environment}
suffix: ${kafka.topic.naming.version}
engineReceivePattern: engine.receive
pattern: ${kafka.topic.naming.prefix}${kafka.topic.naming.engineReceivePattern}*
```
# Mock integrations
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/integrations/mock-integrations
If you need to test the business process flow but haven't completed all integrations, you can still do so by utilizing the mock integrations server included in the platform.
## Setup
To begin, configure the microservice's DB settings to use a Postgres DB. Then, deploy the mocked adapter microservice.
## Adding a new integration
Setting up a mocked integration requires only one step: adding a mock Kafka request and response.
You have two options for accomplishing this:
1. Add the information directly to the DB.
2. Use the provided [**API**](../../api/mocks/add-kafka-mock).
For each Kafka message exchange between the engine and the integration, you need to create a separate entry.
Check out the [**Add new exchange Kafka mock**](../../api/mocks/add-kafka-mock) API reference for more details.
Check out the [**View all available Kafka exchanges**](../../api/mocks/view-kafka-exchanges) API reference for more details.
# Observability with OpenTelemetry
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/integrations/open-telemetry
## What is Observability?
Observability is the capacity to infer the internal state of a system by analyzing its external outputs. In software development, this entails understanding the internal workings of a system through its telemetry data, which comprises traces, metrics, and logs.
## What is Open Telemetry?
OpenTelemetry is an observability framework and toolkit for generating and managing telemetry data, including traces, metrics, and logs. It is vendor-agnostic and compatible with various observability backends like Jaeger and Prometheus. Unlike observability backends, OpenTelemetry focuses on the creation, collection, and export of telemetry data, leaving storage and visualization to other tools.
Tracing with Open Telemetry is availabile starting with FlowX.AI v.4.1.0 release.
## How it works?
Our monitoring and performance analysis system leverages OpenTelemetry for comprehensive tracing and logging across our microservices architecture. By integrating with Grafana and other observability tools, we achieve detailed visibility into the lifecycle of requests, the performance of individual operations, and the interactions between different components of the system.

OTEL Collectors are designed in a vendor-agnostic way to receive, process and export telemetry data. More information about OTEL Collectors, you can find [**here**](https://opentelemetry.io/docs/collector/).
Recommended OpenTelemetry Collector Processors: Follow the [**recommended processors**](https://github.com/open-telemetry/opentelemetry-collector/tree/main/processor#recommended-processors).
## Prerequisites
### Microservices
* Custom code addition for manual instrumentation.
* Configuration and deployment of Java agent.
* Performance impact assessment.
### Kubernetes
* Use of a Kubernetes Operator for managing instrumentation and tracing configuration.
## Instrumentation
### Auto-instrumentation with Java agent
* **Works**: Automatically wraps methods at the application edges (HTTP calls, Kafka messages, DB calls), creating spans and adding default span attributes.
* **Configuration**: Configure the Java agent for auto-instrumentation.
### Manual instrumentation
* **Custom Spans**: These were created for methods important to the business flow and enriched with business attributes such as `fx.type`, `fx.methodName`, `fx.processInstanceUuid`, and others.
* **Custom BUSINESS Spans**: Create spans for business events.
## Business logic metadata in logs and spans
Spans now include custom FlowX attributes (e.g., node names, action names, process names, instance UUIDs), which ccan be used for filtering and searching in traces.
Here is the full list of included custom FlowX span attributes:
### Custom span attributes
* fx.type - BUSINESS/TECHNICAL
* fx.methodName
* fx.parentProcessInstanceId
* fx.parentProcessInstanceUuid
* fx.processInstanceUuid
* fx.processName
* fx.processVersionId
* fx.tokenInstanceUuid
* fx.nodeName
* fx.nodeId
* fx.nodeUuid
* fx.boundaryEventId
* fx.nextNodeId
* fx.triggeredByBoundaryEventId
* fx.actionUuid
* fx.actionName
* fx.context
* fx.platform
### Custom business spans
* identified by the `fx.type = BUSINESS` attribute
### Detailed trace operations
Trace specific operations and measure request time across different layers/services.
* **Process Start**: Auto-instrumentation enabled for Spring Data to show time spent in repository methods. JDBC query instrumentation can be added.
* **Token Creation and Advancing**: Custom tracing added.
* **Action Execution and Subprocess Start**: Custom tracing added.
## Troubleshooting scenarios and common usages
### Scenario examples
* **Process Trace**: Analyze DB vs cache times, token advancement, node actions.
* **Parallel Gateway**: Trace split tokens.
* **DB Query Time**: Enable JDBC query tracing.
* **Endpoint Data Issues**: Check traces for Redis or DB source.
* **Token Stuck**: Filter by node name and process UUID.
* **Action Execution**: Trace action names for stuck tokens.
* **Subprocess Failures**: Analyze subprocess start and failures.
* **Latency Analysis**: Identify latencies in automatic actions.
* **Boundary Events**: Ensure Kafka schedule messages are sent and received correctly.
* **External Service Tracking**: Trace between process engine and external plugins.
### Business operation analysis
* **Long Running Operations**: Use Uptrace for identifying slow operations.
* **Failed Requests**: Filter traces by error status.
### Visualization of Traces
We recommend to use Grafana, but any observability platform compatible with OpenTelemetry standards can be used.
Grafana integrates with tracing backends such as Tempo (for tracing) and Loki (for logging), allowing us to visualize the entire lifecycle of a request. This includes detailed views of spans, which are the basic units of work in a trace. By using Grafana, we can:
* **View Trace Trees**: Grafana provides an intuitive UI for viewing the hierarchy and relationships between spans, making it easier to understand the flow of a request through the system.
* **Filter and Search**: Use Grafana to filter and search spans based on custom attributes like `fx.processInstanceUuid`, `fx.nodeName`, `fx.actionName`, and others. This helps in pinpointing specific operations or issues within a trace.
* **Error Analysis**: Identify spans with errors and visualize the stack trace or error message, aiding in quick troubleshooting.


Resources:
# FlowX custom plugins
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/plugins/custom-plugins
Adding new capabilities to the core platform can be easily done by using plugins. FlowX plugins represent already-built functionality that can be added to a FlowX.AI platform deployment.

These could be either one of the provided custom **plugins** that we've already built or building your desired plugin.
On our roadmap, we’re also looking to enhance the **plugins library** with 3rd party providers, so stay tuned for more.
## High-level architecture

The plugins are microservice apps that can be developed using any tech stack. The only requirement is that they need to be able to connect to the core platform using Kafka events.
To interact with plugins, you need to understand a few details about them:
* the events that can trigger them
* the infrastructure components needed
* the needed configurations
## Custom plugins
The currently available plugins are:
* [**OCR**](./custom-plugins/ocr-plugin) - helps you scan your documents and integrate them into a business process
* [**Reporting**](./custom-plugins/reporting/reporting-overview) - a plugin that will help you create and bootstrap custom reports built on generic information about usage and processes metrics
Let's get into a bit more detail about the custom plugins 🎛️
## OCR plugin
**Automatic key information extraction**
Used to easily read barcodes or extract handwritten signatures from PDF documents.

## Reporting plugin
**Easy-to-read dynamic dashboards**
Use reporting plugin to build and bootstrap custom reports built on generic information about usage and processes.

# OCR plugin
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/plugins/custom-plugins/ocr-plugin
The OCR (Optical Character Recognition) plugin is a powerful tool that enables you to read barcodes and extract handwritten signatures from .pdf documents with ease.
Before using the OCR service for reading barcodes and extracting signatures, please note the following requirements:
* All \*.pdf documents that are sent to the OCR service for reading barcodes and extracting handwritten signatures should be scanned at a minimum resolution of 200DPI (approximately 1654x2339 px for A4 pages)
* Barcode is searched on the top 15% of each image (scanned page)
* Signatures are detected on boxes with a border: 4px black solid
* Only two signatures per image (scanned page) are detected.
* All \*.pdf documents should be scanned at a minimum resolution of 200DPI (approximately 1654x2339 px for A4 pages).
* The barcode is searched in the top 15% of each scanned page.
* Signatures are detected within boxes with a 4px black solid border.
* The plugin detects up to two signatures per scanned page.
* Only two signatures per image (scanned page) are detected.
The plugin supports **1D Code 128** barcodes. For more information about this barcode type, please refer to the documentation [here](https://graphicore.github.io/librebarcode/documentation/code128.html).
## Using the OCR plugin
You can utilize the OCR plugin to process generic document templates by either using a specific flow on FlowX.AI (HTML template) or any other document editor.
Using a specific flow on FlowX.AI offers several advantages:
* Centralized management of templates and flows within a single application.
* Access to template history and version control.
### Use case
1. Prepare and print generic document templates.
2. End-users complete, sign, and scan the documents.
3. Upload the scanned documents to the flow.
4. FlowX.AI validates the template (barcode) and the signatures.
### Scenario for FlowX.AI generated documents
1. Utilize the [**Documents plugin**](../../core-extensions/content-management/documents-plugin/documents-plugin-overview) to create a [**document template**](../../core-extensions/content-management/documents-plugin/generating-from-html-templates).

2. Create a process and add a [**Kafka Send Action**](../../../building-blocks/node/message-send-received-task-node#configuring-a-message-send-task-node) to a [**Send Message Task**](../../../building-blocks/node/message-send-received-task-node#send-message-task) node. Here you specify the [**Kafka topic**](../../../platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-kafka-concepts#topics) (address) where the template will be generated.

The Kafka topic for generating the template must match the topic defined in the **`KAFKA_TOPIC_DOCUMENT_GENERATE_HTML_IN`** variable. **DEVELOPER**: Refer to the [**Kafka configuration guide**](../../../../setup-guides/flowx-engine-setup-guide/engine-setup#configuring-kafka) for more details. For additional information, please see the [**Documents plugin setup guide**](../../../../setup-guides/documents-plugin-setup).
3. Fill in the **Message**. The request body should include the following values:
* **documentList** - a list of documents to be generated, including properties such as name and values to be replaced in the document templates
* **customId** - client ID
* **templateName** - the name of the template to be used
* **language**
* **includeBarcode** - true/false
* **data** - a map containing the values that should replace the placeholders in the document template, the keys used in the map should match those defined in the HTML template

The [**`data` parameters**](../wysiwyg) must be defined in the document template beforehand. For more information, check the [**WYSIWYG editor**](../wysiwyg) section.

4. Add a **barcode**.
* to include a **default barcode**, add the following parameter to the message body: `includeBarCode: true`.
* to include a **custom barcode**, set `includeBarCode: false` and provide the desired data in the `data` field
5. Add a [**Receive Message Task**](../../../building-blocks/node/message-send-received-task-node#receive-message-task) node and specify the topic where you want to receive the response.
Ensure that the topic matches the one defined in the **`KAFKA_TOPIC_DOCUMENT_GENERATE_HTML_OUT`** variable.

6. Add a [**User Task**](../../../building-blocks/node/user-task-node) node and configure an [**Upload file**](../../../building-blocks/actions/upload-file-action) action to send the file (defined by the **`KAFKA_TOPIC_DOCUMENT_PERSIST_IN`** variable) to the storage solution (for example, S3).

7. Next, the response will be sent back to the Kafka topic defined by **`KAFKA_TOPIC_DOCUMENT_PERSIST_OUT`** environment variable through a callback action/subprocess.
8. Next, send the response to the OCR Kafka topic defined at **`KAFKA_TOPIC_OCR_IN`** variable (representing the path to the S3 file)
9. Display the result of the OCR validation on the Kafka topic defined at **`KAFKA_TOPIC_OCR_OUT`**.
### Setup guide
**DEVELOPER**: Refer to the OCR plugin setup guide for detailed instructions on setting up the OCR plugin.
# Authorization & access roles
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/plugins/custom-plugins/reporting/access-and-authorization
## IAM solution
Superset is using be default flask-openid, as implemented in flask-security.
Superset can be integrated Keycloak, an open-source identity and access management solution. This integration enables users to manage authentication and authorization for their Superset dashboards.
### Prerequisites
* Keycloak server
* Keycloak Realm
* Keycloak Client & broker configured with OIDC protocols
* client\_secret.json
* admin username & password of postgres instance
* Superset Database created in postgresql
* optionally Cert-manager if you want to have SSL certificates on hostnames.
# Reporting plugin
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/plugins/custom-plugins/reporting/reporting-overview
The FlowX.AI Reporting plugin helps you build and bootstrap custom reports using data from your BPMN processes. Moreover, it supports technical reports based on process instance data. Integrated with the FlowX.AI Engine, this plugin transforms raw data into actionable insights, enhancing decision-making and optimizing business processes.
### Quick walkthrough video
Watch this quick walkthrough video to get started:
### Data exploration and visualization
The plugin uses **Superset** as a free data exploration and visualization tool.
You can however use your own BI tool like Tableau, PowerBI etc. as an alternative to Superset.
Use the suggested query structure and logic to ensure accurate reporting and avoid duplicates, even during database updates. Do not just use select on single reporting tables.

Apache Superset is an open-source software application for data exploration and data visualization able to handle data at a large scale. It enables users to connect their company's databases and perform data analysis, and easily build charts and assemble dashboards.
Superset is also an SQL IDE, so users can write SQL, join data create datasets and so on.
### Plugin architecture
Here’s an overview of the reporting plugin architecture:

### Setting up reporting for a process definition
If you want to extract custom business parameters for a process, first you should set up the master reporting data model in the published version of that process. This is done in Designer, as explained below in the [**Reporting Data Model**](#reporting-data-model).
The master reporting data model that is applied to all historical versions is the one belonging to the version that is set as Published. If the currently published version is read-only, you might need to create a new version, create the data model in it, mark it for reporting and set it as published (as explained in the section below).
See [**Reporting Data Model**](#reporting-data-model) section for more details.
This is accomplished by checking the “Use process in reporting” button in the settings / general page of each process version you want to report. Please note that you will not be able to change that setting on read-only versions.

It is essential that the currently Published version has this setting enabled, as it is the master version for reporting all historical data.
Only the process instances belonging to reporting-enabled versions will be extracted to the database, using the master data model from the currently Published version.
The reason why you should first set up the data model on the published (or to-be-published) version is that all changes in the data model of the published version that is also marked “use\_in\_reporting” are instantly sent to the reporting plugin, potentially causing all historical process instances to be re-computed multiple times before you are done setting up the data model.
To optimize operations, you should always aim to finish the modifications on the master data model on a version that is either not published, or not marked as "use\_in\_reporting", before marking it as "use\_in\_reporting and ensuring it is published.
See [**Enabling Process Reporting**](#enabling-process-reporting) section for more details.
## Reporting data model
You can only create or modify the reporting data model in non-committed versions, as committed versions are read-only.
1. Open the branch view.

2. If the current project version is committed, start a new version.


3. Make sure the new work-in-progress branch is selected, then go back to the process definition page.
4. Click on the Data Model icon and navigate in the object model to the target parameters.
5. Set up the business data structure to be reported by using the "Use in reporting" flag.
* Click "Show details".
* Click "Use in reporting".


You can do this also for each parameter individually.

There are three parameter structures that you can report:
**Singleton** or primitive, for which a single value is saved for each process instance. They can be of the types number, string or Boolean and will all be found in the reporting table named `params_{process_alias}`.
**Array of primitives**, in which several rows are saved for each process instance, in a dedicated table (one value per row).
**Array of objects**, in which the system extracts one or more “leaves” from each object of an array of objects. Also saved as a dedicated table.
### Primitive parameters reporting
In the following example, there are 3 simple parameters that will be extracted: `loan_approvalFee`, `loan_currency` and `loan_downPayment`.
They will be reported in the table `params_{process_alias}`, one row per instance.

### Arrays of primitives reporting
In the following example, the applicant can submit more than one email address, so each email will be extracted to a separate row in a dedicated table in the reporting database.

Extracting arrays is computationally intensive, do not use them if the only purpose is just to aggregate them afterward. Aggregation should be performed in the process, not in the reporting stage.
### Array of objects reporting
In this example, the applicant can have several real estate assets, so a subset of data items (`currentValue`, `mortgageBalance`, `propertyType`) will be extracted for each one of them.

Extracting arrays of objects is even more is computationally intensive, do not use them if the only purpose is just to aggregate them afterward. Aggregation should be performed in the process, not in the reporting stage.
## Enabling process reporting
Enable reporting by checking the “Use process in reporting” button on the settings/general page of each process.
* Modifying the data model of a process version has no impact until the moment the version or build of the project is set in the "Active policy" tab and is also set to "use\_in\_reporting".
The reporting refresh schedule is set for a fixed interval (currently 5 minutes):
* No processing overlaps are allowed. If processing takes more than 5 minutes, the next processing is automatically postponed until the current one is finished.
* The number of Spark executors is automatically set by the reporting plugin depending on the volume of data to be processed, up to a certain fixed limit that is established in the cloud environment. This limit can be adapted depending on your needs.
* Rebuilding the whole history for a process (if the master data model, process name or the Published version change) typically takes more time. It is better to make these changes after the working hours.
## Reporting database
### Main tables
Common fields for joins:
* `inst_id`: Unique identifier for each process instance
* `query_time`: Timestamp for when the plugin extracts data

**Useful fields from instances table**:
* `date_started/finished` timestamps
* `process_alias` (process name with "\_" instead of spaces)
The published version alias will be used for all the reported versions.
* State of the process (started, finished, etc.)
* `context_name`: Useful if the process is started by another process
**Useful fields from current\_nodes table**:
* `node_started/finished` timestamps for the nodes
* `node_name`, `node_type`
* `swimlane` of the current node
* `prev_node_end`: For calculating when a token is waiting for another process branch
**Useful fields from token\_history table**:
Similar to `current_nodes` but includes all nodes in the instance history.
### Parameters and object tables
Common fields, on which the joins are built:
* `inst_id`, unique identifier for each process instance
* `query_time`, recorded at the moment the plugin extracts data from the database

For the `params_` table, there is a single row per process instance. For arrays and arrays of objects tables, there are multiple rows per process instance.
## Using Superset for data exploration
### Data sources
The **Data** tab represents the sources of all information:
* Databases
* CSV files
* Tables
* Excel files
Reporting plugin can be used with Superset by connecting it with a PostgreSQL DB.
### Charts
Charts represent the output of the information. There are multiple visualization charts/ plugins available.
### Dashboards
With the use of dashboards, you can share persuading flows, show how metrics change in various scenarios and match your company efforts with logical, evidence‐based visual indicators.
### Datasets
Contains all the information for extracting and processing data from the DB, including SQL queries, calculated metrics information, cache settings, etc. Datasets can also be exported / imported.
### Connecting to a database
Before using Superset, ensure you have a PostgreSQL database installed and configured. Follow these guides for setup:
[FlowX Engine DB configuration](../../../../../setup-guides/flowx-engine-setup-guide/engine-setup)
[Reporting DB configuration](../../../../../setup-guides/plugins-setup-guide/reporting-setup)
Read-only users should be used in production in the reporting-plugin cronjob.
To connect Superset to a database, follow the next steps:
1. From the Toolbar, hover your cursor over the **"+"** icon, then select **Data**, and then select **Connect Database**.

2. The **Connect a database** window appears. Select the appropriate **database card** (in this case - PostgreSQL).

3. After you selected the DB, click **Connect this database with a SQLAlchemy URI string instead?**.
4. Fill in the **SQLALCHEMY URI** and then click **Connect**.

The **SQLAlchemy URI** for **reporting-db** should be in this format: `postgresql://postgres:XXXXXXXXXX@reporting-plugin-postgresql:{{port}}/reporting`.
### Creating and configuring charts
There are multiple ways in which you can create/configure a chart.
#### Creating charts using Datasets tab
To create a Chart using the first method, you must follow the next steps:
1. From the top toolbar, select **Data** and then **Datasets**.
You need to have a dataset added to Superset first. From that particular dataset you can build a visualization.
2. Select the desired **dataset**.
3. On the **explore** page, choose the **visualization type** and click **Create chart**.

4. When you select a dataset, by default **table** visualization type is selected.
To view all the existent visualization types, click **View all charts**, the charts' gallery will open.

#### Creating charts using Chart gallery
Using the Chart gallery is a useful method when you are not quite sure about which chart will be best for you.
To create a Chart using the second method, you must follow the next steps:
1. Select the **"+"** icon from the top toolbar and choose **Chart**.
2. Choose the **dataset** and **chart type**.
3. Review the description and example graphics of the selected chart, then click **Create new chart**.
If you wish to explore all the chart types available, filter by **All charts**. The charts are also grouped by categories.

### Configuring a Chart
Configure the **Query** fields by dragging and dropping relevant columns to the matching fields. Note that time and query form attributes vary by chart type.
### Exporting/importing a Chart
You can export and import charts to help you analyze your data and manipulate dashboards. To export/import a chart, follow the next steps:
1. Open **Superset** and navigate to **Charts** from the top navigation bar.
2. Select the desired **chart** and click the **breadcrumbs** menu in the top-right corner.
3. Choose an export option: .CSV, .JSON, or Download as image.

**Table example**:
* **Time** - time related form attributes
* **Query** - query attributes
* **Dimensions** - one or many columns to group by
* **Metrics** - metrics to display
* **Percentage metrics** - metrics for which percentage of total are to be displayed, calculated from only data within the row limit
* **Filters** - metric used for filtering
* **Sort by** - metric used to define how the top series are sorted if a series or row limit is present
* **Row limit** - limits the number of rows that get displayed

### Creating a dashboard
To create a dashboard follow the next steps:
1. Create a new chart and save it to a new dashboard.
2. To publish, click **Save and go to Dashboard**.

For details on how to configure the FlowX.AI reporting plugin, check the following section:
# WYSIWYG editor
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/plugins/wysiwyg
FlowX Designer's WYSIWYG ("What You See Is What You Get") editor enables you to create and modify notification and document templates without the need for complicated coding from the developers. WYSIWYG editors make the creation/editing of any type of document or notification easier for the end-user.
Displaying how the document will be published or printed on the screen, the user can adjust the text, graphics, photos, or other document/notification elements before generating the final output.
## WYSIWYG Components
### Header
The formatting head of the editor allows users to manipulate/format the content of the document.
### Body
The Body is the main part of the editor where you can edit your template.
After you defined some parameters in the **Data Model** tab, you can type "**#**" in the body to trigger a dropdown where you can choose which one you want to use.
### Source
The **Source** button can be used to switch to the HTML editor. You can use the HTML view/editor as a debugging tool, or you can edit the template directly by writing code here.

## Document Templates
One of the main features of the [document management plugin](../core-extensions/content-management/documents-plugin/documents-plugin-overview) is the ability to generate new documents based on custom templates and prefilled with data related to the current process instance.

## Notification Templates
Notification WYSIWYG body has some additional fields (other than documents template):
* **Type** - that could be either MAIL or SMS (SMS, only if there is an external adapter)
* **Forward on Kafka** - if this box is checked, the notification is not being sent directly by the plugin to the destination, but forwarded to another adapter

## Data Model
Using the data model, you can define key pair values (parameters) that will be displayed and reused in the body. Multiple parameters can be added:
* STRING
* NUMBER
* BOOLEAN
* OBJECT
* ARRAY (which has an additional `item` field)

Parameters can be defined as mandatory or not. When you try to generate a template without filling in all the mandatory parameters, the following error message will be displayed: "*Provided data cannot be empty if there are any required properties defined."*
# Third-party components
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/third-party-components
FlowX.AI uses a number of third-party software components
## Overview
FlowX.AI relies on various third-party components to deliver its functionality. These components fall into two categories:
* **Embedded components**: Third-party software packaged and managed by FlowX.AI
* **Client-managed components**: Third-party software that you deploy and maintain
For optimal performance and reliability, our internal QA process validates new releases using specific versions. While you can explore alternative versions that suit your requirements, we recommend referring to the compatibility matrix for guidance.
## Embedded components
Embedded components are packaged with FlowX.AI and managed by our platform. You don't need to deploy or maintain these separately.
### Authorization
**License**: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0)
An open-source permissions database inspired by Google's Zanzibar paper. Powers FlowX.AI's multi-tenant authorization system with fine-grained access control and relationship-based permissions.
**Key capabilities**: Google Zanzibar-inspired authorization, ReBAC, global consistency, reverse lookup, sub-millisecond response times
### AI Platform components
**License**: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0) with Commons Clause
Distributed graph database for Knowledge Graph service, AI Agent state management, and multi-agent collaboration.
**License**: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0)
Vendor-agnostic telemetry data collection, processing, and export for comprehensive observability.
**License**: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0)
Industry-standard monitoring and alerting system for cloud-native environments.
## Client-managed components
You are responsible for deploying, configuring, and maintaining these components in your environment.
### Core infrastructure
**License**: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0)\
**Supported Version**: 26.x
Open-source identity and access management solution enabling single sign-on for modern applications.
**License**: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0)\
**Supported Version**: 3.9.x
Distributed event streaming platform for high-volume, real-time data feeds with fault tolerance and low latency.
**License**: [PostgreSQL License](https://www.postgresql.org/about/licence/)\
**Supported Version**: 16.2.x
Free and open-source relational database emphasizing extensibility and SQL compliance.
**License**: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0)\
**Supported Version**: 7.0.x
Document-oriented NoSQL database for business process data and configuration storage.
**License**: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0)\
**Supported Version**: 7.4.x
Fast in-memory key-value store for caching and pub/sub messaging with sub-millisecond response times.
**License**: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0)\
**Supported Version**: 2024-02-26T09-33-48Z
High-performance object storage solution compatible with Amazon S3 APIs.
### Infrastructure & monitoring
**NGINX Ingress Controller**\
**License**: [BSD-2-Clause](https://nginx.org/LICENSE) | **Version**: 1.2.x
Web server, reverse proxy, and load balancer for routing web traffic from SPAs to backend services and FlowX.AI Engine.
**Elasticsearch (EFK Stack)**\
**Version**: 8.x
Distributed search and analytics engine for centralized data storage and business process transaction searching.
Elasticsearch uses multiple licenses: AGPL v3.0, Server Side Public License v1, and Elastic License 2.0. Review the [official licensing documentation](https://www.elastic.co/licensing) for compliance requirements.
**Apache Superset**\
**License**: [Apache 2.0](https://superset.apache.org/licensing/)
Business intelligence web application for data exploration and visualization, from simple charts to detailed dashboards.
### Commercial components
**Supported Versions**: 21c, 23ai
Enterprise relational database management system for mission-critical workloads.
Oracle Database requires commercial licensing. Contact Oracle for licensing information.
## Compatibility matrix
### Third-party open-source components
| Component | Recommended Version |
| ------------------------ | -------------------- |
| Keycloak | 26.x |
| Kafka | 3.9.x |
| PostgreSQL | 16.2.x |
| MongoDB | 7.0.x |
| Redis | 7.4.x |
| NGINX Ingress Controller | 1.2.x |
| Elasticsearch | 8.x |
| MinIO | 2024-02-26T09-33-48Z |
### Commercial components
| Component | Recommended Version | License |
| --------------- | ------------------- | ---------- |
| Oracle Database | 21c, 23ai | Commercial |
## Deprecation notice
The following versions are no longer supported:
* Keycloak versions older than 26
* Kafka versions older than 3.9
* Redis versions older than 7.4
## Support information
FlowX.AI supports any version of the listed prerequisites. If you encounter compatibility issues, please [open a support ticket](https://support.flowx.ai/) and our team will address any identified bugs through our standard support process.
## Related resources
Learn about Kafka concepts and implementation
Understanding NGINX in FlowX.AI architecture
# Business filters
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/user-roles-management/business-filters
An optional attribute, from the authorization token, that can be set to restrict access to process instances based on a business specific value (for example, bank branch name).
Business filters provide an additional layer of access control for runtime process instances by restricting access based on business-specific attributes such as bank branch, department, or region.
**Important distinction:** Business filters only apply to **runtime access** (container apps, task manager). They do not affect access in **FlowX Designer**, which is controlled by workspace and project-level permissions.
**Use case example**: in a banking app, you might need to ensure that only users from a specific branch can view and interact with process instances initiated from that branch.
## How business filters work
Business filters work in combination with runtime permissions, not as a replacement for them.
### Access control by context
| Context | Access controlled by |
| ---------------------------- | -------------------------------------------------------- |
| **FlowX Designer** | Workspace and project-level permissions only |
| **Container apps (runtime)** | Runtime permissions AND business filters (both required) |
Business filters add an additional restriction layer but do not bypass existing runtime permissions. Both conditions must be satisfied for a user to access a process instance.
## Prerequisites
Before configuring business filters, ensure you have:
* Access to your identity provider (IdP) configuration
* Organization administrator role to manage user attributes
* Understanding of your business access requirements (for example, which users should access which process instances)
## Configuration
Follow these steps to implement business filters in your app.
### 1. Configure the identity provider mapper
Configure a mapper in your identity management platform to add the business filter attribute to the authorization token as a claim. This mapper creates the connection between user attributes and the token claim that gets evaluated at runtime.
The business filter attribute must always be available on the token under the same key. Inconsistent mapper configuration can cause access control issues in production environments.
View detailed instructions for configuring the user attribute mapper
After configuration, the `businessFilter` attribute becomes visible at the user level:

### 2. Assign business filter values to users
Assign business filter values to users through one of the following methods:
* **Identity provider**: Directly in the user profile settings
* **FlowX Designer**: Through the user management interface
**Important:** Business filter values must be set directly on user attributes in your identity provider, not only inherited from groups.
When assigning business filters in FlowX Designer, you must use the `businessFilter` key.

Users can have multiple business filter values assigned. For example: `["branch_01", "branch_02"]`
**Technical note:** While group-level attributes can propagate to the JWT via mappers, Task Manager uses a different mechanism to filter assignable users. It queries user attributes directly from the identity provider when listing users for task assignment. This means business filters must exist as direct user attributes, not only as group memberships.
### 3. Set business filters in process definition
Add a [**business rule action**](../../building-blocks/actions/business-rule-action/business-rule-action) in your process definition to store the business filter values in the process parameters.
**Syntax:**
Single value:
```javascript theme={"system"}
output.put("task", {"businessFilters": ["branch_01"]});
```
Multiple values:
```javascript theme={"system"}
output.put("task", {"businessFilters": ["branch_01", "branch_02"]});
```
**Important:** When configuring the business rule action node that sets `task.businessFilters`, you must also enable the **Update Task Manager** toggle in the node configuration. This ensures that the business filter values are properly propagated to Task Manager.
**Best practice:** Set business filters early in the process flow, typically on an automatic action at the start of the process.
## Runtime behavior
Once business filters are configured on a process instance, access restrictions apply based on the context:
We have a process instance with the business filter value `"branch_01"` (added in the process definition) and a user with the business filter value `"branch_01"`. The second user does not have the business filter value.


Business filters are applied to the process instance at runtime.
* in the left screen there is a user with the business filter value `"branch_01"` (the process instance is visible to this user)
* in the right screen there is a user without the business filter value (the process instance is not visible to this user)
### Task manager
Only users with matching business filter values can view and interact with tasks from the process instance.

When assigning or reassigning tasks to other users, the list of assignable users is filtered based on business filters. The system queries user attributes directly from the identity provider to determine which users can be assigned to a task.
Business filter checks apply to the tasks themselves. Custom views remain controlled by Designer permissions.
### Container apps
Only users with matching business filter values can execute READ operations on the process instance, such as:
* GET status
* GET details
### Designer
Business filters do not apply in FlowX Designer. All users with appropriate project permissions can view the process instance regardless of their business filter values.
## Example scenario
This example demonstrates how to restrict access to process instances based on bank branch affiliation.
### Setup
**Step 1**: configure the identity provider mapper for the `businessFilter` attribute.
**Step 2**: assign business filter values to users:
* User A: `"branch_downtown"`
* User B: No business filter assigned
**Step 3**: add a business rule in your process definition:
```javascript theme={"system"}
output.put("task", {"businessFilters": ["branch_downtown"]});
```
### Expected behavior
When a process instance runs with this configuration:
| User | Business filter | Runtime access | Designer access |
| ------ | ------------------- | ----------------------------------------------- | ----------------------------------------- |
| User A | `"branch_downtown"` | ✓ Can access | ✓ Can access (if has project permissions) |
| User B | None | ✗ Cannot access (even with runtime permissions) | ✓ Can access (if has project permissions) |
This demonstrates that:
* Business filters enforce runtime restrictions
* Designer access remains independent of business filters
* Runtime permissions alone are insufficient without matching business filter values
# Swimlanes
Source: https://docs.flowx.ai/5.1/docs/platform-deep-dive/user-roles-management/swimlanes
Swimlanes provide a way of grouping process nodes by process participants.
Using swimlanes we can make sure only certain user roles have access to certain process nodes.
In certain scenarios, it is necessary to restrict access to specific process [**nodes**](../../building-blocks/node/) based on user roles. This can be achieved by organizing nodes into different swimlanes.
Each swimlane can be configured to grant access only to users with specific roles defined in the chosen identity provider platform.

Depending on the type of node added within a swimlane, only users with the corresponding swimlane roles will have the ability to initiate process instances, view process instances, and perform actions on them.
[Scopes and roles for managing processes](../../../setup-guides/flowx-engine-setup-guide/configuring-access-roles-for-processes)

When creating a new process definition, a default swimlane will automatically be added.

As the token moves from one node to the next, it may transition between swimlanes. If a user interacting with the process instance no longer has access to the new swimlane, they will observe the process in read-only mode and will be unable to interact with it until the token returns to a swimlane they have access to.
Users will receive notifications when they can no longer interact with the process or when they can resume actions on it.
# Release Notes
Source: https://docs.flowx.ai/release-notes/overview
🚀 Welcome to FlowX.AI Release Notes.
Stay updated with the latest features and improvements. Follow the Release Notes space to discover what's happening in the FlowX.AI world and the exciting updates we have for you.
**Long Term Support (LTS) Versions:** LTS versions receive extended support with security updates and critical bug fixes. Currently, **versions 4.7.x and 5.1.0** are our LTS releases, recommended for production environments requiring stability and long-term support.
🚀 Introducing Release 5.2.0 - Released on **November 10th, 2025**
🛡️ **LTS Release** 5.1.1 - Released on **November 10th, 2025**
🛡️ **LTS Release** 4.7.9 - Released on **October 16th, 2025**
🛡️ **LTS Release** 5.1.0 - Released on **October 2nd, 2025**
🛡️ **LTS Release** 4.7.8 - Released on **September 16th, 2025**
🛡️ **LTS Release** 4.7.7 - Released on **August 20th, 2025**
🚀 Introducing Release 5.0.0 - Released on **July 31st, 2025**
🛡️ **LTS Release** 4.7.6 - Released on **July 18th, 2025**
🛡️ **LTS Release** 4.7.5 - Released on **June 19th, 2025**
🛡️ **LTS Release** 4.7.4 - Released on **May 15th, 2025**
🛡️ **LTS Release** 4.7.3 - Released on **April 14th, 2025**
🛡️ **LTS Release** 4.7.2 - Released on **March 26th, 2025**
🛡️ **LTS Release** 4.7.1 - Released on **March 7th, 2025**
🛡️ **LTS Release** 4.7.0 - Released on **February 24th, 2025**
🛡️ **LTS Release** 4.6.1 - Released on **February 7th, 2025**
🛡️ **LTS Release** 4.6.0 - Released on **January 23rd, 2025**
🚀 Introducing Release 4.1.5 - Released on **September 23rd, 2024**
🚀 Introducing Release 4.1.4 - Released on **September 6th, 2024**
🚀 Introducing Release 4.1.3 - Released on **August 12th, 2024**
🚀 Introducing Release 4.1.2 - Released on **June 8th, 2024**
🚀 Introducing Release 4.1.1 - Released on **June 17th, 2024**
🚀 Introducing Release 4.1.0 - Released on **May 30th, 2024**
🚀 Introducing Release 4.0.0 - Released on **April 18th, 2024**
***
Explore the latest enhancements and fixes introduced in June 2024.
Explore the latest enhancements and fixes introduced in January 2024.
Explore the latest enhancements and fixes introduced in December 2023.
Explore the latest enhancements and fixes introduced in November 2023.
Discover the significant changes and improvements made in November 2023.
Discover the significant changes and improvements made in October 2023.
Discover the significant changes and improvements made in October 2023.
Discover the significant changes and improvements made in September 2023.
Discover the significant changes and improvements made in September 2023.
Discover the significant changes and improvements made in July 2023.
Discover the significant changes and improvements made in April 2023.
Discover the significant changes and improvements made in April 2023.
Discover the significant changes and improvements made in February 2023.
# Deployment guidelines v5.1.1
Source: https://docs.flowx.ai/release-notes/v5.x/v5.1.x-lts/deployment-guidelines-v5.1.1
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

## Upgrade overview
FlowX.AI 5.1.1 is a maintenance release for the 5.1.x LTS line. This release can be deployed as a direct upgrade from 5.1.0 with no breaking changes or configuration updates required.
**5.1.0 → 5.1.1**: Direct upgrade with no breaking changes
## Component versions
| Component | 5.1.1 | 5.1.0 | 5.0.0 | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 |
| -------------------------- | ----------- | ------- | ------ | ------- | ------ | ------ | ------ | ------- |
| **process-engine** | **9.64.3** | 9.63.0 | 9.29.2 | 8.24.1 | 8.23.3 | 8.23.2 | 8.22.3 | 8.21.11 |
| **admin** | **9.66.5** | 9.65.0 | 9.25.2 | 7.18.4 | 7.17.3 | 7.16.3 | 7.15.2 | 7.12.2 |
| **designer** | **9.159.5** | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **cms-core** | **9.36.3** | 9.35.0 | 9.21.2 | 5.11.1 | 5.10.3 | 5.9.2 | 5.8.2 | 5.5.1 |
| **scheduler-core** | **9.26.1** | 9.25.0 | 9.12.0 | 5.7.1 | 5.6.2 | 5.5.2 | 5.4.0 | 5.1.1 |
| **events-gateway** | **9.26.1** | 9.25.0 | 9.12.0 | 5.7.1 | 5.6.2 | 5.5.2 | 5.4.0 | 5.1.1 |
| **notification-plugin** | **9.29.1** | 9.28.0 | 9.14.2 | 6.8.1 | 6.7.2 | 6.6.2 | 6.5.0 | 6.2.1 |
| **document-plugin** | **9.35.1** | 9.34.0 | 9.17.2 | 6.10.1 | 6.9.2 | 6.8.2 | 6.7.0 | 6.4.1 |
| **task-management-plugin** | **9.34.2** | 9.33.0 | 9.14.2 | 7.9.2 | 7.8.2 | 7.7.2 | 7.6.0 | 7.3.1 |
| **data-search** | **9.23.1** | 9.22.0 | 9.12.1 | 4.7.1 | 4.6.2 | 4.5.2 | 4.4.0 | 4.1.1 |
| **audit-core** | **9.30.1** | 9.29.1 | 9.15.2 | 6.8.1 | 6.7.2 | 6.6.2 | 6.5.0 | 6.1.1 |
| **advancing-controller** | **9.25.1** | 9.24.0 | 9.11.0 | 4.7.1 | 4.6.2 | 4.6.2 | 4.4.0 | 4.1.1 |
| **integration-designer** | **9.50.0** | 9.49.1 | 9.26.2 | 2.16.1 | 2.15.3 | 2.14.2 | 2.13.0 | 2.9.0 |
| **application-manager** | **9.73.6** | 9.72.0 | 9.27.3 | 2.23.1 | 2.22.3 | 2.21.2 | 2.2 | |
| **runtime-manager** | **9.73.6** | 9.72.0 | 9.27.3 | 2.23.1 | 2.22.3 | 2.21.2 | 2.20.2 | 2.17.2 |
| **data-sync** | **9.22.1** | 9.21.0 | 9.11.0 | 2.10.2 | 2.9.2 | 2.8.1 | 2.7.1 | 2.4.1 |
| **authorization-system** | **9.34.2** | 9.33.0 | 9.14.2 | - | - | - | - | - |
| **nosql-db-runner** | **9.22.1** | 9.21.0 | 9.11.0 | - | - | - | - | - |
### Embedded components
* **SpiceDB**
* **DGraph**
### Renderers
| Component | 5.1.1 | 5.1.0 | 5.0.0 | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 |
| ----------------------------- | ----------- | ------- | ------ | ------- | ------ | ------ | ------ | ------ |
| **@flowx/angular-sdk** | **9.159.5** | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **@flowx/angular-theme** | **9.159.5** | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **@flowx/angular-ui-toolkit** | **9.159.5** | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **@flowx/react-sdk** | **9.159.5** | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **@flowx/react-theme** | **9.159.5** | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **@flowx/react-ui-toolkit** | **9.159.5** | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **iOS renderer** | **9.0.5** | 9.0.4 | 9.0.0 | 4.0.29 | 4.0.29 | 4.0.29 | 4.0.21 | 4.0.19 |
| **Android renderer** | **9.0.3** | 9.0.2 | 9.0.0 | 4.0.29 | 4.0.29 | 4.0.28 | 4.0.24 | 4.0.23 |
### Plugins
| Component | 5.1.1 | 5.1.0 | 5.0.0 | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 |
| -------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 |
| **reporting-plugin** | 0.2.3 | 0.2.3 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 |
### AI Platform
| Component | 5.1.1 | 5.1.0 | 5.0.0 | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 |
| ------------------------------- | --------- | ----- | ------ | ------ | ------ | ------ | ------ | ------ |
| **ai-assistant** | **9.2.5** | 9.2.4 | 9.2.3 | 1.8.22 | 1.8.22 | 1.8.21 | 1.8.20 | 1.8.19 |
| **di-platform** | 9.3.1 | 9.3.1 | 9.0.12 | 1.4.6 | 1.4.6 | 1.4.5 | 1.4.5 | 1.4.3 |
| **ai-platform-ai-developer** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-connected-graph** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-knowledge-graph** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-agents** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-conversations** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-models** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-tenants** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-planner** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-ai-analyst** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-ai-designer** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-agent-builder** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-binaries** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
For previous FlowX.AI releases, please refer to the [Release Notes overview](../../overview).
## Deployment notes
### Standard deployment
This maintenance release follows standard FlowX.AI deployment procedures with no special considerations:
1. Update container images to 5.1.1 versions listed in the table
2. Deploy services using your standard deployment process
3. Verify deployment via **FlowX Designer > Platform Status**
### No configuration changes required
No environment variable changes\
No database migrations\
No breaking changes\
Compatible with existing 5.1.0 processes and configurations
### What's included in 5.1.1
This maintenance release includes:
* **WCAG 2.1 Level AA compliance** across all web components (28 improvements)
* **3 customer-reported issue fixes** for production environments
* **62 proactive quality improvements** identified through internal testing
* **Platform enhancements** for SSE handling, CMS tags, and infrastructure
For detailed information on all changes, see the [FlowX.AI 5.1.1 Release Notes](./v5.1.1-november-2025).
## Infrastructure requirements
Infrastructure requirements remain unchanged from 5.1.0. Existing infrastructure can support 5.1.1 without modifications.
### Minimum requirements
The platform requirements are the same as FlowX.AI 5.1.0:
* **Kubernetes**: 1.26+
* **Kafka**: 3.4+
* **Elasticsearch**: 8.11+
* **Redis**: 7.2+
* **PostgreSQL**: 15+ (for FlowX Database)
* **MongoDB**: 7.0+ (for process data storage)
## Support
For deployment assistance or issues:
* Contact FlowX.AI Support
* Check the [FlowX.AI documentation](https://docs.flowx.ai)
* Review the [Platform Status guide](../../5.1/docs/flowx-designer/managing-a-project-flow/monitoring-and-debugging-a-process-instance)
# Deployment guidelines v5.1.0
Source: https://docs.flowx.ai/release-notes/v5.x/v5.1.x-lts/v5.1.0-september-2025/deployment-guidelines-v5.1
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

## Component versions
| Component | 5.1.0 | 5.0.0 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| -------------------------- | ----------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ----- |
| **process-engine** | **9.63.0** | 9.29.2 | 8.23.2 | 8.22.3 | 8.21.1 | 8.17.0 | 8.15.2 | 8.13.0 | 8.9.0 | 8.5.1 | 8.3.1 | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **9.65.0** | 9.25.2 | 7.17.3 | 7.16.3 | 7.15.2 | 7.12.2 | 7.9.2 | 7.8.13 | 7.8.5 | 7.7.6 | 7.5.1 | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **9.153.6** | 9.69.0 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **9.35.0** | 9.21.2 | 5.10.3 | 5.9.2 | 5.8.2 | 5.5.1 | 5.4.16 | 5.4.12 | 5.4.8 | 5.3.3 | 5.2.11 | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **9.25.0** | 9.12.0 | 5.6.2 | 5.5.2 | 5.4.0 | 5.1.1 | 5.0.13 | 5.0.11 | 5.0.10 | 5.0.4 | 5.0.2 | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **9.25.0** | 9.12.0 | 5.6.2 | 5.5.2 | 5.4.0 | 5.1.1 | 5.0.19 | 5.0.17 | 5.0.16 | 5.0.7 | 5.0.5 | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **9.28.0** | 9.14.2 | 6.7.2 | 6.6.2 | 6.5.0 | 6.2.1 | 6.1.15 | 6.1.13 | 6.1.12 | 6.1.3 | 6.1.0 | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **9.34.0** | 9.17.2 | 6.9.2 | 6.8.2 | 6.7.0 | 6.4.1 | 6.3.18 | 6.3.16 | 6.3.13 | 6.3.4 | 6.3.1 | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **task-management-plugin** | **9.33.0** | 9.14.2 | 7.8.2 | 7.7.2 | 7.6.0 | 7.3.1 | 7.2.17 | 7.2.15 | 7.2.14 | 7.2.6 | 7.2.2 | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **9.22.0** | 9.12.1 | 4.6.2 | 4.5.2 | 4.4.0 | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.13 | 4.0.6 | 4.0.4 | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **9.29.1** | 9.15.2 | 6.7.2 | 6.6.2 | 6.5.0 | 6.1.1 | 6.0.17 | 6.0.15 | 6.0.14 | 6.0.6 | 6.0.4 | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **advancing-controller** | **9.24.0** | 9.11.0 | 4.6.2 | 4.6.2 | 4.4.0 | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.12 | 4.0.5 | 4.0.3 | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **9.49.1** | 9.26.2 | 2.15.3 | 2.14.2 | 2.13.0 | 2.9.0 | 2.7.2 | 2.6.0 | 2.3.16 | 2.3.9 | 2.3.2 | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **9.72.0** | 9.27.3 | 2.22.3 | 2.21.2 | 2.20.2 | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **9.72.0** | 9.27.3 | 2.22.3 | 2.21.2 | 2.20.2 | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **9.21.0** | 9.11.0 | 2.9.2 | 2.8.1 | 2.7.1 | 2.4.1 | 2.3.2 | 2.2.11 | 2.2.9 | 2.2.2 | 2.1.0 | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **authorization-system** | **9.33.0** | 9.14.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **nosql-db-runner** | **9.21.0** | 9.11.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Embedded components
* **SpiceDB**
* **DGraph**
### Renderers
| Component | 5.1.0 | 5.0.0 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ----------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | --------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ----- |
| **@flowx/angular-sdk** | **9.153.6** | 9.69.0 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **9.153.6** | 9.69.0 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **9.153.6** | 9.69.0 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **9.153.6** | 9.69.0 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **9.153.6** | 9.69.0 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **9.153.6** | 9.69.0 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **9.153.6** | 9.69.0 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **9.153.6** | 9.69.0 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **iOS renderer** | **9.0.4** | 9.0.0 | 4.0.29 | 4.0.29 | 4.0.29 | 4.0.21 | 4.0.19 | 4.0.14 | 4.0.7 | 4.0.7 | 4.0.5 | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **9.0.2** | 9.0.0 | 4.0.29 | 4.0.29 | 4.0.28 | 4.0.24 | 4.0.23 | 4.0.15 | 4.0.13 | 4.0.13 | 4.0.12 | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Plugins
| Component | 5.1.0 | 5.0.0 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| -------------------- | --------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ----- | ------ | ------ | ------ | ------ |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **reporting-plugin** | **0.2.3** | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
## AI Platform
| Component | 5.1.0 | 5.0.0 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ------------------- | --------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ----- | ------ | ------ | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-assistant** | **9.2.4** | 9.2.3 | 1.8.22 | 1.8.21 | 1.8.19 | 1.8.18 | 1.8.17 | 1.8.12 | 1.8.9 | 1.8.2 | 1.7.2 | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **9.3.1** | 9.0.12 | 1.4.6 | 1.4.6 | 1.4.5 | 1.4.5 | 1.4.5 | 1.4.3 | 1.4.1 | 1.2.35 | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **9.3.0** | 9.0.1 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **connected-graph** | **9.3.0** | 9.0.1 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **knowledge-graph** | **9.3.0** | 9.0.1 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **agents** | **9.3.0** | 9.0.1 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **conversations** | **9.3.0** | 9.0.1 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **models** | **9.3.0** | 9.0.1 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **tenants** | **9.3.0** | 9.0.1 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **planner** | **9.3.0** | 9.0.1 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **ai-designer** | **9.3.0** | 9.0.1 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **ai-analyst** | **9.3.0** | 9.0.1 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Supported Versions |
| ---------------- | -------------------- | ------------------ |
| 5.1.0 | Keycloak | 26+ |
| 5.1.0 | Kafka | 3.8 - 3.9 |
| 5.1.0 | PostgreSQL | 16 - 17 |
| 5.1.0 | Oracle Database | 21c, 23ai |
| 5.1.0 | MongoDB | 7 - 8 |
| 5.1.0 | Redis | 7.4 - 8.0 |
| 5.1.0 | Elasticsearch | 8 - 9 |
| 5.1.0 | Angular (Web SDK) | 19.x |
| 5.1.0 | React (Web SDK) | 18.x |
Starting FlowX 5.0, the following versions of 3rd Party Dependencies are no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.8
* Redis versions older than 7.4
# Post-deployment configuration
Source: https://docs.flowx.ai/release-notes/v5.x/v5.1.x-lts/v5.1.0-september-2025/migrating-from-v4.7.x-to-5.1/configuration-and-migration
This section contains the steps in order that we recommend for post-deployment configuration of FlowX.AI.
## Redis cache clearing
**Cache Clearing**:
* FlowX.AI 5.1.0 removes process definition versioning. Cache must be cleared to remove legacy cached classes.
* When you start the runtime-manager on version 5.x, the library-to-library migration runs automatically. You must clear the cache after this step because a new field is added to the build mongo document, which is required for various operations.
### Endpoint
`POST {{baseUrlAdmin}}/api/internal/cache/clear`
### Body:
```json theme={"system"}
{
"cacheNames": [
"flowx:core:cache"
]
}
```
## Authentication & authorization
### Add users to default workspace
**Process**:
1. **User Re-login**: Existing configurators must log into FlowX.AI Designer once to create user references in FlowX.AI database
2. **Workspace Assignment**: Organization admin assigns users to the default workspace to reestablish access to existing assets and resources
**Access Restoration**: Without workspace assignment, existing users will lose access to previously available resources and projects.
This step ensures business continuity by maintaining user access to existing FlowX.AI assets in the new workspace-based architecture.
### Role mapping guide
FlowX.AI 4.7.x roles stored in Keycloak are not automatically migrated. Manual role assignment is required.
**FlowX.AI 4.7.x** → **FlowX.AI 5.1.0**
* `FLOWX_ADMIN` → `workspace_admin`
* `FLOWX_CONFIGURATOR` → `workspace_user` or `project_editor`
* `FLOWX_UI_DESIGNER` → `theme_editor`
* `FLOWX_VIEWER` → `project_viewer`
* Custom Keycloak roles → Manual review required
**Important Changes**
* Roles are now workspace-scoped
* More granular permission structure
* Database-stored instead of token-based
* New role hierarchy requires review
### Migration process
Document all existing Keycloak roles and their assigned users before migration
Determine appropriate FlowX.AI 5.1.0 roles for each user based on their current access needs
Decide how to organize users into workspaces based on business requirements
Use the FlowX.AI 5.1.0 interface to assign appropriate roles to users in their respective workspaces
Test user access to ensure proper permissions are granted and restrictions are enforced
### For existing customers
The auth-system will automatically:
* Create default organization and workspace
* Import the admin user from Keycloak
* Assign organization admin privileges
* Set up default roles and groups
The data-sync service will:
* Migrate existing projects from app-manager database to CAS database
* Assign all existing resources to the default workspace
* Preserve all existing functionality
* Require temporary write access to CAS database
**Note**: This is the only exception to the exclusive write access rule.
***
## Header migration: Fx-BuildId to Fx-Build-App-Version-Id
### Background
The header `Fx-BuildId` has been renamed to `Fx-Build-App-Version-Id` to accurately reflect that it contains an application version identifier, not a build identifier.
### Migration strategy
During the transition period, both headers are supported:
* **New messages**: Include `Fx-Build-App-Version-Id` with the application version ID
* **Legacy support**: `Fx-BuildId` is still accepted for backward compatibility
* **Priority**: FlowX.AI platform reads `Fx-Build-App-Version-Id` first, then falls back to `Fx-BuildId` if not present
### Implementation guidelines
1. **New integrations**: Use `Fx-Build-App-Version-Id` header
2. **Existing integrations**: Will continue to work during migration period
3. **Client considerations**: Existing client instances may continue sending `Fx-BuildId` until they are updated
### Timeline considerations
Client applications with long-running instances may continue using the legacy `Fx-BuildId` header until those instances complete their processes and are updated to use the new header format.
# Update environment variables
Source: https://docs.flowx.ai/release-notes/v5.x/v5.1.x-lts/v5.1.0-september-2025/migrating-from-v4.7.x-to-5.1/environment-variables
Update environment variables for all existing FlowX.AI services
Update environment variable configurations for all existing FlowX.AI services to support version 5.1.0 compatibility.
## Audit core
Elasticsearch configuration migrates from `SPRING_ELASTICSEARCH_*` to `FLOWX_ELASTICSEARCH_*` namespace with enhanced index management.
### Variables to remove & replace
| Remove This Variable | Replace With | Old Default | New Default |
| ----------------------------------------------- | -------------------------------------------- | ------------ | ------------ |
| `SPRING_ELASTICSEARCH_INDEXSETTINGS_DATASTREAM` | `FLOWX_ELASTICSEARCH_INDEXSETTINGS_NAME` | `audit-logs` | `audit-logs` |
| `SPRING_ELASTICSEARCH_INDEXSETTINGS_SHARDS` | `FLOWX_ELASTICSEARCH_INDEXSETTINGS_SHARDS` | `2` | `2` |
| `SPRING_ELASTICSEARCH_INDEXSETTINGS_REPLICAS` | `FLOWX_ELASTICSEARCH_INDEXSETTINGS_REPLICAS` | `2` | `0` |
### New variables to add
| Variable | Default Value | Description |
| --------------------------------------- | ------------- | ------------------------------- |
| `FLOWX_ELASTICSEARCH_INDEXROLLOVERDAYS` | `30` | Automatic index rollover policy |
## Data Search
Simple migration with containerization support and namespace alignment.
### Variables to update
| Variable | Current Value | New Value | Reason |
| -------------------------------- | ---------------- | -------------------- | ------------------------ |
| `SPRING_ELASTICSEARCH_REST_URIS` | `localhost:9200` | `elasticsearch:9200` | Containerization support |
### Variables to replace
| Remove This | Add This | Default Value |
| ----------------------------------------- | ---------------------------------------- | ------------------ |
| `SPRING_ELASTICSEARCH_INDEXSETTINGS_NAME` | `FLOWX_ELASTICSEARCH_INDEXSETTINGS_NAME` | `process_instance` |
## Document plugin
New configuration option for test documents bucket customization.
### New variables to add
| Variable | Default Value | Description |
| -------------------------------------------- | ----------------- | -------------------------------------------------------------------------------------------------------------- |
| `APPLICATION_FILE_STORAGE_TEST_FILES_BUCKET` | `-test-documents` | Overrides the default test documents bucket suffix. Use this to configure a custom bucket name for test files. |
This variable allows you to override the default `-test-documents` bucket suffix. You can configure a custom bucket name or use the same bucket as the main storage if needed.
## Kafka configuration
Complete Kafka migration including consumer group standardization to kebab-case, comprehensive topic restructuring with new versioned naming patterns, and enhanced messaging features across all FlowX.AI services.
**Do not modify default consumer group names.** We strongly recommend against changing the default consumer group names as this operation can lead to misconfigurations. The application is designed to work and scale with the consumer groups as they are defined by default.
### Consumer group migrations
**Admin (3 groups):**
| Old Group ID | New Group ID |
| ---------------------------------- | -------------------------------------- |
| `genericProcessingGroup` | `generic-processing-group` |
| `processSyncGroup` | `process-sync-group` |
| `adminResourcesUsagesRefreshGroup` | `admin-resources-usages-refresh-group` |
**Application Manager (15 groups):**
| Old Group ID | New Group ID |
| ----------------------------------- | ----------------------------------------- |
| `appResourceExportGroup` | `app-resource-export-group` |
| `appResourceImportGroup` | `app-resource-import-group` |
| `appResourceUsagesGroup` | `app-resource-usages-group` |
| `appResElemUsageValidationResp` | `app-resource-elem-usage-validation-resp` |
| `appResourceCopyGroup` | `app-resource-copy-group` |
| `appResourceSyncGroup` | `app-resource-sync-group` |
| `appResourceUpdatePropagationGroup` | `app-resource-update-propagation-group` |
| `appMergeItemGroup` | `app-merge-item-group` |
| `buildCreateGroup` | `build-create-group` |
| `buildUpdateGroup` | `build-update-group` |
| `buildResourceExportGroup` | `build-resource-export-group` |
| `buildResourceImportGroup` | `build-resource-import-group` |
| `buildRuntimeDataGroup` | `build-runtime-data-group` |
| `buildStartTimerEventsUpdatesGroup` | `build-start-timer-events-updates-group` |
| `processStartGroup` | `process-start-group` |
**CMS Core (1 group):**
| Old Group ID | New Group ID |
| ---------------------- | -------------------- |
| `cms-consumer-preview` | `cms-consumer-group` |
**Document Plugin (1 group):**
| Old Group ID | New Group ID |
| ----------------------------------------- | ----------------------------- |
| `kafka-svc-document-consumer-local-test2` | `kafka-svc-document-consumer` |
**Integration Designer (3 groups):**
| Old Group ID | New Group ID |
| ------------------------------------------- | ------------------------------------------------------ |
| `integrDesignerResourcesUsagesRefreshGroup` | `integration-designer-resources-usages-refresh-group` |
| `genericProcessingGroup` | `start-workflows-group` |
| `resElemUsageValidation` | `integration-designer-res-elem-usage-validation-group` |
**Notification Plugin (1 group):**
| Old Group ID | New Group ID |
| ------------------ | ------------------------------ |
| `notif123-preview` | `notification-plugin-consumer` |
**Process Engine (11 groups):**
| Old Group ID (all were `notif123-preview`) | New Group ID |
| ------------------------------------------ | -------------------------- |
| `notif123-preview` | `advance` |
| `notif123-preview` | `notify-parent` |
| `notif123-preview` | `adapters` |
| `notif123-preview` | `scheduler-run-action` |
| `notif123-preview` | `scheduler-advancing` |
| `notif123-preview` | `message-events` |
| `notif123-preview` | `process-start` |
| `notif123-preview` | `process-start-for-event` |
| `notif123-preview` | `process-expire` |
| `notif123-preview` | `process-operations` |
| `notif123-preview` | `process-batch-processing` |
### Kafka topic migrations
All Kafka topics migrate to versioned naming pattern `ai.flowx.{env}.{service}.{operation}.v1` for improved organization and future compatibility.
**Application resource topics:**
| Environment Variable | New Topic Name |
| ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_CORRECTIONAFTERAPPOPERATION_IN` | `ai.flowx.application-version.correction-after-app-operation.response.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_CORRECTIONAFTERAPPOPERATION_OUT_PROCESS` | `ai.flowx.application-version.correction-after-app-operation.process.request.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_CORRECTIONAFTERAPPOPERATION_OUT_BUSINESSRULE` | `ai.flowx.application-version.correction-after-app-operation.business-rule.request.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_CORRECTIONAFTERAPPOPERATION_OUT_REUSABLETEMPLATE` | `ai.flowx.application-version.correction-after-app-operation.reusable-template.request.v1` |
**Sync topics:**
| Environment Variable | New Topic Name |
| --------------------------------------------------------------- | ----------------------------------------------------------- |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_OUT_PROCESS_IN` | `ai.flowx.application-version.sync.process.in.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_OUT_BUSINESSRULE_IN` | `ai.flowx.application-version.sync.business-rule.in.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_OUT_REUSABLETEMPLATE_IN` | `ai.flowx.application-version.sync.reusable-template.in.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_IN` | `ai.flowx.application-version.sync.out.v1` |
**Resource update propagation:**
| Environment Variable | New Topic Name |
| ---------------------------------------------------- | ------------------------------------------------------------- |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_UPDATEPROPAGATION` | `ai.flowx.application-version.resource.update.propagation.v1` |
**Build resource topics:**
| Environment Variable | New Topic Name |
| ------------------------------- | -------------------------------- |
| `KAFKA_TOPIC_BUILD_RUNTIMEDATA` | `ai.flowx.build.runtime-data.v1` |
**Consumer groups:**
| Environment Variable | New Consumer Group | Threads |
| ------------------------------------------------------------ | ----------------------------------------- | ------- |
| `KAFKA_CONSUMER_GROUPID_PROCESS_SYNC` | `process-sync-group` | `6` |
| `KAFKA_CONSUMER_GROUPID_BUSINESS_RULE_SYNC` | `business-rule-sync-group` | `6` |
| `KAFKA_CONSUMER_GROUPID_REUSABLE_TEMPLATE_SYNC` | `reusable-template-sync-group` | `6` |
| `KAFKA_CONSUMER_GROUPID_PROCESS_CORRECTIONAFTERAPPOPERATION` | `processCorrectionAfterAppOperationGroup` | `6` |
**Application sync topics:**
| Environment Variable | New Topic Name |
| ----------------------------------------------- | ----------------------------------------------------------- |
| `KAFKA_TOPIC_APPLICATION_SYNC_RESPONSE` | `ai.flowx.application-version.sync.out.v1` |
| `KAFKA_TOPIC_APPLICATION_PROCESS_SYNC` | `ai.flowx.application-version.sync.process.in.v1` |
| `KAFKA_TOPIC_APPLICATION_BUSINESSRULE_SYNC` | `ai.flowx.application-version.sync.business-rule.in.v1` |
| `KAFKA_TOPIC_APPLICATION_REUSABLETEMPLATE_SYNC` | `ai.flowx.application-version.sync.reusable-template.in.v1` |
**Application correction after app operation topics:**
| Environment Variable | New Topic Name |
| ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| `KAFKA_TOPIC_APPLICATION_CORRECTIONAFTERAPPOPERATION_IN_PROCESS` | `ai.flowx.application-version.correction-after-app-operation.process.request.v1` |
| `KAFKA_TOPIC_APPLICATION_CORRECTIONAFTERAPPOPERATION_IN_BUSINESSRULE` | `ai.flowx.application-version.correction-after-app-operation.business-rule.request.v1` |
| `KAFKA_TOPIC_APPLICATION_CORRECTIONAFTERAPPOPERATION_IN_REUSABLETEMPLATE` | `ai.flowx.application-version.correction-after-app-operation.reusable-template.request.v1` |
| `KAFKA_TOPIC_APPLICATION_CORRECTIONAFTERAPPOPERATION_OUT` | `ai.flowx.application-version.correction-after-app-operation.response.v1` |
**Build topics:**
| Environment Variable | New Topic Name |
| ------------------------------- | -------------------------------- |
| `KAFKA_TOPIC_BUILD_RUNTIMEDATA` | `ai.flowx.build.runtime-data.v1` |
### New Kafka features
**Consumer Group:** `app-resource-update-propagation-group`\
**Threads:** 3\
**Topic:** `ai.flowx.{env}.application-version.resource.update.propagation.v1`\
**Purpose:** Real-time resource change propagation
**Consumer Group:** `build-runtime-data-group`\
**Threads:** 2\
**Topic:** `ai.flowx.{env}.build.runtime-data.v1`\
**Purpose:** Build process data management
**Topic:** `ai.flowx.{env}.application-version.sync.business-rule.in.v1`\
**Purpose:** Enhanced business rule synchronization\
**Consumer Group:** `business-rule-sync-group`
**Topic:** `ai.flowx.{env}.application-version.sync.process.in.v1`\
**Purpose:** Improved process synchronization\
**Consumer Group:** `process-sync-group`
**Topic:** `ai.flowx.{env}.application-version.sync.reusable-template.in.v1`\
**Purpose:** Template synchronization\
**Consumer Group:** `reusable-template-sync-group`
**Multiple Topics:** Process, business rule, and template correction\
**Purpose:** Post-deployment resource correction\
**Consumer Group:** `processCorrectionAfterAppOperationGroup`
### Configure environment variables
**Automatic Configuration**: Most deployments can rely on the built-in naming patterns without explicit environment variable overrides. Only override when custom naming is required.
```bash Application Manager Topics theme={"system"}
# Resource Update Propagation
KAFKA_TOPIC_APPLICATION_RESOURCE_UPDATEPROPAGATION=ai.flowx.dev.application-version.resource.update.propagation.v1
# Build Runtime Data
KAFKA_TOPIC_BUILD_RUNTIMEDATA=ai.flowx.dev.build.runtime-data.v1
# Sync Topics
KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_OUT_PROCESS=ai.flowx.dev.application-version.sync.process.in.v1
KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_OUT_BUSINESSRULE=ai.flowx.dev.application-version.sync.business-rule.in.v1
KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_OUT_REUSABLE_TEMPLATE=ai.flowx.dev.application-version.sync.reusable-template.in.v1
# Correction After App Operation
KAFKA_TOPIC_APPLICATION_RESOURCE_CORRECTIONAFTERAPPOPERATION_OUT_PROCESS=ai.flowx.dev.application-version.correction-after-app-operation.process.request.v1
KAFKA_TOPIC_APPLICATION_RESOURCE_CORRECTIONAFTERAPPOPERATION_OUT_BUSINESSRULE=ai.flowx.dev.application-version.correction-after-app-operation.business-rule.request.v1
KAFKA_TOPIC_APPLICATION_RESOURCE_CORRECTIONAFTERAPPOPERATION_OUT_REUSABLETEMPLATE=ai.flowx.dev.application-version.correction-after-app-operation.reusable-template.request.v1
```
```bash Admin Topics theme={"system"}
# Application Sync
KAFKA_TOPIC_APPLICATION_SYNC_RESPONSE=ai.flowx.dev.application-version.sync.out.v1
KAFKA_TOPIC_APPLICATION_PROCESS_SYNC=ai.flowx.dev.application-version.sync.process.in.v1
KAFKA_TOPIC_APPLICATION_BUSINESSRULE_SYNC=ai.flowx.dev.application-version.sync.business-rule.in.v1
KAFKA_TOPIC_APPLICATION_REUSABLETEMPLATE_SYNC=ai.flowx.dev.application-version.sync.reusable-template.in.v1
# Correction After App Operation
KAFKA_TOPIC_APPLICATION_CORRECTIONAFTERAPPOPERATION_IN_PROCESS=ai.flowx.dev.application-version.correction-after-app-operation.process.request.v1
KAFKA_TOPIC_APPLICATION_CORRECTIONAFTERAPPOPERATION_IN_BUSINESSRULE=ai.flowx.dev.application-version.correction-after-app-operation.business-rule.request.v1
KAFKA_TOPIC_APPLICATION_CORRECTIONAFTERAPPOPERATION_IN_REUSABLETEMPLATE=ai.flowx.dev.application-version.correction-after-app-operation.reusable-template.request.v1
KAFKA_TOPIC_APPLICATION_CORRECTIONAFTERAPPOPERATION_OUT=ai.flowx.dev.application-version.correction-after-app-operation.response.v1
```
```bash Consumer Groups and Threads theme={"system"}
# Application Manager Consumer Groups
KAFKA_CONSUMER_GROUPID_APPLICATION_RESOURCE_UPDATEPROPAGATION=app-resource-update-propagation-group
KAFKA_CONSUMER_GROUPID_BUILD_RUNTIMEDATA=build-runtime-data-group
# Admin Consumer Groups
KAFKA_CONSUMER_GROUPID_PROCESS_SYNC=process-sync-group
KAFKA_CONSUMER_GROUPID_BUSINESS_RULE_SYNC=business-rule-sync-group
KAFKA_CONSUMER_GROUPID_REUSABLE_TEMPLATE_SYNC=reusable-template-sync-group
KAFKA_CONSUMER_GROUPID_PROCESS_CORRECTIONAFTERAPPOPERATION=processCorrectionAfterAppOperationGroup
# Thread Configuration
KAFKA_CONSUMER_THREADS_APPLICATION_RESOURCE_UPDATEPROPAGATION=3
KAFKA_CONSUMER_THREADS_BUILD_RUNTIMEDATA=2
KAFKA_CONSUMER_THREADS_PROCESS_SYNC=6
KAFKA_CONSUMER_THREADS_BUSINESS_RULE_SYNC=6
KAFKA_CONSUMER_THREADS_REUSABLE_TEMPLATE_SYNC=6
KAFKA_CONSUMER_THREADS_PROCESS_CORRECTIONAFTERAPPOPERATION=6
```
### Additional Application Manager variables
| Variable | Default Value | Description |
| ---------------------------------------------------------------- | ------------- | -------------------------------- |
| `FLOWX_RESOURCESUSAGES_REFRESHPRODUCER_REFRESHEXPIRATIONSECONDS` | `300` | Refresh expiration timeout |
| `SERVER_MAXHTTPREQUESTHEADERSIZE` | `16KB` | Maximum HTTP request header size |
## Integration Designer
### Storage configuration
Added support for S3 storage for files in Integration Designer.
| Variable | Default Value | Description |
| ---------------------------------------------- | ------------------- | --------------------- |
| `APPLICATION_FILESTORAGE_TYPE` | `s3` | Storage type |
| `APPLICATION_FILESTORAGE_PARTITIONSTRATEGY` | `NONE` | Partition strategy |
| `APPLICATION_FILESTORAGE_DELETIONSTRATEGY` | `delete` | Deletion strategy |
| `APPLICATION_FILESTORAGE_S3_ENABLED` | `true` | S3 enabled |
| `APPLICATION_FILESTORAGE_S3_SERVERURL` | `http://minio:9000` | S3 server URL |
| `APPLICATION_FILESTORAGE_S3_ENCRYPTIONENABLED` | `false` | S3 encryption enabled |
| `APPLICATION_FILESTORAGE_S3_ACCESSKEY` | `minio` | S3 access key |
| `APPLICATION_FILESTORAGE_S3_SECRETKEY` | `minio123` | S3 secret key |
| `APPLICATION_FILESTORAGE_S3_BUCKETPREFIX` | `workflows-bucket` | S3 bucket prefix |
### Redis
Added caching when running a workflow.
| Variable | Default Value | Description |
| ------------------------------- | ---------------------------------------- | ------------------ |
| `SPRING_CACHE_TYPE` | `redis` | Cache type |
| `SPRING_CACHE_REDIS_KEYPREFIX` | `flowx:core:cache:integration-designer:` | Cache key prefix |
| `SPRING_CACHE_REDIS_TIMETOLIVE` | `5000000` | Cache time to live |
| `SPRING_REDIS_HOST` | `redis-master` | Redis host |
| `SPRING_REDIS_PORT` | `6379` | Redis port |
| `SPRING_REDIS_PASSWORD` | `defaultpassword` | Redis password |
| `SPRING_REDIS_TTL` | `5000000` | Redis time to live |
| `SPRING_DATA_REDIS_HOST` | `spring.redis.host` | Redis host |
## FlowX Engine
The ADVANCING controller has been redesigned with separate picking and processing operations for improved performance and resource management.
### Variables to remove & replace
| Remove This Variable | Replace With |
| ---------------------------- | ------------------------------------------------ |
| `ADVANCING_THREADS` | `ADVANCING_PICKINGTHREADS` (default: `1`) |
| `ADVANCING_PICKINGBATCHSIZE` | `ADVANCING_PROCESSINGBUFFERSIZE` (default: `20`) |
### New variables to add
| Variable | Default Value | Description |
| ------------------------------------------- | ------------- | -------------------------------------------------------------- |
| `ADVANCING_PROCESSINGTHREADS` | `20` | Number of threads for parallel processing of advancing events |
| `ADVANCING_BLOCKPICKINGIFNOWORKERAVAILABLE` | `true` | Block picking operations when no worker threads are available |
| `ADVANCING_DATASOURCE_MAXIMUMPOOLSIZE` | `20` | Maximum database connection pool size for advancing operations |
### Variables to update
| Variable | Current Value | New Value | Reason |
| ------------------------------ | ------------- | --------- | ----------------------------------------------- |
| `ADVANCING_PICKINGPAUSEMILLIS` | `100` | `50` | Optimized pause duration for better performance |
**How the new advancing controller works:**
* **Picking threads** (`ADVANCING_PICKINGTHREADS`): Controls how many worker threads read events from the database. This handles only the picking/reading operations.
* **Processing buffer** (`ADVANCING_PROCESSINGBUFFERSIZE`): Acts as a queue between picking and processing. When the buffer is full, no new events are read. When there's available space, that amount of events will be read.
* **Processing threads** (`ADVANCING_PROCESSINGTHREADS`): Controls how many threads process the advancing events in parallel. Events are processed instantly if processing threads are available. If all processing threads are busy, events accumulate in the buffer until it reaches capacity.
* **Blocking behavior** (`ADVANCING_BLOCKPICKINGIFNOWORKERAVAILABLE`): When enabled, prevents picking operations if no worker threads are available, ensuring better resource management.
### Elasticsearch indexing configuration
Elasticsearch indexing environment variables have been updated with new naming conventions for better consistency with FlowX naming standards.
#### Variables to remove & replace
| Remove This Variable | Replace With | Old Default | New Default |
| ---------------------------------------------- | -------------------------------------------- | ------------------ | ------------------ |
| `FLOWX_INDEXING_PROCESSINSTANCE_INDEXING_TYPE` | `FLOWX_INDEXING_TYPE` | `kafka` | `kafka` |
| `FLOWX_INDEXING_PROCESSINSTANCE_INDEX_NAME` | `FLOWX_ELASTICSEARCH_INDEXSETTINGS_NAME` | `process_instance` | `process_instance` |
| `FLOWX_INDEXING_PROCESSINSTANCE_SHARDS` | `FLOWX_ELASTICSEARCH_INDEXSETTINGS_SHARDS` | `2` | `2` |
| `FLOWX_INDEXING_PROCESSINSTANCE_REPLICAS` | `FLOWX_ELASTICSEARCH_INDEXSETTINGS_REPLICAS` | `2` | `0` |
For complete Elasticsearch indexing setup including Kafka Connect configuration and time-based partitioning, see the [Configuring Elasticsearch indexing](/5.1/setup-guides/flowx-engine-setup-guide/configuring-elasticsearch-indexing/elasticsearch-indexing) guide.
## Java runtime configuration
FlowX.AI containers and services must rely exclusively on Java-standard environment variables for runtime tuning.
| Deprecated variables | Standard Replacement | Notes |
| -------------------------------- | -------------------- | ------------------------------------------------------------------ |
| `JAVA_OPTS`, `JAVA_TOOL_OPTIONS` | `JDK_JAVA_OPTIONS` | Ensures compatibility with Java 21 and simplifies container config |
Environment-specific memory configurations must now be defined using `JDK_JAVA_OPTIONS`. Avoid relying on `JAVA_OPTS`, `JAVA_TOOL_OPTIONS` or legacy Docker-level overrides — these are no longer processed explicitly.
## Config profiles
Config profiles are deprecated since 4.7.6 version.
Remove legacy `CONFIG_PROFILE` usage. Delete any `CONFIG_PROFILE` environment variable definitions from deployments. This variable is no longer referenced by FlowX.AI services.
### Development environment exception
For development environments only, `CONFIG_PROFILE` migrates to the standard Spring configuration profile variable.
| Remove This Variable | Replace With | Environment |
| -------------------- | ----------------------- | ----------- |
| `CONFIG_PROFILE` | `SPRING_CONFIG_PROFILE` | devenv only |
## SpiceDB integration
FlowX.AI 5.1 introduces SpiceDB integration for enhanced authorization capabilities across all core services.
### Services affected
The following services require new SpiceDB configuration variables:
* Admin
* Application Manager
* Audit Core
* CMS Core
* Document Plugin
* Integration Designer
* Notification Plugin
* Process Engine
* Runtime Manager
* Task Management Plugin
### New variables to add
For every CAS configuration, add the following variables:
| Variable | Default Value | Description |
| --------------------- | ------------- | ----------------------------------------------------------------------------------------------------- |
| `FLOWX_SPICEDB_HOST` | `spicedb` | SpiceDB server hostname. Change only if your deployment uses a non-default host. |
| `FLOWX_SPICEDB_PORT` | `50051` | SpiceDB server port. Change only if your deployment uses a non-default port. |
| `FLOWX_SPICEDB_TOKEN` | *(secret)* | SpiceDB authentication token. Add as a Secret to all services connecting to CAS, including Data-Sync. |
## Data sync updates
### Data Sync additional variables
For every Data-Sync configuration, add the following variables:
| Variable | Default Value | Description |
| -------------------------------------- | ------------- | ----------------------------------------------------------------------------------------------------- |
| `FLOWX_SPICEDB_HOST` | `spicedb` | SpiceDB server hostname. Change only if your deployment uses a non-default host. |
| `FLOWX_SPICEDB_PORT` | `50051` | SpiceDB server port. Change only if your deployment uses a non-default port. |
| `FLOWX_DATASOURCE_AUTHSYSTEM_URL` | - | Authentication system URL. |
| `FLOWX_DATASOURCE_AUTHSYSTEM_USERNAME` | - | Authentication system username. |
| `FLOWX_DATASOURCE_AUTHSYSTEM_PASSWORD` | - | Authentication system password. |
| `FLOWX_SPICEDB_TOKEN` | - | SpiceDB authentication token. Add as a Secret to all services connecting to CAS, including Data-Sync. |
## Kafka topic naming
### Global configuration change
| Variable | Old Default | New Default | Description |
| -------------------------------- | ----------- | ----------- | ---------------------------------- |
| `KAFKA_TOPIC_NAMING_ENVIRONMENT` | (varies) | `""` | Moved to default empty environment |
This change standardizes topic naming across environments by defaulting to an empty environment identifier.
## CORS and ingress updates
### Admin service
Admin service ingress configuration requires additional CORS header support for workspace identification.
**Kubernetes ingress annotation update:**
```yaml theme={"system"}
nginx.ingress.kubernetes.io/cors-allow-headers: "...,Fx-Workspace-Id"
```
### Process Engine service
**Ingress paths requiring `Fx-Workspace-Id` header:**
* `/admin`
* `/adminInstances`
**Kubernetes ingress annotation update:**
```yaml theme={"system"}
nginx.ingress.kubernetes.io/cors-allow-headers: "...,Fx-Workspace-Id"
```
### Runtime Manager service
**Ingress paths requiring `Fx-Workspace-Id` header:**
* `/admin`
* `/adminInstances`
**Kubernetes ingress annotation update:**
```yaml theme={"system"}
nginx.ingress.kubernetes.io/cors-allow-headers: "...,Fx-Workspace-Id"
```
# Install new services
Source: https://docs.flowx.ai/release-notes/v5.x/v5.1.x-lts/v5.1.0-september-2025/migrating-from-v4.7.x-to-5.1/install-services
Step-by-step installation guide for new FlowX.AI 5.1.0 services
FlowX.AI 5.1.0 introduces two new services:
1. **Authorization System (CAS)** - Centralized authorization and permission management
2. **NoSQL DB Runner** - The NoSQL DB Runner is a backend microservice that powers FlowX.AI Database functionality. It provides MongoDB and Azure Cosmos DB operations support for FlowX.AI Database collections and handles data persistence operations across FlowX.AI processes.
# Overview
Source: https://docs.flowx.ai/release-notes/v5.x/v5.1.x-lts/v5.1.0-september-2025/migrating-from-v4.7.x-to-5.1/migration-overview
Complete migration guide from FlowX.AI 4.7.x to 5.1.0 with prerequisites and step-by-step process
You can only upgrade from version 4.7.8 (or newer) to 5.1.0. If you’re on an earlier version, upgrade to the latest LTS version first.
## Success factors
Take care when following steps are mandatory and will prevent service startup if skipped:
1. **SpiceDB and DGraph** must be installed before any FlowX.AI services
DGraph is required only if you are using FlowX AI agents. If not, you can skip this step.
2. **Organization admin user** must be configured before authorization-system service deployment
3. **Service accounts** must have `SA_FLOWX` role assigned
4. **Data migration** must complete before service upgrades
## Migration process
Follow these steps in the exact order specified to ensure a successful migration:
### Data migration
Migrate existing Elasticsearch data to support the new workspace-based architecture.
### Installing new third parties
**New mandatory infrastructure components:**
* **SpiceDB** - Authorization and permission management backend
* **DGraph** - Graph-based data operations and relationships
### Upgrading existing third parties
Update existing infrastructure to the new supported versions:
* Kafka 3.8+, Redis 7.4+, Elasticsearch 8+, Keycloak 26+
### Organization admin user
Configure the organization admin user before deploying the authorization-system service.
### Service accounts
Assign `SA_FLOWX` role to all service accounts used by FlowX services.
See the details on prerequisites for migration
Deploy new FlowX.AI 5.1.0 services in the correct order to ensure proper startup and dependency validation.
**Required installation sequence:**
1. **Authorization System (CAS)** - Must be installed first to validate SpiceDB connection
2. **NoSQL DB Runner** - Backend service for [FlowX.AI Database](../../../../../5.1/docs/platform-deep-dive/integrations/flowx-database)
**Service Startup Dependency**: Authorization System will not start without proper SpiceDB installation and organization admin configuration.
Step-by-step installation with validation procedures
Installing Authorization System first allows you to validate all critical configurations before proceeding.
Update environment variable configurations for all existing FlowX.AI services to support version 5.1.0 compatibility.
**Configuration updates include:**
* New Kafka topics and consumer groups
* Updated Elasticsearch settings and index configurations
* Enhanced security and authorization parameters
* New service integration endpoints
Update environment variables for all existing FlowX.AI services
Upgrade all existing FlowX.AI services to version 5.1.0 after completing environment variable updates.
See the details on container apps (Renderers SDKs)
Perform the post deployment steps:
* Validate data-sync migrations
* Clear cache with endpoint
* Remove deprecated configuration roles (optional)
* Add users to default workspace
### Validate data-sync migrations
Verify that all data synchronization processes completed successfully and perform additional system checks.
### Clear cache with endpoint
**Required**: Clear Redis cache using the dedicated endpoint with organization admin token.
**Cache Clearing**:
* FlowX.AI 5.1.0 removes process definition versioning. Cache must be cleared to remove legacy cached classes.
* When you start the runtime-manager on version 5.x, the library-to-library migration runs automatically. You must clear the cache after this step because a new field is added to the build mongo document, which is required for various operations.
### Remove deprecated configuration roles (optional)
Clean up legacy roles from Keycloak or other authentication servers that are now managed by CAS.
### Add users to default workspace
**Process**:
1. **User Re-login**: Existing configurators must log into FlowX.AI Designer once to create user references in FlowX.AI database
2. **Workspace Assignment**: Organization admin assigns users to the default workspace to reestablish access to existing assets and resources
**Access Restoration**: Without workspace assignment, existing users will lose access to previously available resources and projects.
Complete post-deployment procedures and validation
Common issues and solutions for post-upgrade problems
# Prerequisites
Source: https://docs.flowx.ai/release-notes/v5.x/v5.1.x-lts/v5.1.0-september-2025/migrating-from-v4.7.x-to-5.1/prerequisites
This section contains the steps in order that we recommend for migrating data from FlowX v4.7.x to v5.1.0.
## Upgrading existing third parties
Update existing infrastructure to at least the new supported versions:
| Component | 4.7.8 | FlowX.AI 5.1.0 |
| ----------------- | --------- | -------------- |
| **Kafka** | 3.2 - 3.9 | **3.8 - 3.9** |
| **Redis** | 7.2 - 8.0 | **7.4 - 8.0** |
| **Elasticsearch** | 7 - 9 | **8 - 9** |
| **Keycloak** | 22,26+ | **26+** |
***
## Installing new third parties
FlowX.AI 5.1.0 requires two new infrastructure components that must be installed and properly configured before any FlowX.AI services can start.
* **SpiceDB** - Required for authorization management (Must be accessible by the authorization-system service)
* **DGraph** - Required for data relationships and graph operations. If you are not using FlowX AI agents (you don't have an AI deployment), you can skip this step.
***
## Elasticsearch workspace migration
**The primary goal of this Elasticsearch migration is to add the default workspace ID to all existing resources in your environment.** This ensures that all your current data (process instances, audit logs, etc.) will be properly associated with a workspace and remain accessible after the upgrade to FlowX 5.1.0.
Without this migration, existing data would not have workspace associations and could become inaccessible or invisible in workspace-scoped operations.
Elasticsearch index mappings must be updated before upgrading to FlowX.AI 5.1.0 to ensure workspace functionality works correctly.
### Migration timing
**Recommended approach**: Complete these Elasticsearch migrations **before** upgrading FlowX.AI microservices. Upgrading services first and then creating new workspaces will complicate the migration process.
### Prerequisites for migration
Before upgrading to FlowX.AI 5.1.0, you must update the mappings for all existing Elasticsearch indices to include the `workspaceId` field:
```json theme={"system"}
PUT /{indexName/indexPattern}/_mapping
{
"properties": {
"workspaceId": {
"type": "keyword"
}
}
}
```
This mapping update is required for:
* Process instances indices (you can find the indices in the `flowx-process-engine` setup guide at `FLOWX_INDEXING_PROCESSINSTANCE_INDEX_NAME` environment variable, if not set, the default is `process_instance`)
* Audit log indices (you can find the indices in the `audit-core` setup guide at `SPRING_ELASTICSEARCH_INDEX_SETTINGS_DATASTREAM` environment variable)
### Migration execution methods
You can execute these migration queries using:
* **Kibana Dev Tools**: Execute queries directly in the Kibana interface
* **Elasticsearch API**: Use direct API calls to perform migrations
### Process instances migration
Process instances indices require manual migration using Elasticsearch's `update_by_query` API to assign them to the default workspace:
#### Synchronous migration
```json theme={"system"}
POST /{indexName}/_update_by_query?slices=auto
{
"script": {
"source": "ctx._source.workspaceId = params.workspace_id;",
"lang": "painless",
"params": {
"workspace_id": "00000000-0000-0000-0000-000000000001"
}
},
"query": {
"bool": {
"must_not": {
"exists": {
"field": "workspaceId"
}
}
}
}
}
```
#### Asynchronous migration (for large datasets)
For large datasets, use asynchronous migration:
```json theme={"system"}
POST /{indexName}/_update_by_query?slices=auto&wait_for_completion=false
```
Monitor async tasks with:
```json theme={"system"}
GET /_tasks/{task_id}
```
### Audit logs migration
Audit logs follow the same migration process as process instances, using identical scripts and procedures to assign them to the default workspace:
```json theme={"system"}
POST /{audit_index_pattern}/_update_by_query?slices=auto
{
"script": {
"source": "ctx._source.workspaceId = params.workspace_id;",
"lang": "painless",
"params": {
"workspace_id": "00000000-0000-0000-0000-000000000001"
}
},
"query": {
"bool": {
"must_not": {
"exists": {
"field": "workspaceId"
}
}
}
}
}
```
### Performance optimization
* Use `slices=auto` for automatic parallelization based on primary shards
* For multiple indices, use patterns: `POST /my_pattern-*/_update_by_query?slices=auto`
* Batch processing with size parameter: `?size=1000`
* Monitor large operations using asynchronous execution
### Post-migration impact
**Without proper Elasticsearch migration, you will experience:**
* Some process instances may not appear in search results
* Data-search functionality may not return complete results
* Workspace-scoped queries will fail for unmigrated data
* **Existing resources will not be visible or accessible within the new workspace structure**
### Default workspace ID
The migration uses the default workspace ID: `00000000-0000-0000-0000-000000000001`
All existing resources (process instances, audit logs, etc.) will be moved to this default workspace, ensuring continuity of operations after the upgrade to FlowX.AI 5.1.0.
***
### Organization admin user
Configure the organization admin user before deploying the authorization-system service (that is mentioned in the [Install Services](./install-services) section).
Details on how to configure the organization admin user:
***
#### Pre-migration preparation
You must configure the authorization-system service before migration. There are two supported approaches:
Set the following authorization-system environment variables:
* `SPRING_LIQUIBASE_PARAMETERS_CREATEDEFAULTWORKSPACE=true`: This environment variable is mandatory for migrations.
* `SPRING_LIQUIBASE_PARAMETERS_DEFAULTORGADMINUSERNAME=`: The value for the environment variable must be set with the username of the user that must be the first organization administrator.
Set the following environment variables:
* `SPRING_LIQUIBASE_PARAMETERS_CREATEDEFAULTWORKSPACE=true`: This environment variable is mandatory for migrations.
* `SPRING_LIQUIBASE_PARAMETERS_DEFAULTORGADMINUSERSUBJECTID=`: The value for the environment variable can be set with the unique identifier of the user that must be the first organization administrator. The value that is added by auth server on the access token (”sub” attribute - subject identifier in JWT token).
To get the subject ID of the admin user, extract it from the JWT token of the admin user.

Make sure the admin user is created in Keycloak before deploying the authorization-system service.
***
## Update service accounts
FlowX.AI 5.1.0 introduces new service account role requirements that must be configured before service deployment.
All service accounts used by FlowX.AI services must have the `SA_FLOWX` role assigned. Services will not authenticate properly without this role.
***
## Additional Keycloak roles requirements for authorization-system service
Before deploying the `authorization-system` service, you must assign additional roles to its service account in Keycloak to enable user management operations.
**Required client roles for the service account:**
```json theme={"system"}
{
"clientRoles" : {
"realm-management" : [
"manage-users",
"query-users",
"view-users",
"manage-realm"
]
}
}
```
***
## Process instances migration
All active process instances will be migrated under default workspace.
For clients who need inactive process instances migrated, we’ll provide migration script which will be run post migration.
# Renderer SDKs
Source: https://docs.flowx.ai/release-notes/v5.x/v5.1.x-lts/v5.1.0-september-2025/migrating-from-v4.7.x-to-5.1/renderers
This guide assists in migrating from FlowX.AI v4.7.x to v5.1.0.
## Angular SDK migration guide
### Upgrading to the new SDK libraries
The Angular SDK node packages have been updated to support Workspaces, introduced in FlowX.AI v5.1.0. All container apps that want to use the new SDKs should update to the latest package versions and implement the required workspace configuration.
* Remove old FlowX.AI SDK libraries (if upgrading from earlier versions):
```bash theme={"system"}
npm uninstall @flowx/angular-sdk @flowx/core-sdk @flowx/core-theme @flowx/angular-theme @flowx/angular-ui-toolkit
```
* Install new FlowX.AI v5.1.0 packages:
```bash theme={"system"}
npm install \
@flowx/core-sdk@ \
@flowx/core-theme@ \
@flowx/angular-sdk@ \
@flowx/angular-theme@ \
@flowx/angular-ui-toolkit@ \
@angular/cdk@19 \
@types/event-source-polyfill
```
Replace `` with the correct version corresponding to your FlowX.AI v5.1.0 platform version. Check: **Release Notes → v5.1.0 → Deployment guidelines → Component versions**.
* Ensure your Angular version is compatible:
```bash theme={"system"}
npm install -g @angular/cli@19
```
* Verify system requirements:
* Node.js: v20.9.0 or higher
* npm: v10.1.0 or higher
* Angular: \~19
* Run through all the migration steps in the [New SDK API changes](#new-sdk-api-changes) section below.
### SDK API changes
In the Angular SDK, the `` component has a new mandatory parameter: `workspaceId`.
| Name | Description | Type | Requirement |
| ------------- | ---------------------------------------------------------------------------- | -------- | ----------- |
| `workspaceId` | **Workspace identifier** that contains the project and process to be started | `string` | Mandatory |
Add the definition for this property in your component:
```typescript theme={"system"}
export class AppComponent {
workspaceId = 'your-workspace-id';
// ... other existing properties
}
```
Use this parameter as input for the `` component:
```html theme={"system"}
>
```
### Task management component changes
The task management component now also requires workspace context:
```html theme={"system"}
>
```
***
## React SDK migration guide
### Upgrading to the new SDK libraries
The React SDK node packages have been updated to support Workspaces, introduced in FlowX.AI v5.1.0. All container apps that want to use the new SDKs should update to the latest package versions and implement the required workspace configuration.
* Remove old FlowX.AI SDK libraries:
```bash theme={"system"}
npm uninstall @flowx/react-sdk @flowx/core-sdk @flowx/core-theme @flowx/react-theme @flowx/react-ui-toolkit
```
* Install new FlowX.AI v5.1.0 packages:
```bash theme={"system"}
npm install \
react@18 \
react-dom@18 \
@flowx/core-sdk@ \
@flowx/core-theme@ \
@flowx/react-sdk@ \
@flowx/react-theme@ \
@flowx/react-ui-toolkit@ \
air-datepicker@3 \
axios \
ag-grid-react@32
```
Replace `` with the correct version corresponding to your FlowX.AI v5.1.0 platform version. Check: **Release Notes → v5.1.0 → Deployment guidelines → Component versions**.
* Ensure your React version is compatible:
```bash theme={"system"}
npm install react@~18 react-dom@~18
```
* Verify Node.js version compatibility:
* Node.js: v18.16.9 or higher
* npm: v10.8.0 or higher
* Run through all the migration steps in the [New SDK API changes](#new-sdk-api-changes) section below.
### New SDK API changes
In the React SDK, the `` component has a new mandatory parameter: `workspaceId`.
| Name | Description | Type | Requirement |
| ------------- | ---------------------------------------------------------------------------- | -------- | ----------- |
| `workspaceId` | **Workspace** identifier that contains the project and process to be started | `string` | Mandatory |
Add the definition for this property in your component:
```typescript theme={"system"}
const workspaceId = 'your-workspace-id';
```
Use this parameter as input for the `` component:
```tsx theme={"system"}
```
### Task management component changes
The task management component now also requires workspace context:
```tsx theme={"system"}
```
## Android SDK migration guide
### System requirements
System requirements:
* **minSdk = 26**
* **compileSdk = 35**
The SDK library was build using:
* **[Android Gradle Plugin](https://developer.android.com/build/releases/gradle-plugin) 8.11.0**
* **[Gradle](https://gradle.org/releases/) 8.14.2**
* **[Kotlin](https://kotlinlang.org/) 2.2.0**
### Library dependencies
Impactful dependencies:
* **[Android Core KTX](https://developer.android.com/kotlin/ktx#core) 1.16.0**
* **[Android Activity Compose](https://developer.android.com/jetpack/androidx/releases/activity) 1.10.1**
* **[Compose BOM](https://developer.android.com/jetpack/compose/bom/bom-mapping) 2025.09.01**
* **[Compose Navigation](https://developer.android.com/develop/ui/compose/navigation) 2.9.1**
* **[Android Lifecycle](https://developer.android.com/jetpack/androidx/releases/lifecycle) 2.9.1**
* **[Accompanist Permissions](https://google.github.io/accompanist/permissions/) 0.37.3**
* **[Kotlin Coroutines](https://kotlinlang.org/docs/coroutines-overview.html) 1.10.2**
* **[Android DataStore](https://developer.android.com/jetpack/androidx/releases/datastore) 1.1.7**
* **[Android Preference](https://developer.android.com/jetpack/androidx/releases/preference) 1.2.1**
* **[Android Security](https://developer.android.com/jetpack/androidx/releases/security) 1.1.0-beta01**
* **[OkHttp BOM](https://square.github.io/okhttp/) 4.12.0**
* **[Retrofit](https://square.github.io/retrofit/) 2.12.0**
* **[Moshi](https://github.com/square/moshi) 1.15.2**
* **[Coil BOM](https://coil-kt.github.io/coil/) 3.2.0**
* **[Android Core Library Desugaring](https://developer.android.com/studio/write/java8-support#library-desugaring) 2.1.5**
Other dependencies:
* **[Android Annotation](https://developer.android.com/jetpack/androidx/releases/annotation) 1.9.1**
* **[Google Protobuf](https://github.com/protocolbuffers/protobuf/tree/main/java#use-java-protocol-buffers-on-android) 4.31.1**
* **[Mozilla Rhino](https://github.com/mozilla/rhino) 1.8.0**
* **[JetBrains Markdown](https://github.com/JetBrains/markdown) 0.7.3**
* **[CommonMark](https://github.com/commonmark/commonmark-java) 0.25.0**
- **[Koin](https://insert-koin.io/)** dependency has been removed
- **[Gson](https://github.com/google/gson)** dependency has been removed
Some dependencies were removed, others got updated.
It is highly recommended that the container projects to be aligned with these versions in order to avoid any compatibility issues.
### New SDK Migration Guide
To successfully build and run your project with the updated SDK, please follow these sequential steps within your container project:
```kotlin [rootProject]/app/build.gradle.kts lines theme={"system"}
implementation("ai.flowx.android:android-sdk:4.0.25") // [!code --]
implementation("ai.flowx.android:sdk:9.0.2") // [!code ++]
```
```kotlin [rootProject]/app/build.gradle.kts lines theme={"system"}
android {
compileSdk = 34 // [!code --]
compileSdk = 35 // [!code ++]
}
```
```kotlin [rootProject]/app/build.gradle.kts theme={"system"}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8 // [!code --]
sourceCompatibility = JavaVersion.VERSION_17 // [!code ++]
targetCompatibility = JavaVersion.VERSION_1_8 // [!code --]
targetCompatibility = JavaVersion.VERSION_17 // [!code ++]
}
kotlinOptions { // [!code --]
jvmTarget = "1.8" // [!code --]
} // [!code --]
kotlin { // [!code ++]
compilerOptions { // [!code ++]
jvmTarget.set(JvmTarget.JVM_17) // [!code ++]
} // [!code ++]
} // [!code ++]
```
```kotlin [rootProject]/build.gradle.kts theme={"system"}
plugins {
id("com.android.application") version "M.m.p" apply false // where M.m.p < 8.10.0 // [!code --]
id("com.android.application") version "8.10.0" apply false // [!code ++]
}
```
```properties [root-project]/gradle/wrapper/gradle-wrapper.properties icon="ini" theme={"system"}
distributionUrl=https\://services.gradle.org/distributions/gradle-M.m.p-bin.zip # where M.m.p < 8.11.1 [!code --]
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip # [!code ++]
```
```kotlin [rootProject]/build.gradle.kts theme={"system"}
plugins {
id("org.jetbrains.kotlin.android") version "1.m.p" apply false // [!code --]
id("org.jetbrains.kotlin.android") version "2.2.0" apply false // [!code ++]
}
```
```kotlin [rootProject]/build.gradle.kts theme={"system"}
plugins {
id("org.jetbrains.kotlin.plugin.compose") version "2.2.0" apply false // [!code ++]
}
```
```kotlin [rootProject]/app/build.gradle.kts theme={"system"}
plugins {
id("org.jetbrains.kotlin.plugin.compose") // [!code ++]
}
```
```kotlin [rootProject]/app/build.gradle.kts theme={"system"}
android {
composeOptions { // [!code --]
kotlinCompilerExtensionVersion = "1.m.p" // [!code --]
} // [!code --]
}
```
It is recommended to use the same version as the one configured for the **Kotlin** pluginConsult the [Compose Compiler Migration Guide](https://kotlinlang.org/docs/compose-compiler-migration-guide.html)
```kotlin [rootProject]/app/build.gradle.kts theme={"system"}
android {
compileOptions { // [!code ++]
isCoreLibraryDesugaringEnabled = true // [!code ++]
} // [!code ++]
}
dependencies {
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5") // [!code ++]
}
```
```kotlin [rootProject]/app/src/main/[java|kotlin]/com/example/MyApp.kt theme={"system"}
import ai.flowx.android.sdk.main.FlowxOwner
class MyApp : Application(), FlowxOwner { // [!code ++]
override val flowx: Lazy = lazy { Flowx.getInstance() } // [!code ++]
}
```
As a result of this change, all calls to `FlowxSdkApi.getInstance()` must be replaced with `Flowx.getInstance()`.
```kotlin theme={"system"}
import ai.flowx.android.sdk.FlowxSdkApi // [!code --]
import ai.flowx.android.sdk.main.Flowx // [!code ++]
FlowxSdkApi.getInstance() // [!code --]
Flowx.getInstance() // [!code ++]
```
```kotlin theme={"system"}
import ai.flowx.android.sdk.process.model.SdkConfig // [!code --]
import ai.flowx.android.sdk.api.Config // [!code ++]
Flowx.getInstance().init(
context = applicationContext,
config = SdkConfig(...), // [!code --]
config = object : Config { ... }, // [!code ++]
)
```
The `config` parameter is no longer a `data class`. It is now an `interface`.
```kotlin theme={"system"}
data class SdkConfig(...) // [!code --]
interface Config { ... } // [!code ++]
```
When passing custom validators as a configuration parameter, the linter might show errors related to inferring the type of the `validators` property. To fix, use `Map Boolean>?` as a type.
```kotlin focus={5,9} theme={"system"}
FlowxSdkApi.getInstance().init( // [!code --]
Flowx.getInstance().init( // [!code ++]
context = applicationContext,
config = SdkConfig( // [!code --]
enableLog = true, // [!code --]
), // [!code --]
config = object : Config {
//...
override val logEnabled: Boolean get() = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE // [!code ++]
}, // [!code ++]
)
```
```kotlin focus={1,4,5} theme={"system"}
Flowx.getInstance().init(
context = applicationContext,
config = object : Config { ... },
accessTokenProvider = null, // null by default; can be set later, depending on the existing authentication logic // [!code --]
)
```
Authentication will now be managed by calling the `Flowx.getInstance().setAccessToken(accessToken: String?)` method with the appropriate argument
Refer to the following steps for detailed information about the authentication process migration
```kotlin theme={"system"}
import ai.flowx.android.sdk.ui.components.custom.CustomComponentsProvider // [!code --]
import ai.flowx.android.sdk.api.custom.components.CustomComponentsProvider // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderProvider // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeaderProvider // [!code ++]
```
```kotlin theme={"system"}
// if used explicitly
import ai.flowx.android.sdk.analytics.AnalyticsCollector // [!code --]
import ai.flowx.android.sdk.api.analytics.AnalyticsCollector // [!code ++]
import ai.flowx.android.sdk.analytics.Event // [!code --]
import ai.flowx.android.sdk.api.analytics.Event // [!code ++]
```
```kotlin theme={"system"}
import ai.flowx.android.sdk.NewProcessStartedHandler // [!code --]
import ai.flowx.android.sdk.api.NewProcessStartedHandler // [!code ++]
```
**Summary of changes:**
```kotlin diff v4.0.25..v9.0.2 focus={2,5,9,13,17,20,24,27,41-52,63} theme={"system"}
import ai.flowx.android.sdk.FlowxSdkApi // [!code --]
import ai.flowx.android.sdk.main.FlowxSdk // [!code ++]
import ai.flowx.android.sdk.process.model.SdkConfig // [!code --]
import ai.flowx.android.sdk.api.Config // [!code ++]
// if used explicitly
import ai.flowx.android.sdk.ui.components.custom.CustomComponentsProvider // [!code --]
import ai.flowx.android.sdk.api.custom.components.CustomComponentsProvider // [!code ++]
// if used explicitly
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderProvider // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeaderProvider // [!code ++]
// if used explicitly
import ai.flowx.android.sdk.analytics.AnalyticsCollector // [!code --]
import ai.flowx.android.sdk.api.analytics.AnalyticsCollector // [!code ++]
import ai.flowx.android.sdk.analytics.Event // [!code --]
import ai.flowx.android.sdk.api.analytics.Event // [!code ++]
// if used explicitly
import ai.flowx.android.sdk.NewProcessStartedHandler // [!code --]
import ai.flowx.android.sdk.api.NewProcessStartedHandler // [!code ++]
FlowxSdkApi.getInstance().init( // [!code --]
Flowx.getInstance().init( // [!code ++]
context = applicationContext,
config = SdkConfig( // [!code --]
baseUrl = "flowx base url", // [!code --]
enginePath = "flowx engine path", // [!code --]
imageBaseUrl = "flowx image base url", // [!code --]
language = "en", // [!code --]
locale = Locale.getDefault(), // [!code --]
validators = mapOf("cnp" to { it.length == 13 }), // a simplified example for custom validator, named "cnp", which checks only the length of the given data // [!code --]
customHeaders = mapOf("Custom-Header" to "custom header value"), // [!code --]
updateStateEnabled = true, // [!code --]
cacheDocuments = true, // [!code --]
enableLog = true, // [!code --]
), // [!code --]
config = object : Config { // [!code ++]
override val baseUrl: String = "flowx base url" // [!code ++]
override val enginePath: String = "flowx engine path" // [!code ++]
override val imageBaseUrl: String = "flowx image base url" // [!code ++]
override val language: String = "en" // defaults to "en" // [!code ++]
override val locale: Locale = Locale.getDefault() // defaults to Locale.getDefault() // [!code ++]
override val validators: Map Boolean>? = mapOf("cnp" to { it.length == 13 }) // a simplified example for custom validator, named "cnp", which checks only the length of the given data // defaults to null // [!code ++]
override val customHeaders: Map? = mapOf("Custom-Header" to "custom header value") // defaults to null // [!code ++]
override val updateStateEnabled: Boolean = true // defaults to true // [!code ++]
override val cacheDocuments: Boolean = true // defaults to true // [!code ++]
override val logEnabled: Boolean get() = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE // or whatever value fits your use case // [!code ++]
}, // [!code ++]
accessTokenProvider = null, // null by default; can be set later, depending on the existing authentication logic // [!code --]
customComponentsProvider = object : CustomComponentsProvider {...},
customStepperHeaderProvider = object : CustomStepperHeaderProvider { ... },
analyticsCollector = { event ->
when (event) {
is Event.Screen -> Log.i("Analytics", "Event.Screen(value = ${event.data.value})")
is Event.Action -> Log.i("Analytics", "Event.Action(value = ${event.data.value}, screen = ${event.data.screen}, component = ${event.data.component}, label = ${event.data.label})")
}
},
onNewProcessStarted = object : NewProcessStartedHandler.Delegate { ... }
)
```
The `setAccessTokenProvider` method on the SDK instance has been replaced with `setAccessToken`.
```kotlin theme={"system"}
import ai.flowx.android.sdk.FlowxSdkApi.Companion.AccessTokenProvider // [!code --]
fun setAccessTokenProvider(accessTokenProvider: AccessTokenProvider) // [!code --]
fun setAccessToken(accessToken: String?) // null or empty argument clears the token // [!code ++]
```
Consequently, all calls to `setAccessTokenProvider` must be replaced with calls to `setAccessToken`:
```kotlin theme={"system"}
FlowxSdkApi.getInstance().setAccessTokenProvider(accessTokenProvider = { "accessTokenValue" }) // [!code --]
Flowx.getInstance().setAccessToken("accessTokenValue") // [!code ++]
```
To be able to query for substitution tags or media library items in order to display them in the `CloseModalProcessConfirmAlert`, the `closeModalFunc` lambda passed as a parameter when starting (i.e. `Flowx.getInstance.startProcess(...)`) or continuing (i.e. `Flowx.getInstance.continueProcess(...)`) is now scoped to the `CloseModalProcessScope` interface, which allows that.
```kotlin theme={"system"}
interface CloseModalProcessScope {
public fun replaceSubstitutionTag(string: String): String
public fun getMediaResourceUrl(key: String): String?
}
```
This restricts the usage of previously unrestricted exposed functions to only within the context of the `CloseModalProcessScope` receiver (i.e. they can now be called only from inside a @Composable running in this scope).
Methods within the `CloseModalProcessScope` are now called through the actual scope itself, rather than relying on `Flowx.getInstance()`, since they are no longer visible on the SDK instance.
```kotlin theme={"system"}
import ai.flowx.android.sdk.api.CloseModalProcessScope
@Composable
private fun ProcessContent(
uiState: ProcessViewModel.UiState,
onProcessEnded: (() -> Unit)? = null,
onCloseProcessModalFunc: ((processName: String) -> Unit)? = null, // [!code --]
onCloseProcessModalFunc: (CloseModalProcessScope.(processName: String) -> Unit)? = null, // [!code ++]
) {
when {
!uiState.projectId.isNullOrBlank() && !uiState.processName.isNullOrBlank() -> {
Flowx.getInstance().startProcess(
projectId = uiState.projectId,
processName = uiState.processName,
isModal = true,
onProcessEnded = { onProcessEnded?.invoke() },
closeModalFunc = { processName -> onCloseProcessModalFunc?.invoke(processName) }, // [!code --]
closeModalFunc = { processName -> onCloseProcessModalFunc?.invoke(this, processName) }, // [!code ++]
).invoke()
}
!uiState.processUuid.isNullOrBlank() -> {
Flowx.getInstance().continueProcess(
processUuid = uiState.processUuid,
isModal = true,
onProcessEnded = { onProcessEnded?.invoke() },
closeModalFunc = { processName -> onCloseProcessModalFunc?.invoke(processName) }, // [!code --]
closeModalFunc = { processName -> onCloseProcessModalFunc?.invoke(this, processName) }, // [!code ++]
).invoke()
}
}
}
```
When using it, an approach could be this:
```kotlin ProcessActivity.kt theme={"system"}
setContent {
var closeModalProcessScope by remember { mutableStateOf(null) }
val showCloseModalProcessAlert = remember { mutableStateOf(false) }
ProcessContent(
...
onCloseProcessModalFunc = { processName ->
closeModalProcessScope = this
showCloseModalProcessAlert.value = true
},
)
closeModalProcessScope?.CloseModalProcessConfirmAlert(show = showCloseModalProcessAlert)
}
@Composable
private fun CloseModalProcessScope.CloseModalProcessConfirmAlert(show: MutableState) {
if (show.value) {
AlertDialog(
...
text = { Text(replaceSubstitutionTag("@@close_message")) } // `replaceSubstitutionTag` is now accessible through the `CloseModalProcessScope` scope
)
}
}
```
Update the related imports:
```kotlin theme={"system"}
import ai.flowx.android.sdk.ui.components.custom.CustomComponentsProvider // [!code --]
import ai.flowx.android.sdk.api.custom.components.CustomComponentsProvider // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.CustomComposable // [!code --]
import ai.flowx.android.sdk.api.custom.components.CustomComponent // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.CustomComposableComponent // [!code --]
import ai.flowx.android.sdk.ui.components.custom.CustomView // [!code --]
import ai.flowx.android.sdk.ui.components.custom.CustomViewComponent // [!code --]
import ai.flowx.android.sdk.ui.components.custom.CustomComponentAction // [!code --]
import ai.flowx.android.sdk.api.custom.components.CustomComponentAction // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.FxEnumerationItem // [!code --]
import ai.flowx.android.sdk.api.custom.components.FxEnumeration // [!code ++]
import ai.flowx.android.sdk.api.custom.components.CustomComponentScope // [!code ++]
```
The new class hierarchy structure is as follows:
```kotlin v4.0.25 theme={"system"}
interface CustomComponentsProvider {
fun provideCustomComposableComponent(): CustomComposableComponent?
@Deprecated(...) fun provideCustomViewComponent(): CustomViewComponent? = null
}
interface CustomComposableComponent {
fun provideCustomComposable(componentIdentifier: String): CustomComposable?
}
interface CustomComposable {
@Deprecated(...) val isDefined: Boolean
val composable: @Composable () -> Unit
fun populateUi(data: Any?)
fun populateUi(actions: Map)
fun validate(): Boolean = true
fun saveData(): JSONObject? = null
}
@Deprecated(...)
interface CustomViewComponent {
@Deprecated(...) fun provideCustomView(componentIdentifier: String): CustomView
}
@Deprecated(...)
interface CustomView {...}
```
```kotlin v9.0.2 theme={"system"}
interface CustomComponentsProvider {
fun provideCustomComponent(componentIdentifier: String): CustomComponent?
}
interface CustomComponent {
val composable: @Composable CustomComponentScope.() -> Unit
fun populateUi(data: Any?)
fun populateUi(actions: Map)
fun validate(): Boolean = true
fun saveData(): JSONObject? = null
}
```
The structural changes include:
* The `CustomComposable` class has been renamed to `CustomComponent`.
* All deprecated properties, methods, and interfaces have been removed. Support for the Android classical View system has been completely discontinued.
* The `provideCustomComposableComponent()` method within `CustomComponentsProvider` has been replaced with `fun provideCustomComponent(): CustomComponent?`.
* The `CustomComposableComponent` class has been removed.
* The provided @Composable function passed to the `composable` property of the `CustomComponent` interface can now only exist and be called within the context of a `CustomComponentScope` receiver.
```kotlin theme={"system"}
interface CustomComponent {
val composable: @Composable () -> Unit // [!code --]
val composable: @Composable CustomComponentScope.() -> Unit // [!code ++]
}
```
```kotlin theme={"system"}
interface CustomComponentScope {
fun executeAction(action: CustomComponentAction, params: JSONObject? = null)
fun replaceSubstitutionTag(string: String): String
fun getMediaResourceUrl(key: String): String?
suspend fun getEnumeration(name: String, parentName: String? = null): FxEnumeration?
}
```
This restricts the usage of previously unrestricted exposed functions to only within the context of the `CustomComponentScope` receiver (i.e., they can now be called only from within a custom component implementation).
Methods within the `CustomComponentScope` are now called through the actual scope itself, rather than relying on `Flowx.getInstance()`, since they are no longer visible on the SDK instance.
```kotlin theme={"system"}
Flowx.getInstance().executeAction(...) // [!code --]
flowxScope.executeAction(...) // [!code ++]
Flowx.getInstance().replaceSubstitutionTag(...) // [!code --]
flowxScope.replaceSubstitutionTag(...) // [!code ++]
Flowx.getInstance().getMediaResourceUrl(...) // [!code --]
flowxScope.getMediaResourceUrl(...) // [!code ++]
Flowx.getInstance().getEnumeration(...) // [!code --]
flowxScope.getEnumeration(...) // [!code ++]
```
Consequently, the following changes should be made to access the scope within the custom component ViewModel:
```kotlin MyCustomComponentViewModel.kt theme={"system"}
class MyCustomComponentViewModel() : ViewModel() {
private lateinit var flowxScope: CustomComponentScope
fun setFlowxScope(scope: CustomComponentScope) {
flowxScope = scope
}
fun executeSomeRealAction() {
actions["someRealAction"]?.let {
if (this@MyCustomComponentViewModel::flowxScope.isInitialized) {
flowxScope.executeAction(
action = it,
params = JSONObject() // e.g. JSONObject("{\"someParameter\": \"someValue\"}")
)
}
}
}
}
```
```kotlin MyCustomComponent.kt theme={"system"}
@Composable
private fun CustomComponentScope.MyCustomComponent(
viewModel: MyCustomComponentViewModel
) {
viewModel.setFlowxScope(this@MyCustomComponent)
// here goes the rest of the UI implementation
}
```
* The `CustomComponentAction` is no longer a `data class` as before. It is now an `interface`.
The exposed data has been reduced to the maximum required for executing the action:
```kotlin v4.0.25 theme={"system"}
data class CustomComponentAction(
internal val actionName: String?,
internal val type: ActionType?,
internal var tokenUuid: String?,
internal var uiActionFlowxUuid: String,
internal val context: String,
internal val params: Params?,
internal val keys: List?,
internal val customBody: JsonElement?,
internal val collectionItemData: JsonObject?,
internal val componentTemplateConfigId: Int,
)
```
```kotlin v9.0.2 theme={"system"}
interface CustomComponentAction {
val name: String
val uiTemplateId: Int
val uiTemplateContext: String
val uiTemplateReusableContext: String?
}
```
* When querying for an enumeration by calling the `CustomComponentScope.getEnumeration(...)` method, the returned type has changed from `List` to `FxEnumeration`
```kotlin v4.0.25 theme={"system"}
data class FxEnumerationItem(
val type: String? = null,
val order: Int? = null,
val childContentDescription: ChildContentDescription? = null,
val code: String? = null,
val content: String? = null
) {
data class ChildContentDescription(
val name: String? = null
)
}
```
```kotlin v9.0.2 theme={"system"}
interface FxEnumeration {
val name: String
val items: List
val parentName: String?
interface Item {
val code: String
val content: String?
val childNomenclatorName: String?
val order: Int
}
}
```
These changes are reflected in an actual implementation as shown below:
```kotlin v4.0.25 expandable theme={"system"}
import ai.flowx.android.sdk.FlowxSdkApi
import ai.flowx.android.sdk.ui.components.custom.CustomComponentAction
import ai.flowx.android.sdk.ui.components.custom.CustomComponentsProvider
import ai.flowx.android.sdk.ui.components.custom.CustomComposable
import ai.flowx.android.sdk.ui.components.custom.CustomComposableComponent
import ai.flowx.android.sdk.ui.components.custom.CustomView
import ai.flowx.android.sdk.ui.components.custom.CustomViewComponent
import ai.flowx.external.android.template.app.R
import android.content.Context
import android.util.AttributeSet
import android.view.View
import android.widget.Button
import android.widget.LinearLayout
import android.widget.TextView
import android.widget.Toast
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LifecycleRegistry
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelStore
import androidx.lifecycle.ViewModelStoreOwner
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.compose.viewModel
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.launch
import org.json.JSONObject
class CustomComponentsProviderImpl : CustomComponentsProvider {
override fun provideCustomComposableComponent(): CustomComposableComponent? {
return object : CustomComposableComponent {
override fun provideCustomComposable(componentIdentifier: String): CustomComposable =
object : CustomComposable {
val data: MutableStateFlow = MutableStateFlow(null)
var actions: Map = emptyMap()
override val isDefined: Boolean
get() = when (componentIdentifier) {
"myCustomComponent" -> true // NOTE: set this to false to use the legacy view system instead of compose, which is mainstream now
else -> false
}
override val composable: @Composable () -> Unit = when (componentIdentifier) {
"myCustomComponent" -> { {
val viewModel = remember { MyCustomComponentViewModel(data, actions) }
MyCustomComponent(viewModel = viewModel)
} }
else -> { {} }
}
override fun populateUi(data: Any?) {
this.data.value = data
}
override fun populateUi(actions: Map) {
this.actions = actions
}
// Optional override, defaults to `true`.
override fun validate(): Boolean = true
// Optional override, defaults to `null`.
override fun saveData(): JSONObject? = null
}
}
}
override fun provideCustomViewComponent(): CustomViewComponent? {
return object : CustomViewComponent {
override fun provideCustomView(componentIdentifier: String) = object : CustomView {
val data: MutableStateFlow = MutableStateFlow(null)
var actions: Map = emptyMap()
override val isDefined: Boolean
get() = when (componentIdentifier) {
"myCustomComponent" -> true // NOTE: set the compose equivalent component to false to use the legacy view system instead of compose (which is mainstream now)
else -> false
}
override fun getView(context: Context): View = when (componentIdentifier) {
"myCustomComponent" -> myCustomComponent(context, data, actions)
else -> View(context)
}
override fun populateUi(data: Any?) {
this.data.value = data
}
override fun populateUi(actions: Map) {
this.actions = actions
}
}
}
}
}
@Composable
private fun MyCustomComponent(
viewModel: MyCustomComponentViewModel = viewModel()
) {
val firstName by viewModel.firstName.collectAsState()
val lastName by viewModel.lastName.collectAsState()
val dateOfBirth by viewModel.dateOfBirth.collectAsState()
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
) {
Text(
text = "Compose Custom Component",
style = MaterialTheme.typography.titleLarge,
)
Spacer(modifier = Modifier.height(16.dp))
Column(
modifier = Modifier
.background(color = Color(0x80FFFF00))
.padding(16.dp)
.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(4.dp)
) {
Text(
text = "Client: $firstName $lastName",
style = MaterialTheme.typography.titleMedium,
)
Text(
text = "Date of Birth: $dateOfBirth",
style = MaterialTheme.typography.titleMedium,
)
}
val context = LocalContext.current
TextButton(
onClick = {
// enable and adjust values to test the action (which was prior defined in the process)
// viewModel.executeSomeRealAction()
Toast.makeText(context, "Define action in the process and enable its execution in the code", Toast.LENGTH_LONG).show()
}
) {
Text(text = "Confirm")
}
}
}
private fun myCustomComponent(
context: Context,
data: MutableStateFlow = MutableStateFlow(null),
actions: Map = emptyMap(),
): View {
return CustomComponentView(context = context, data = data, actions = actions)
}
class CustomComponentView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0,
data: MutableStateFlow = MutableStateFlow(null),
actions: Map = emptyMap(),
) : LinearLayout(context, attrs, defStyleAttr), ViewModelStoreOwner, LifecycleOwner {
private val registry = LifecycleRegistry(this)
private var job: Job? = null
private lateinit var client: TextView
private lateinit var dateOfBirth: TextView
private val viewModel: MyCustomComponentViewModel by lazy {
ViewModelProvider(
store = viewModelStore,
factory = object : ViewModelProvider.Factory {
override fun create(modelClass: Class): T {
@Suppress("UNCHECKED_CAST")
return MyCustomComponentViewModel(data, actions) as T
}
}
)[MyCustomComponentViewModel::class.java]
}
init {
initView()
}
private fun initView() {
View.inflate(context, R.layout.my_custom_component, this)
client = findViewById(R.id.tvClient)
dateOfBirth = findViewById(R.id.tvDateOfBirth)
findViewById
Update the related imports:
```kotlin theme={"system"}
import ai.flowx.android.sdk.ui.components.custom.CustomComposableStepperHeader // [!code --]
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderData // [!code --]
import ai.flowx.android.sdk.ui.components.custom.ComposableStepperHeader // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeader // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderProvider // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeaderProvider // [!code ++]
```
The new class hierarchy structure is as follows:
```kotlin v4.0.25 theme={"system"}
interface CustomStepperHeaderProvider {
fun provideCustomComposableStepperHeader(): CustomComposableStepperHeader?
}
interface CustomComposableStepperHeader {
fun provideComposableStepperHeader(): ComposableStepperHeader
}
interface ComposableStepperHeader {
val composable: @Composable (data: CustomStepperHeaderData) -> Unit
}
interface CustomStepperHeaderData { ... }
```
```kotlin v9.0.2 theme={"system"}
interface CustomStepperHeaderProvider {
fun provideCustomStepperHeader(): CustomStepperHeader?
}
interface CustomStepperHeader {
val composable: @Composable (data: Data) -> Unit
interface Data { ... }
}
```
The structural changes include:
* The `ComposableStepperHeader` class has been renamed to `CustomStepperHeader`.
* The `CustomStepperHeaderData` class has been moved under the `CustomStepperHeader` and renamed to `Data`.
* The `provideCustomComposableStepperHeader()` method within `CustomStepperProvider` has been replaced with `fun provideCustomStepperHeader(): CustomStepperHeader?`.
* The `CustomComposableStepperHeader` class has been removed.
These changes are reflected in an actual implementation as shown below:
```kotlin diff v4.0.25..v9.0.2 focus={2,5,10,14,16,18,22,23,26} theme={"system"}
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderProvider // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeaderProvider // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.ComposableStepperHeader // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeader // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.CustomComposableStepperHeader // [!code --]
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderData
class CustomStepperHeaderProviderImpl : CustomStepperHeaderProvider {
override fun provideCustomComposableStepperHeader(): CustomComposableStepperHeader? { // [!code --]
return object : CustomComposableStepperHeader { // [!code --]
override fun provideComposableStepperHeader(): ComposableStepperHeader { // [!code --]
override fun provideCustomStepperHeader(): CustomStepperHeader? { // [!code ++]
return object : ComposableStepperHeader { // [!code --]
return object : CustomStepperHeader { // [!code ++]
override val composable: @Composable (data: CustomStepperHeaderData) -> Unit // [!code --]
override val composable: @Composable ((CustomStepperHeader.Data) -> Unit) // [!code ++]
get() = @Composable { data ->
// custom header implementation
}
}
}
} // [!code --]
} // [!code --]
}
```
For runtime environment changes, use the `changeEnvironment` method available on the SDK instance.
```kotlin theme={"system"}
fun updateConfig(config: SdkConfig) // [!code --]
fun changeEnvironment(baseUrl: String, imageBaseUrl: String, enginePath: String) // [!code ++]
```
Do not change the environment while displaying a running processWhen changing the environment, ensure the access token is updated properly
```kotlin diff v4.0.25..v9.0.2 theme={"system"}
fun startProcess(
workspaceId: String, // [!code ++]
projectId: String,
processName: String,
params: JSONObject? = null,
isModal: Boolean = false,
onProcessEnded: (() -> Unit)? = null,
closeModalFunc: (CloseModalProcessScope.(processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
The `workspaceId` is the identifier of the workspace that contains the project and process to be started
```kotlin diff v4.0.25..v9.0.2 theme={"system"}
fun setupTheme(
workspaceUuid: String, // [!code ++]
themeUuid: String,
fallbackThemeJsonFileAssetsPath: String? = null,
appearance: Flowx.ThemeAppearance = Flowx.ThemeAppearance.LIGHT, // or DARK
@MainThread onCompletion: () -> Unit,
)
```
The `workspaceId` is the identifier of the workspace that contains the theme to be loaded
## iOS SDK migration guide
### SDK API changes
#### Start process
The start process API require a `workspaceId`.
```swift theme={"system"}
public func startProcess(navigationController: UINavigationController,
workspaceId: String,
projectId: String,
name: String,
params: [String: Any]?,
isModal: Bool = false,
showLoader: Bool = false,
onProcessEnded: (() -> Void)? = nil)
```
```swift theme={"system"}
public func startProcess(tabBarController: UITabBarController,
workspaceId: String,
projectId: String,
name: String,
params: [String: Any]?,
isModal: Bool = false,
showLoader: Bool = false,
onProcessEnded: (() -> Void)? = nil)
```
#### Setup theme
The setup theme API requires a `workspaceId`.
```swift theme={"system"}
public func setupTheme(withUuid uuid: String,
workspaceId: String,
localFileUrl: URL? = nil,
appearance: SwiftUI.ColorScheme? = .light,
completion: (() -> Void)?)
```
# Post-upgrade troubleshooting
Source: https://docs.flowx.ai/release-notes/v5.x/v5.1.x-lts/v5.1.0-september-2025/migrating-from-v4.7.x-to-5.1/troubleshooting
Common issues and solutions that may occur after upgrading from FlowX v4.7.x to v5.1.0.
This section covers common issues that may occur after completing the upgrade to FlowX.AI 5.1.0 and their solutions.
## Designer login issues
### DataIntegrityViolationException error
If you cannot login to FlowX Designer after the 5.x upgrade and encounter the following error in the authorization-system logs:
```
org.springframework.dao.DataIntegrityViolationException: could not execute statement [ERROR: duplicate key value violates unique constraint "cas_user_username_key"
Detail: Key (username)=(admin@flowx.ai) already exists.] [insert into public.cas_user (created_by,created_date,email,first_name,issuer,last_name,modified_by,modified_date,subject_id,username,id) values (?,?,?,?,?,?,?,?,?,?,?)]; SQL [insert into public.cas_user (created_by,created_date,email,first_name,issuer,last_name,modified_by,modified_date,subject_id,username,id) values (?,?,?,?,?,?,?,?,?,?,?)]; constraint [cas_user_username_key]
```
**Root Cause**: This error occurs because the `sub` (subject ID) is missing from JWT tokens. Starting with Keycloak version 25, the `sub` claim is not added by default to lightweight access tokens.
**Solution**: Ensure the `basic` Client Scope is created in your Keycloak Realm and added to all FlowX clients.
Since Keycloak version 25, the `sub` claim is not added by default to JWT lightweight tokens. This is a breaking change that affects FlowX.AI authentication.
### How to verify if subject ID is missing
Try to login to FlowX Designer and note if the login fails.
1. Open your browser's Developer Tools
2. Navigate to the **Network** tab
3. Attempt to login again
4. Look for a call to: `https:///auth/realms/flowx/protocol/openid-connect/token`
5. Copy the access token from the response
1. Go to [https://jwt.io/](https://jwt.io/)
2. Paste the token in the **Encoded** section
3. Check the **Payload** section for the presence of the `sub` claim
If the `sub` claim is present, the token should contain a field like: `"sub": "12345678-1234-1234-1234-123456789abc"`
If the `sub` claim is missing, you need to configure the Client Scope in Keycloak:
1. Login to your Keycloak Admin Console
2. Navigate to your FlowX realm
3. Go to **Client Scopes**
4. Ensure the `basic` client scope exists and includes the `sub` claim
5. Add this client scope to all FlowX clients (FlowX Designer, Admin, etc.)
### Additional resources
Official Keycloak documentation about lightweight access token changes
***
## Other common issues
Additional troubleshooting sections will be added as common post-upgrade issues are identified. If you encounter issues not covered here, please consult the FlowX support team.
# FlowX.AI 5.1.0 Release Notes
Source: https://docs.flowx.ai/release-notes/v5.x/v5.1.x-lts/v5.1.0-september-2025/v5.1.0-september-2025
Introducing Workspaces, Project Data Model, Library-to-Library Dependencies, Data Mappers, Reusable Resources, and more for a more efficient and flexible development experience.
**What's new? 🆕**
Build once, use everywhere. These features transform how you develop and maintain applications by eliminating duplication and enabling sophisticated modular architectures.
🔄 [**Project Data Model (PDM)**](#project-data-model-pdm) - Define reusable data types at the project level to ensure consistency across processes\
🔄 [**Library-to-Library Dependencies**](#library-to-library-dependencies) - Create complex dependency trees with multiple levels of library-to-library relationships\
🔄 [**Data Mappers**](#data-mappers) - Visual drag-and-drop data mapping with reusable parameter definitions\
🔄 [**Reusable Resources**](#reusable-resources) - Create and manage UI Templates and Business Functions across multiple processes\
🔄 [**Files in Integration Designer**](#files-in-integration-designer) - Enhanced file management and reusability in integration workflows\
🔄 [**Resources Overrides**](#resources-overrides) - Localization and customization of core applications across multiple regions with centralized management\
🔄 [**Active Policy Overrides**](#active-policy-overrides) - User-specific and role-specific deployment policies for independent testing and controlled rollouts
### **Project Data Model (PDM)**

The new Project Data Model feature enables you to define and manage data types at the project level, which can then be reused across all processes within your project.
Define data types once at the project level and reuse them across multiple processes
Changes to PDM data types automatically propagate to all referencing processes
Configure sensitive data and reporting settings at the project level
Use data types from libraries in your Project Data Model
Define common data types like Customer, Product, or Document once instead of recreating them in each process
Update a data type in one place and have changes apply everywhere it's used
Enforce consistent naming, structure, and governance across your application
Create new processes faster by leveraging pre-defined data types

***
### **Library-to-Library Dependencies**

FlowX.AI 5.1.0 introduces the ability for libraries to depend on other libraries, enabling hierarchical dependency structures and more sophisticated modular architectures.
Create complex dependency trees with multiple levels of library-to-library relationships
Projects automatically gain access to resources from the entire dependency hierarchy
Single-version constraint ensures consistency across the dependency tree
Built-in validation prevents circular dependencies and version conflicts
Break down complex functionality into smaller, focused libraries that can depend on each other
Enable different teams to own and maintain specific libraries while building on shared foundations
Create country-specific or domain-specific libraries that extend common base libraries
Organize libraries hierarchically, reducing complexity and improving maintainability

```
Mortgage Project
├── Enums Library (1.6.0)
├── Integrations Library (2.5.0)
│ ├── Commons Library (1.1.0)
│ └── Enums Library (1.6.0) # Transitive dependency
└── Subprocesses Library (1.3.0)
└── Enums Library (1.6.0) # Transitive dependency
```
In this example, both Integrations Library and Subprocesses Library depend on other libraries, creating a multi-level hierarchy that the Mortgage Project can leverage.
### **Data Mappers**
Data Mappers enable users to visually map data transfers between components with intuitive drag-and-drop functionality while maintaining full backward compatibility with existing implementations.
Drag-and-drop interface for mapping data between source and destination components
Seamlessly connect processes, subprocesses, workflows, and business rules
Define input/output parameters with predefined and flexible parameter types
Choose between new Data Mapper or existing implementation methods
Visual interface eliminates complex configuration syntax and reduces integration errors
Define parameters once and reuse across multiple components and processes
Centralized parameter management with clear data flow visibility
Optional adoption with full backward compatibility ensures smooth transition
Map data between parent processes and subprocesses (sync/async)
Connect processes with Integration Designer workflows
Pass data to and from business rule executions
Map data between workflow nodes (REST endpoints, data persistence)
***
### **Reusable Resources**

FlowX.AI 5.1.0 introduces Reusable Resources, a revolutionary new section that eliminates repetitive development work by enabling you to create and manage both UI Templates and Business Functions that can be used across multiple processes and projects.
Create JavaScript or Python functions once and use them across multiple processes via Business Rule actions
Define input/output parameters with full project data model integration and testing capabilities
Test functions with sample data in real-time before deployment to ensure accuracy
Changes to functions automatically update all instances across your application
Design UI components once and instantiate them across multiple User Tasks with automatic data binding
Manage all templates from the new Reusable Resources section alongside Reusable Functions
Templates work seamlessly across different platforms and channels
Define UI actions within templates with two scenarios: template-defined actions or form-centric data handling
Stop recreating the same business logic and UI patterns across different processes - build once, use everywhere
Update functions and templates in one place to automatically affect all instances across your application
Replace scattered, inconsistent UI patterns with centrally managed, reusable components
Build new processes faster by leveraging pre-built, tested components instead of starting from scratch
**Customer Data Validation Function:**
* **Input**: firstName, lastName, email, phone
* **Logic**: Format validation, duplicate checking, data standardization
* **Output**: validatedCustomer object with formatted data
* **Usage**: Customer onboarding, profile updates, registration processes across all channels
**Credit Risk Assessment Function:**
* **Input**: applicationData, customerProfile, financialHistory
* **Logic**: Complex credit scoring algorithms, risk categorization, recommendation engine
* **Output**: riskScore, riskCategory, approvalRecommendation, requiredDocuments
* **Usage**: Loan applications, credit cards, mortgage processes, business lending
**Document Processing Function:**
* **Input**: documentFile, documentType, customerID
* **Logic**: OCR processing, data extraction, compliance validation
* **Output**: extractedData, validationStatus, complianceFlags
* **Usage**: KYC processes, claims processing, application reviews
**Personal Details Card Template:**
* **Root Component**: Card with professional styling
* **Contains**: Name, email, phone, address input fields with validation
* **UI Actions**: Save data, clear form, auto-populate from existing data
* **Usage**: Customer registration, profile updates, employee onboarding, contractor management
**Document Upload Section Template:**
* **Root Component**: Container with drag-and-drop functionality
* **Contains**: File upload area, progress indicators, document list, preview capabilities
* **UI Actions**: Upload documents, delete files, download copies, validate formats
* **Usage**: Loan applications, compliance documentation, claims submissions, HR processes
**Financial Summary Dashboard Template:**
* **Root Component**: Card with data visualization
* **Contains**: Balance displays, transaction history, chart components, action buttons
* **UI Actions**: Refresh data, export reports, drill-down details
* **Usage**: Account overviews, investment portfolios, expense tracking, budget management
***
### **Files in Integration Designer**

FlowX.AI 5.1.0 introduces comprehensive file handling capabilities in Integration Designer, resolving previous limitations where sending or receiving documents, photos, or any files via Integration Designer was not supported. This powerful enhancement enables seamless file exchange with external systems through automated workflows.
Process calls external API (GET/POST) and receives files in response. Integration Designer saves files to specified location and returns paths to workflow
Process sends files stored in Document Plugin or S3 Bucket to external API via POST request. Workflow transmits file path for seamless transfer
Seamless integration with FlowX.AI Document Plugin for process-specific file management and organization
Custom S3 bucket storage for files not tied to specific process instances or when Document Plugin is unavailable
Enable seamless file transfer with external systems without manual handling or complex custom integrations
Choose between Document Plugin for process-specific files or S3 Protocol for independent file operations
Files are automatically integrated into workflow processes with proper path management and metadata handling
Communicate effectively with document services, AI processing systems, report generators, and CMS platforms
**Scenario**: Generate personalized contracts using external document services
* **Process Flow**: Send customer data → External contract service → Receive generated PDF contract
* **Integration**: Customer information flows to document generation API, completed contracts return to process
* **Storage**: Generated contracts stored in Document Plugin for process tracking and audit trails
* **Business Value**: Automated contract creation with legal template compliance and version control
**Scenario**: Process uploaded documents through external AI/OCR services
* **Process Flow**: Upload document → AI processing service → Receive extracted data and processed files
* **Integration**: Documents sent to AI services for text extraction, classification, or compliance validation
* **Storage**: Processed documents and extracted data stored for business logic processing
* **Business Value**: Automated document processing with intelligent data extraction capabilities
**Scenario**: Generate business reports using external reporting services
* **Process Flow**: Send business data → Reporting service → Receive formatted reports (PDF, Excel)
* **Integration**: Business metrics and KPIs sent to specialized reporting engines
* **Storage**: Generated reports available for download and distribution workflows
* **Business Value**: Professional report generation with advanced formatting and visualization capabilities
**Scenario**: Integrate with content management systems for file organization
* **Process Flow**: Upload files → CMS integration → Organize and categorize content
* **Integration**: Files uploaded to external CMS platforms with metadata and categorization
* **Storage**: S3 Protocol ideal for CMS integrations with unassociated documents
* **Business Value**: Centralized content management with automated workflow integration
***
### **Resources Overrides**

Resources Overrides enable localization and customization of core business applications across multiple regions while maintaining centralized updates from headquarters. This powerful feature allows organizations to adapt specific business logic, compliance requirements, or local regulations without losing connection to the master application.
Customize processes, workflows, and enumerations for different countries or regions while maintaining core functionality
Manage all resource overrides through the Dependencies page with comprehensive override tracking and configuration
Override only specific resources that need localization while inheriting all other updates from the main library
Automatically include override configurations in project exports and imports for seamless environment management
Deploy core applications to new regions quickly by overriding only country-specific elements instead of rebuilding from scratch
Adapt business logic and data handling to meet local regulatory requirements while preserving global standards
Continue receiving updates and improvements from headquarters without losing local customizations
Manage regional variations centrally instead of maintaining completely separate application instances
Customize business process logic while maintaining input/output compatibility and core workflow structure
Replace entire workflow implementations to adapt business rules for local requirements
Localize value lists, dropdown options, and classification systems for regional variations
Overrides are resolved dynamically at runtime, ensuring the correct regional version is always used
**Scenario**: Global bank with country-specific loan approval processes
* **Global Library**: Common loan application workflow with standard validation steps
* **Country Overrides**: Local credit scoring algorithms, regulatory compliance checks, documentation requirements
* **Business Value**: Single platform maintenance with automated compliance for each country's banking regulations
**Scenario**: Insurance company operating across different regulatory environments
* **Global Library**: Standard claims processing workflow and policy management
* **Regional Overrides**: Country-specific coverage types, claim validation rules, regulatory reporting
* **Business Value**: Consistent global operations with local market adaptation and compliance
**Scenario**: Manufacturing company with different operational requirements per region
* **Global Library**: Core production planning and inventory management processes
* **Local Overrides**: Regional supplier networks, compliance standards, environmental regulations
* **Business Value**: Standardized operations with flexibility for local business practices and regulations
***
### **Active Policy Overrides**

Active Policy Overrides enable user-specific and role-specific deployment policies that allow independent testing of different builds or branches without affecting the global policy. This powerful feature provides granular control over which project versions different users access in runtime environments.
Create individual policy overrides for specific users to test different builds independently
Apply policy overrides to entire roles for team-based testing and deployment strategies
Handle conflicts when multiple overrides apply using configurable priority systems
Switch between different project versions instantly without deployment downtime
Enable QA teams and developers to test different builds simultaneously without interfering with production users
Gradually deploy new features to specific user groups before full production release
Quickly revert specific users to stable versions during incidents without affecting the entire system
Allow different teams to work with different development branches in shared environments
Support for both "Latest on Branch" and specific "Build" policies with flexible branch and version selection
Real-time search functionality to quickly locate specific user or role overrides
Enable or disable overrides without deletion for temporary testing scenarios
Clear hierarchy: User overrides > Role overrides > Global policy with priority-based resolution
**Scenario**: Frontend team needs to test with latest UI changes while backend team tests API updates
* **Override Setup**: Create role-based overrides for "Frontend Developers" and "Backend Developers"
* **Policy Configuration**: Frontend role uses latest on `ui-redesign` branch, Backend role uses `api-v2` branch
* **Business Value**: Parallel development with isolated testing environments and no cross-team interference
**Scenario**: New premium features need testing with select customers before full release
* **Override Setup**: Create user-specific overrides for beta customers and internal stakeholders
* **Policy Configuration**: Beta users get latest build with premium features, others remain on stable version
* **Business Value**: Risk mitigation through controlled exposure and real-world testing feedback
**Scenario**: Critical bug discovered in production affecting specific user workflows
* **Override Setup**: Create high-priority role override for affected user groups
* **Policy Configuration**: Temporarily revert affected users to last stable build while others continue normally
* **Business Value**: Immediate incident response with minimal user impact and service continuity
Advanced data management and storage capabilities that enable new architectural patterns and improved data governance.
🔄 [**Workspaces (Multi-Tenant Architecture)**](#workspaces-multi-tenant-architecture) - Logical separation of business contexts with shared infrastructure\
🔄 [**FlowX.AI Database**](#flowx-ai-database) - New persistence layer that enables you to store and retrieve data across different processes and applications, without relying on external systems.
### **Workspaces (Multi-Tenant Architecture)**

FlowX.AI 5.1.0 introduces Workspaces, enabling organizations to manage multiple business lines, verticals, or countries within a single FlowX.AI instance while maintaining complete data isolation.
Logical separation of business contexts with shared infrastructure
Role-based access control (RBAC) and Access Control Lists (ACLs) with workspace-specific permissions
Complete logical isolation between workspaces while enabling controlled resource sharing
Simplified permission management through groups and workspace-specific roles
Onboard new business verticals in days instead of weeks with shared platform capabilities
Implement fine-grained access control with workspace-specific roles and permissions
Centralize platform upgrades, maintenance, and monitoring across all business units
Separate workspaces for different countries/regions with shared global processes
Independent workspaces for retail, corporate, and investment banking divisions
Isolate processes subject to different regulatory requirements
Enable different teams to work independently while sharing common resources
***
### **FlowX.AI Database**
FlowX.AI Database is a new persistence layer that enables you to store and retrieve data across different processes and applications, without relying on external systems.
Store data that persists beyond process instances
Find, insert, and manipulate data using familiar MongoDB operations
Seamlessly integrate with workflows through Data Source nodes
Organize your data in structured collections
Enable communication and data sharing between different process instances
Store operational data within FlowX.AI instead of building custom connectors
Build dashboards, caching solutions, and other applications that require persistent data
Keep your data within the FlowX.AI ecosystem for improved security and simplicity

FlowX.AI Database integrates directly into the existing Integration Designer as a new Data Source type alongside RESTful System, making it easy to create and manage database collections without learning new interfaces.
Enhanced user experience through improved components, better performance, and streamlined interface design.
🎨 [**Rendering Improvements & UI/UX Enhancements**](#rendering-improvements-uiux-enhancements) - Enhanced grid components, navigation redesign, advanced form controls, and analytics capabilities\
📋 [**Forms in Collections**](#forms-in-collections) - Enhanced support for form elements within collection components, enabling complex data entry scenarios\
🔄 [**Multi Select UI Component**](#multi-select-ui-component) - Allows users to choose multiple options from a predefined list, expanding upon the existing single Select component to support multi-value scenarios.
### **Rendering Improvements & UI/UX Enhancements**
FlowX.AI 5.1.0 delivers comprehensive UI/UX improvements that enhance the user experience across all platform components, from streamlined navigation to advanced form controls and better workflow handling.
## Interface & Navigation Improvements
Improved performance, responsiveness, and customization options for data display and form organization
Streamlined navigation experience in both UI Designer and Process Designer with improved interface organization
Batch operations support for UI components, enabling simultaneous actions on multiple elements, multi select, multi copy/paste, multi drag and drop, multi delete
Granular control over UI element editing based on user permissions with partial editing capabilities, allow multiple executors on swimlane level
## Enhanced Form Controls & Components
Specialized input component for code entry
Advanced formatting capabilities for Input and Slider components
Enhanced switch component supporting both toggle and checkbox variants
Configure specific options as disabled while keeping them visible in dropdown lists
## User Experience Enhancements
Configurable loading indicators for improved user experience during data operations
Advanced validation logic using dynamic computed expressions that can reference other process data values. Write JavaScript expressions that return boolean values for cross-field validation scenarios
Introduces a specialized button variant for file upload operations, supporting fill, ghost, and text types for flexible UI styling.
Efficiently replicate styling across multiple UI components
## Workflow & Analytics Improvements
Custom payload support for detailed user interaction tracking and business intelligence
Improved user experience when processes complete or terminate
Streamlined template organization by consolidating functionality in Reusable Resources
***
### **Forms in Collections**
A powerful new feature that enables dynamic, repeatable forms within collection prototypes, eliminating the need for custom development when building forms with repeatable sections like co-debtors, comments, or any list of similar items.
## Key Capabilities
Drag Form components directly into Collection Prototypes - they automatically repeat for each item in your data array
Choose between individual item validation or bulk validation across all collection items
Individual save (one item at a time) or bulk save (entire collection) with different validation behaviors
## Common Use Cases Solved
Build forms that show different elements based on conditions without custom development
Create forms with sections like adding multiple co-debtors, comments, or family members
Handle arrays of objects with proper validation and data management
Choose individual saves for real-time editing or bulk saves for form completion workflows
***
### **Multi Select UI Component**

The new Multi Select component allows users to choose multiple options from a predefined list, expanding upon the existing single Select component to support multi-value scenarios.
Users can select multiple options from dropdown lists, with values stored as arrays
Show selections as chips, comma-separated lists, or custom formats
Configure maximum number of selectable options to control user input
Built-in search functionality to filter through large option lists
Allow users to select multiple skills, qualifications, or areas of expertise
Enable selection of multiple categories, tags, or classification options
Let customers choose multiple product features, services, or add-ons
Capture user preferences where multiple options can be active simultaneously

Configure Multi Select components with the same ease as other form elements. Set maximum selections, display formats, search options, and validation rules through the familiar UI Designer interface.
* **Max. Options Selectable**: Limit the number of selections
* **Show selections**: Choose how selected items are displayed
* **Search for options**: Enable filtering within large lists
* **Has Clear**: Allow users to clear all selections at once
* **Validation rules**: Min/max selections, required validations
## **Additional information**
Instructions for deploying FlowX.AI 5.1.0
Step-by-step guide for migrating from v4.7.x to v5.1.0
# FlowX.AI 5.1.1 Release Notes (LTS)
Source: https://docs.flowx.ai/release-notes/v5.x/v5.1.x-lts/v5.1.1-november-2025
WCAG 2.1 Level AA compliance achieved, AI Platform enhancements, bug fixes, and quality improvements for the FlowX.AI 5.1.x LTS line.
This is a **Long-Term Support (LTS)** maintenance release focusing on **accessibility compliance**, **AI Platform enhancements**, **customer issue resolution**, and **proactive quality improvements**.
Upgrades from **5.1.0 → 5.1.1** are non-breaking and fully compatible.
**Quality Achievement**: FlowX.AI 5.1.1 demonstrates our commitment to proactive quality improvement:
* **[WCAG 2.1 Level AA compliance](https://www.w3.org/TR/WCAG21/)** achieved across all web components
* **Proactive quality improvements** identified through internal QA before reaching customers
* **Customer issues** resolved with full business context
* **Zero breaking changes** - fully compatible upgrade from 5.1.0
This release represents months of accessibility audits, automated testing, and quality assurance work to deliver exceptional software quality.
***
**What's new? 🆕**
FlowX.AI 5.1.1 delivers comprehensive improvements across accessibility, stability, and platform reliability.
♿ [**WCAG 2.1 Compliance Achieved**](#wcag-21-compliance-achieved) — Full accessibility support across all web components\
🌍 [**Task Management Localization**](#task-management-localization) — Comprehensive multi-language support with 51 substitution tags\
🤖 [**AI Platform Enhancements**](#ai-platform-enhancements) — Multi-agent system improvements and AI workflow stability\
🎯 [**Customer Fixes**](#customer-fixes) — Critical issues resolved based on customer feedback\
✨ [**Proactive Improvements**](#proactive-quality-improvements) — Issues identified through internal QA before reaching customers\
🔧 [**Platform Enhancements**](#platform-enhancements) — SSE handling, audit logs, and infrastructure improvements
### **WCAG 2.1 compliance**
**FlowX.AI is now WCAG 2.1 Level AA compliant**
This release delivers full accessibility support through **28 comprehensive improvements** across Angular and React SDKs, making FlowX applications usable by everyone, including users with disabilities.
### Business value
Meet accessibility requirements for government and public sector applications
Comply with healthcare industry accessibility regulations and standards
Satisfy financial sector requirements for inclusive digital experiences
Keyboard navigation and clear labels improve usability for all users, not just those with disabilities
### What changed
* All components now fully keyboard-accessible
* Complete screen reader support with ARIA labels
* Proper focus management across all interactions
* Accessible error announcements and validation
* Semantic HTML structure throughout
Automatically bind accessibility labels, descriptions, and ARIA attributes to all UI components from Designer configuration
Full keyboard navigation support with proper focus management, tab order, and keyboard shortcuts in Angular and React SDKs
ARIA labels, descriptions, and live regions implemented across all form elements and interactive components
Dedicated accessibility configuration section in UI Designer for managing labels and descriptions
Input fields, Select/Multiselect, Checkbox, Switch, Radio/Segmented buttons, Slider, and File upload with labels, descriptions, and error announcements
Buttons, Links, Modals, Stepper, Tabs, and Accordion/Card with keyboard navigation, focus management, and state announcements
Messages and Images with semantic HTML structure and proper labeling
Complete implementation for Angular and React SDKs (iOS and Android in future releases)
**28 Improvements Delivered:**
* Custom keyboard navigation implementation
* Focus management for Select/Multiselect components
* Modal focus trap and restoration
* Shift+Tab handling across form elements
* Listbox keyboard operations
* Table navigation improvements
* Switch and checkbox accessibility
* File preview focus indicators
* Button Space key activation
* Link focus outlines
* Disabled element keyboard behavior
* BaseUI Combobox implementation for Select/Multiselect
* Keyboard navigation with clear buttons
* Focus restoration after interactions
* Outline theming for focus indicators
* Modal auto-focus on open
* Card accordion keyboard handling
* Table row navigation
* Option highlighting in dropdowns
* Accessibility configuration panel
* Auto-bindable tags for all components
* Label and description fields
* Alt text management for images
* ARIA attribute configuration
* Accessibility section styling
* Component-specific accessibility settings
* Implemented BaseUI Combobox for Select/Multiselect
* Custom keyboard navigation for Angular
* React SDK keyboard navigation with clear button
* Auto-bindable accessibility tags for all components
* Accessibility configuration panel in UI Designer
* Removed conflicting title attribute tooltips
* Aligned Stepper accessibility between frameworks
* Bind labels and descriptions to form fields
***
### **Customer fixes**
We prioritized and resolved **customer-reported issues** in this release, addressing critical functionality issues and workflow inefficiencies reported via Zendesk.
**Problem:**\
When copying nodes with Kafka send actions, topic and message configurations were not preserved, forcing users to manually reconfigure all action parameters after paste operations.
**Customer Impact:**
* Development velocity significantly reduced
* Risk of configuration errors during manual re-entry
* Frustration with repetitive configuration work
**Resolution:**\
actionParamsMap now properly persists through copy/paste operations
**Steps to reproduce (fixed):**
1. Create send message node with Kafka action
2. Configure topic and message parameters
3. Copy and paste the node
4. All configurations now preserved correctly
**Customer Benefit:**\
Faster workflow development with reduced configuration errors and improved developer experience.
**Problem:**\
When deleting parent actions that had child actions with warnings, the warnings remained in the system as orphans. These orphaned warnings prevented process export/import operations and blocked build deployments.
**Customer Impact:**
* Build pipelines blocked by stale warnings
* Deployment delays requiring manual database cleanup
* Process export/import operations failed
* Development and testing workflows disrupted
**Resolution:**\
Warnings now cascade-delete automatically when parent actions are removed
**Steps to reproduce (fixed):**
1. Create action with subactions containing warnings
2. Delete the parent action
3. All child warnings now properly cleaned up
**Customer Benefit:**\
Clean deployments without manual intervention, faster development cycles, no more blocked pipelines.
**Problem:**\
Auto-generated `default_application` in new environments existed only in app\_manager schema and could not be deleted through standard operations, returning validation errors.
**Customer Impact:**
* Environment cleanup difficulties
* Testing complications with unwanted default projects
* Confusion about application lifecycle management
**Resolution:**\
Added proper runtime validation for application deletion operations
**Error (Fixed):**
```json theme={"system"}
{
"status": 400,
"message": "error.validation.runtime.application.not_found",
"title": "Runtime project not found."
}
```
**Customer Benefit:**\
Clean environment management with predictable application lifecycle operations.
***
### **Proactive quality improvements**
**Issues identified and resolved proactively**:
### Quality process
WCAG 2.1 compliance testing identified keyboard navigation and focus management improvements
Continuous integration pipelines caught component behavior issues and rendering problems
Manual testing uncovered edge cases in form interactions and modal behaviors
Peer reviews identified potential stability issues in backend processing and dependency management
### Distribution by category
* **Keyboard Navigation**: Fixes across Angular and React
* **Focus Management**: Fixes for modals, forms, and interactive elements
* **Component Behavior**: Fixes for proper state handling and rendering
* **Backend Stability**: Fixes for processing and dependency management
* Fixed listbox remaining open when pressing Shift+Tab
* Fixed Shift+Tab not working on Select with search
* Fixed Multiselect tab navigation moving to first element instead of next
* Fixed Select input focus not working properly
* Fixed Select list not scrolling during keyboard navigation
* Fixed up/down arrow scrolling screen alongside option list
* Fixed focus lost after loading new user task
* Fixed focusable table content not reached from table header
* Fixed Link in message focus missing outline
* Fixed modal close button not focused automatically
* Fixed file preview focus not highlighted and lost
* Fixed button inside modal not working with Space key
* Fixed Multiselect options list not opening
* Fixed MultiSelect and link focusable when disabled
* Fixed modal dismiss buttons not working with Space key
* Fixed modal without close button not easily focusable
* Fixed modal dismiss not focused automatically
* Fixed Switch type checkbox focus not highlighted
* Fixed Space pressed on card with accordion scrolling page
* Fixed Switch with label position start focus issues
* Fixed outline from theme not applied to modal close button and links
* Fixed Select selected option not highlighted in options list
* Fixed Select search not filtering after selection
* Fixed Input/textarea/select focus lost after using clear button
* Fixed Tab focus moving inside collapsed card
* Fixed table Tab navigation skipping rows
* Fixed focusable table content not reached from table header
* Fixed file preview retry focus not highlighted and lost
* Fixed Select and link focusable when disabled
* Fixed Switch type checkbox focus not highlighted
* Fixed Datepicker clear icon focus not highlighted
* Fixed modal dismiss not focused automatically
* Fixed doc preview modal not closable with Enter or Space
* Fixed button inside table focus not highlighted
* Fixed Slider decimal numbers not rendered correctly
* Fixed Substepper not rendered correctly
* Fixed doc preview display mode showing inline
* Fixed cards expandable before token reaches them
* Fixed missing accessibility section on Link component
* Fixed missing accessibility section on Image button
* Fixed missing space in accessibility label and info icon
* Fixed Alt text field disabled styling not applied
* Fixed console errors when changing pages from header
* Fixed Select/multiselect highlighted in preview and settings tabs
* Fixed outline theming in enumerations and inputs
* Fixed Workflows info points content not rendered correctly
* Fixed Workflows tabs content not showing properly
* Fixed padding missing on RUT UI Assets panel
* Fixed wrong navigationTree response on overridden process
* Fixed incorrect navigationTree for resource override details
* Fixed error when trying to update dependency lib versions
* Fixed error returned when updating dependency with override
* Fixed no response on out topic for start process by name from Kafka
* Fixed checkbox "Allow back to this action" status not loaded
* Fixed empty screen when logging in without workspace access
* Fixed Elasticsearch scheduled task errors with failed documents
* Fixed services not logging when Liquibase crashing due to lock
Proactive Quality
***
### **Task management localization**
FlowX.AI 5.1.1 adds comprehensive localization support for Task Management, enabling multi-language task management interfaces through 51 system substitution tags. Table grid localization is automatic.

* **FlowX Substitution Tags** (51 keys) - Custom Task Management elements, **manually configured in CMS**
* **Table Grid Localization** - Data table components, **automatically localized based on container app language**
This feature enables complete Task Management localization for global deployments, meeting requirements for government, healthcare, and financial services applications requiring multi-language support.
Complete set of substitution tags for task actions, statuses, history events, and UI elements
Table grid localizes automatically based on container app language; FlowX tags configured manually in CMS
Angular and React renderers use system substitution tags on all task management texts
**FlowX Substitution Tags (51 Keys):**
* Table columns (title, stage, assignee, status, priority, last updated)
* Process states (created, started, finished, failed, expired, etc.)
* Task actions (assign, unassign, hold, unhold, execute, start)
* Bulk operations (assign to, unassign all, hold all, etc.)
* History events (task created, assigned, status changed, etc.)
* User selection dialogs and UI states
**Table Grid Localization**:
* Filters (set, text, number, date with all operators)
* Menus (column, context, aggregation, sorting)
* Pagination (navigation, page size, row counts)
* Data types (boolean, dates, numbers with formatting)
* ARIA labels for accessibility
Configure your container application language - FlowX.AI automatically handles table grid localization based on this setting
Add translations for all 51 sys\_tm\_\* tags in CMS for each supported language - this is the only manual configuration needed
Web renderers automatically apply system substitution tags to all task management UI elements
Localization
Complete implementation guide with all 51 substitution tags, supported languages, and troubleshooting
Configure substitution tags in CMS for multi-language support
***
### **AI Platform enhancements**
FlowX.AI 5.1.1 delivers significant improvements to the AI Platform, enhancing multi-agent collaboration, conversation management, and AI workflow stability. These enhancements ensure more reliable AI-assisted development workflows and better user experience.
Enhanced agent communication and thread management for improved collaborative AI workflows
Improved conversation handling with better error propagation and session management
Enhanced AI Developer capabilities with proper data model integration and expression generation
Multi-page document generation support and improved content handling
**Multi-Agent Conversation Management:**
* Enhanced conversation thread handling with proper parent action status updates
* Improved backend support for adding new messages on agent threads
* Better session management with new session button in Command Center
* Context switching prevention during execution plan generation
**AI Developer Enhancements:**
* Fixed data model integration for expressions and business rules generation
* Improved action target saving and destination setting
* Enhanced execution plan editing from user prompts
* Better handling of empty execution plans
**Error Handling & Stability:**
* Graceful error propagation from internal AI agent operations
* Improved CORS headers for document object downloads
* Enhanced telemetry support for debugging and monitoring
* Better handling of plan enhancement patches
**Document & Content Features:**
* Multi-page document generation support in AI nodes
* Source selector component for image and document inputs
* Improved messaging system for AI agents in command center
* Enhanced UI feedback for AI-generated resources
**Backend Enhancements:**
* Continuous patching support for action contexts during execution
* Improved navigation tree responses for overridden processes
* Enhanced dependency management for library overrides
* Better error handling and logging across AI services
**Frontend Improvements:**
* Fixed target selector closing behavior in implementation threads
* Improved preview mode handling after developer changes
* Enhanced command center messaging and error display
* Better UI state management for AI workflow interactions
**Integration Updates:**
* CORS headers properly configured for GraphQL object downloads
* Process task destinations automatically set to current process
* Improved integration between AI agents and execution plans
* Enhanced audit logging for resource overrides
AI Platform
***
### **Platform enhancements**
Improved Server-Sent Events disconnect handling to reduce error log flooding when clients disconnect
Implemented audit logs for library resource overrides to track configuration changes
Fixed high vulnerabilities in Designer 5.1.x and main branch
Web renderers now use system substitution tags on all task management texts
Enhanced outline and select/multiselect option highlight theming for visual consistency
**Code Quality:**
* Eliminated deprecated code for Kafka start process
* Improved error handling for Elasticsearch document updates
* Enhanced dependency management for library overrides
* Better logging and error reporting across services
**Performance:**
* Optimized SSE connection handling
* Improved query performance for navigation tree
* Better resource management in long-running processes
Platform Updates
## Additional information
**Upgrade Compatibility**: FlowX.AI 5.1.1 is fully compatible with 5.1.0. No configuration changes, schema migrations, or data transformations are required.
### Compatibility
Direct upgrade from 5.1.0 → 5.1.1 with no breaking changes or configuration updates
Compatible with FlowX.AI SDKs (Angular/React/iOS/Android), Designer, and Database 5.1.x
### Deployment information
Standard deployment procedures apply. No special migration steps required for this maintenance release.
### Known issues
The following items are in progress or backlog for future releases:
* Android and iOS accessibility properties implementation
* Additional Select component refinements
* UI Designer padding optimizations
### What's next
**FlowX.AI 5.1.x LTS** will continue to receive maintenance updates focused on:
* Security patches and vulnerability fixes
* Stability improvements and critical bug fixes
* Accessibility enhancements for mobile platforms
* Performance optimizations
Major new features are planned for future releases in the 5.x series. See the [5.2.0 Tech Preview](../v5.2.0-tech-preview/v5.2.0-tech-preview) for upcoming capabilities.
# Deployment guidelines v5.2.0
Source: https://docs.flowx.ai/release-notes/v5.x/v5.2.0-november-2025/deployment-guidelines-v5.2
After upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

## Component versions
| Component | 5.2.0 | 5.1.1 | 5.1.0 | 5.0.0 | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 |
| -------------------------- | ----------- | ------- | ------- | ------ | ------- | ------ | ------ | ------ | ------- |
| **process-engine** | **10.12.0** | 9.64.3 | 9.63.0 | 9.29.2 | 8.24.1 | 8.23.3 | 8.23.2 | 8.22.3 | 8.21.11 |
| **admin** | **10.12.0** | 9.66.5 | 9.65.0 | 9.25.2 | 7.18.4 | 7.17.3 | 7.16.3 | 7.15.2 | 7.12.2 |
| **designer** | **10.12.1** | 9.159.5 | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **cms-core** | **10.7.0** | 9.36.3 | 9.35.0 | 9.21.2 | 5.11.1 | 5.10.3 | 5.9.2 | 5.8.2 | 5.5.1 |
| **scheduler-core** | **10.4.1** | 9.26.1 | 9.25.0 | 9.12.0 | 5.7.1 | 5.6.2 | 5.5.2 | 5.4.0 | 5.1.1 |
| **events-gateway** | **10.4.1** | 9.26.1 | 9.25.0 | 9.12.0 | 5.7.1 | 5.6.2 | 5.5.2 | 5.4.0 | 5.1.1 |
| **notification-plugin** | **10.7.0** | 9.29.1 | 9.28.0 | 9.14.2 | 6.8.1 | 6.7.2 | 6.6.2 | 6.5.0 | 6.2.1 |
| **document-plugin** | **10.6.0** | 9.35.1 | 9.34.0 | 9.17.2 | 6.10.1 | 6.9.2 | 6.8.2 | 6.7.0 | 6.4.1 |
| **task-management-plugin** | **10.7.0** | 9.34.2 | 9.33.0 | 9.14.2 | 7.9.2 | 7.8.2 | 7.7.2 | 7.6.0 | 7.3.1 |
| **data-search** | **10.4.1** | 9.23.1 | 9.22.0 | 9.12.1 | 4.7.1 | 4.6.2 | 4.5.2 | 4.4.0 | 4.1.1 |
| **audit-core** | **10.6.0** | 9.30.1 | 9.29.1 | 9.15.2 | 6.8.1 | 6.7.2 | 6.6.2 | 6.5.0 | 6.1.1 |
| **advancing-controller** | **10.4.1** | 9.25.1 | 9.24.0 | 9.11.0 | 4.7.1 | 4.6.2 | 4.6.2 | 4.4.0 | 4.1.1 |
| **integration-designer** | **10.8.0** | 9.50.0 | 9.49.1 | 9.26.2 | 2.16.1 | 2.15.3 | 2.14.2 | 2.13.0 | 2.9.0 |
| **application-manager** | **10.11.0** | 9.73.6 | 9.72.0 | 9.27.3 | 2.23.1 | 2.22.3 | 2.21.2 | 2.2 | |
| **runtime-manager** | **10.11.0** | 9.73.6 | 9.72.0 | 9.27.3 | 2.23.1 | 2.22.3 | 2.21.2 | 2.20.2 | 2.17.2 |
| **data-sync** | **10.3.1** | 9.22.1 | 9.21.0 | 9.11.0 | 2.10.2 | 2.9.2 | 2.8.1 | 2.7.1 | 2.4.1 |
| **authorization-system** | **10.7.0** | 9.34.2 | 9.33.0 | 9.14.2 | - | - | - | - | - |
| **nosql-db-runner** | **10.4.1** | 9.22.1 | 9.21.0 | 9.11.0 | - | - | - | - | - |
### Embedded components
* **SpiceDB**
* **DGraph**
### Renderers
| Component | 5.2.0 | 5.1.1 | 5.1.0 | 5.0.0 | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 |
| ----------------------------- | ----------- | ------- | ------- | ------ | ------- | ------ | ------ | ------ | ------ |
| **@flowx/angular-sdk** | **10.12.1** | 9.159.5 | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **@flowx/angular-theme** | **10.12.1** | 9.159.5 | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **@flowx/angular-ui-toolkit** | **10.12.1** | 9.159.5 | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **@flowx/react-sdk** | **10.12.1** | 9.159.5 | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **@flowx/react-theme** | **10.12.1** | 9.159.5 | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **@flowx/react-ui-toolkit** | **10.12.1** | 9.159.5 | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **iOS renderer** | **10.0.0** | 9.0.5 | 9.0.4 | 9.0.0 | 4.0.29 | 4.0.29 | 4.0.29 | 4.0.21 | 4.0.19 |
| **Android renderer** | **10.0.0** | 9.0.3 | 9.0.2 | 9.0.0 | 4.0.29 | 4.0.29 | 4.0.28 | 4.0.24 | 4.0.23 |
### Plugins
| Component | 5.2.0 | 5.1.1 | 5.1.0 | 5.0.0 | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 |
| -------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 |
| **reporting-plugin** | 0.2.3 | 0.2.3 | 0.2.3 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 |
### AI Platform
| Component | 5.2.0 | 5.1.1 | 5.1.0 | 5.0.0 | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 |
| ------------------------------- | ---------- | ----- | ----- | ------ | ------ | ------ | ------ | ------ | ------ |
| **ai-assistant** | **10.0.1** | 9.2.5 | 9.2.4 | 9.2.3 | 1.8.22 | 1.8.22 | 1.8.21 | 1.8.20 | 1.8.19 |
| **di-platform** | **10.2.0** | 9.3.1 | 9.3.1 | 9.0.12 | 1.4.6 | 1.4.6 | 1.4.5 | 1.4.5 | 1.4.3 |
| **ai-platform-ai-developer** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-connected-graph** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-knowledge-graph** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-agents** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-conversations** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-models** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-tenants** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-planner** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-ai-analyst** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-ai-designer** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-agent-builder** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-binaries** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Supported Versions |
| ---------------- | -------------------- | ------------------ |
| 5.2.0 | Keycloak | 26+ |
| 5.2.0 | Kafka | 3.8 - 3.9 |
| 5.2.0 | PostgreSQL | 16 - 17 |
| 5.2.0 | Oracle Database | 21c, 23ai |
| 5.2.0 | MongoDB | 7 - 8 |
| 5.2.0 | Redis | 7.4 - 8.0 |
| 5.2.0 | Elasticsearch | 8 - 9 |
| 5.2.0 | Angular (Web SDK) | 19.x |
| 5.2.0 | React (Web SDK) | 18.x |
Starting FlowX 5.0, the following versions of 3rd Party Dependencies are no longer supported:
* Keycloak versions older than 26
* Kafka versions older than 3.8
* Redis versions older than 7.4
## New in v5.2.0
### Key infrastructure updates
Upgraded to SpiceDB v1.38.0+ and spice-db-operator for improved permission management and stability
Updated Java libraries and base images to Oracle 10-slim, resolving HIGH and CRITICAL vulnerabilities
Enhanced renderer components with comprehensive WCAG 2.1 compliance features
Added autocomplete and IntelliSense support in business rules editors
Support for concurrent execution paths in Integration Designer workflows
## Upgrading from v5.1.0
### Key changes
* **Accessibility Features**: No breaking changes, but new accessibility properties available in UI Designer
* **Database Security**: FlowX Database now supports sensitive data masking (requires Project Data Model configuration)
* **IDE Enhancements**: Python autocomplete is automatically available in business rules editors
* **Infrastructure**: SpiceDB upgrade requires cache clearing after migration
### Environment variables updates
For detailed information on environment variables, see the [Update environment variables](./update-environment-variables-5.2) section.
### Compatibility
* **Backward Compatible**: v5.2.0 maintains backward compatibility with v5.1.0 configurations
* **Renderer Updates**: Web SDKs include accessibility enhancements without breaking changes
* **Mobile Renderers**: iOS and Android renderers include accessibility improvements
## Support
For technical support, deployment assistance, or feature questions, please contact your FlowX.AI support representative.
### Support channels
* **Technical issues**: Contact your FlowX.AI support representative
* **Feature questions**: Reach out through your designated support channel
* **Documentation**: Report documentation issues or suggestions
# Update environment variables
Source: https://docs.flowx.ai/release-notes/v5.x/v5.2.0-november-2025/update-environment-variables-5.2
Update environment variables for all existing FlowX.AI services
## Integration Designer
Integration Designer now uses the new ADVANCING controller with separate picking and processing operations for improved performance and resource management.
### Variables to remove & replace
| Remove This Variable | Replace With |
| ---------------------------- | ------------------------------------------------ |
| `ADVANCING_THREADS` | `ADVANCING_PICKINGTHREADS` (default: `1`) |
| `ADVANCING_PICKINGBATCHSIZE` | `ADVANCING_PROCESSINGBUFFERSIZE` (default: `20`) |
### New variables to add
| Variable | Default Value | Description |
| ------------------------------------------- | ------------- | -------------------------------------------------------------- |
| `ADVANCING_PROCESSINGTHREADS` | `20` | Number of threads for parallel processing of advancing events |
| `ADVANCING_BLOCKPICKINGIFNOWORKERAVAILABLE` | `true` | Block picking operations when no worker threads are available |
| `ADVANCING_DATASOURCE_MAXIMUMPOOLSIZE` | `20` | Maximum database connection pool size for advancing operations |
### Variables to update
| Variable | Current Value | New Value | Reason |
| ------------------------------ | ------------- | --------- | ----------------------------------------------- |
| `ADVANCING_PICKINGPAUSEMILLIS` | `100` | `50` | Optimized pause duration for better performance |
**How the new advancing controller works:**
* **Picking threads** (`ADVANCING_PICKINGTHREADS`): Controls how many worker threads read events from the database. This handles only the picking/reading operations.
* **Processing buffer** (`ADVANCING_PROCESSINGBUFFERSIZE`): Acts as a queue between picking and processing. When the buffer is full, no new events are read. When there's available space, that amount of events will be read.
* **Processing threads** (`ADVANCING_PROCESSINGTHREADS`): Controls how many threads process the advancing events in parallel. Events are processed instantly if processing threads are available. If all processing threads are busy, events accumulate in the buffer until it reaches capacity.
* **Blocking behavior** (`ADVANCING_BLOCKPICKINGIFNOWORKERAVAILABLE`): When enabled, prevents picking operations if no worker threads are available, ensuring better resource management.
# FlowX.AI 5.2.0 Release Notes
Source: https://docs.flowx.ai/release-notes/v5.x/v5.2.0-november-2025/v5.2.0-november-2025
Accessibility improvements, new side panel navigation, FlowX Database sensitive data handling, REST API response caching, and Python IDE enhancements for business rules development.
**What's new?**
Making FlowX applications more inclusive and user-friendly with comprehensive accessibility improvements and enhanced navigation.
♿ [**Accessibility Enhancements**](#accessibility-enhancements) - Comprehensive [WCAG](https://www.w3.org/TR/WCAG21/) (Web Content Accessibility Guidelines) compliance features across all UI components\
🎨 [**New Workflow Side Panel**](#new-workflow-side-panel) - Enhanced navigation experience with improved drag-and-drop functionality
### **Accessibility enhancements**
FlowX.AI 5.2.0 adds accessibility features across all UI components, enabling you to build [WCAG 2.1 Level AA compliant](https://www.w3.org/TR/WCAG21/) applications. These features support users with assistive technologies such as screen readers and keyboard-only navigation.


Configure labels, descriptions, and ARIA attributes in a dedicated accessibility section within UI Designer
Bind accessibility tags automatically to buttons, inputs, selects, modals, and other UI components
Navigate using keyboard shortcuts with proper focus management and tab order in Angular and React SDKs
Use screen readers with ARIA labels, descriptions, and live regions on all components
Input fields, Select/Multiselect, Checkbox, Switch, Radio buttons, Slider, and File upload components with labels and descriptions
Buttons, Links, Modals, Stepper, Tabs, and Accordion/Card components with keyboard navigation and focus management
Messages and Images with alt text support and semantic HTML structure
Web (Angular/React), iOS, and Android platforms
Build applications that meet WCAG 2.1 Level AA standards for web accessibility
Make your applications usable for people with diverse abilities and assistive technology users
Keyboard navigation and clear labels improve usability for all users, not just those using assistive technologies
Meet accessibility requirements for government, healthcare, financial services, and other regulated industries
Major Enhancement
***
### **New workflow side panel**
The new Workflow Side Panel provides an enhanced navigation experience in Integration Designer workflows. It includes improved organization, better drag-and-drop functionality, and intuitive access to design components and resources.

Add and organize workflow nodes with drag-and-drop functionality
Group nodes logically with expandable/collapsible sections
Find nodes instantly with quick search functionality
UI/UX Enhancement
***
Enhanced data management and security features for FlowX Database and business rules.
🔒 [**FlowX Database Sensitive Data**](#flowx-database-sensitive-data) - GDPR-compliant sensitive data handling for FlowX Database\
🚀 [**Performance Improvements**](#performance-improvements) - Caching optimizations for better system performance
### **FlowX database sensitive data**
FlowX.AI 5.2.0 adds sensitive data handling for FlowX Database to ensure GDPR compliance. Attributes marked as sensitive in your Project Data Model are automatically protected across all FlowX Database operations.
Hide sensitive attributes automatically in logs, console outputs, and testing interfaces
Mark attributes as sensitive in Project Data Model to apply protection across all FlowX Database operations
Access full data at runtime while maintaining security in design-time interfaces
Mask sensitive data in workflow output logs and operational documents
Sensitive attributes are masked when viewing FlowX Database documents in the designer
Database operation testing interfaces automatically hide sensitive data
Console logs and output panels mask sensitive information from FlowX Database responses
Applications have full access to sensitive data at runtime - protection is design-time only
Meet data protection requirements by preventing sensitive data exposure in design tools
Sensitive data protection is automatic once attributes are marked in Project Data Model
Test and develop without worrying about accidentally exposing sensitive information
Demonstrate proper data handling practices with masked logs and interfaces
Security Enhancement
***
### **Performance improvements**
FlowX.AI 5.2.0 adds intelligent caching mechanisms that improve system performance by reducing redundant processing when identical values are sent at process start.
Cache and reuse results automatically when identical input values are detected
Start processes faster when repeating operations with the same parameters
Reduce server load and improve resource utilization
Manage cache automatically with no configuration required
Initialize processes faster in cached scenarios
Handle more concurrent users with the same infrastructure
Use fewer compute resources for high-volume scenarios
Performance
Enhanced tools and features for business rules development, testing, and workflow design.
🔀 [**Parallel Branches in Workflows**](#parallel-branches-in-workflows) - Design and execute parallel execution paths in Integration Designer workflows\
💾 [**REST API Response Caching**](#rest-api-response-caching) - Cache GET endpoint responses in Integration Designer with flexible TTL policies\
🐍 [**Python IDE Enhancements**](#python-ide-enhancements) - Autocomplete and IntelliSense for Python business rules\
🧪 [**Business Rules Testing**](#business-rules-testing) - Save test parameters in reusable functions modal
### **Parallel branches in workflows**
FlowX.AI 5.2.0 adds the ability to design and execute parallel branches in Integration Designer workflows. This enables concurrent execution of independent workflow paths and improves performance for complex integrations.
Split workflow execution into multiple concurrent branches with start parallel nodes
Merge parallel branches with end parallel nodes that wait for all branches to complete
View which nodes belong to which parallel branch with visual path indexing in the workflow diagram
Track parallel path execution with timing information for each branch and merge point
Add a Start Parallel node and create multiple sequences from it. Each sequence represents an independent execution path
Add workflow nodes to each parallel branch, such as API calls, transformations, or database operations
Close parallel branches with an End Parallel node. This node waits for all branches to complete before continuing
All branches execute concurrently at runtime. The End Parallel node completes when the slowest branch finishes
Call multiple independent APIs concurrently instead of sequentially, reducing total execution time
Fetch data from multiple sources in parallel for comprehensive data aggregation
Send notifications through multiple channels (email, SMS, push) simultaneously
Process different document types or sections in parallel for faster throughput
* **Path Time**: Sum of all node execution times within that branch
* **End Parallel Time**: Node processing time + maximum time across all parallel paths
* **Example**: If Branch A takes 2s and Branch B takes 5s, the End Parallel node completes after 5s (plus its own processing time)
* **Start Parallel Node**: Displays Input tab showing data split across branches
* **End Parallel Node**: Displays Output tab showing merged results from all branches
* **Path Grouping**: Nodes within each parallel path are grouped for easy monitoring
* If any branch fails, the workflow handles it according to standard error handling rules
* End Parallel node waits for all non-failed branches before continuing
* Runtime validation ensures parallel branches are configured correctly
**First Iteration Constraints**: This is the initial implementation of parallel branches with the following considerations:
* **Array Processing**: Arrays are not merged across parallel branches. When multiple branches modify the same array path, the last branch to complete determines the final array value. You cannot process individual objects from the same array in different parallel branches (for example, first element in branch 1, second element in branch 2). To preserve data from all branches, save to different keys and merge manually using a script before the end node
* **Branch Closure**: All start parallel branches must be closed with end parallel nodes. Nodes following a start parallel node must merge into the same end parallel node, except for nodes that terminate with end workflow nodes
Based on user feedback and raised exceptions during runtime execution, additional configuration constraints and validations are planned for future releases.
Reduce workflow execution time by running independent operations concurrently instead of sequentially
Maximize throughput by executing multiple operations simultaneously
Model concurrent operations explicitly in your workflow diagrams
Track execution time for each parallel path to identify bottlenecks
Integration Designer
***
### **Integration Designer REST API response caching**
FlowX.AI 5.2.0 introduces intelligent response caching for REST API GET endpoints in Integration Designer. Cache responses based on flexible Time-To-Live (TTL) policies to reduce redundant API calls, avoid rate limits, and lower operational costs while maintaining data freshness.

When data is stable for a defined period, caching eliminates unnecessary external API calls and improves workflow performance.
Configure caching with "Expires after" (duration-based) or "Expires at" (time-based) policies
Clear cached responses from endpoint definitions or testing modals as needed
View cache status, keys, and TTL information in testing modals and workflow console logs
System automatically calls the external API if cache retrieval fails, ensuring reliability
Cache responses for a specific duration after the request is made.
**Configuration Options**:
* **ISO Duration**: Use ISO 8601 duration format (e.g., `PT1H` for 1 hour, `P1D` for 1 day, `P1W` for 1 week)
* **Dynamic Duration**: Reference configuration parameters (e.g., `${myConfigParam}`)
* **Default**: `R/P1D` (1 day)
**Example**: Cache for 10 minutes after each request
```
PT10M
```
Cache responses until a specific time of day with recurring patterns.
**Configuration Options**:
* **Expire Time**: Set specific time (e.g., `23:00` for midnight, `08:00` for 8 AM)
* **Recurrency**: Set how often the pattern repeats (integer > 0, default: 1)
* **Time Unit**: Choose Day, Week, or Month (default: Day)
**Example**: Cache until midnight every day
```
Expire Time: 00:00
Recurrency: 1
Time Unit: Day
```
**Example**: Cache until 6 PM every Friday
```
Expire Time: 18:00
Recurrency: 1
Time Unit: Week
```
View cache status directly in the endpoint testing modal with:
* **Cache Hit/Miss Status**: Whether results came from cache
* **Cache Key**: The unique identifier for the cached response
* **TTL Information**: When the cache expires (e.g., "Expires after PT10M" or "Expires at 23:00 on 2025-11-04")
Monitor cache usage in workflow execution logs with the same detailed information
Clear cached responses from the endpoint page or testing modal when cache is configured
In Integration Designer, open a REST System and navigate to a GET endpoint. Enable caching and select your TTL policy (Expires After or Expires At)
When the endpoint is called for the first time, the response is fetched from the external API and stored in cache with the configured TTL
If the cache is still valid (within TTL), subsequent requests return the cached response immediately without calling the external API
Once TTL expires, the next request fetches fresh data from the external API and updates the cache
Use the "Clear Cache" action to manually invalidate cached responses when needed (e.g., after data updates)
Cache country lists, product catalogs, or other reference data that rarely changes
Reduce API calls to third-party services with strict rate limits
Lower operational costs by reducing billable API calls to external services
Improve workflow execution speed by eliminating network latency for cached responses
**Reliability First**: If any issue occurs with cache retrieval or storage, FlowX.AI automatically falls back to calling the external API directly. This ensures your workflows always receive correct data.
**Failure Scenarios**:
* Cache service unavailable → Direct API call
* Cache corruption or invalid data → Direct API call
* Cache storage failure → Direct API call (with warning logged)
Your workflows continue to function normally even if caching fails.
Minimize charges from external APIs by serving cached responses when data hasn't changed
Return responses instantly from cache instead of waiting for external API calls
Stay within API rate limits by reducing the number of requests to external services
Handle higher workflow volumes without increasing external API calls
Integration Designer
Learn how to configure caching policies, manage cache, and optimize your REST API integrations
***
### **Python IDE enhancements**
FlowX.AI 5.2.0 adds professional IDE features to Python business rules development, including autocomplete, IntelliSense, and enhanced code editing capabilities.
Get intelligent code suggestions as you type, including Python standard library and FlowX APIs
Use context-aware code completion with parameter hints and documentation
Read code more easily with enhanced Python syntax highlighting
Detect syntax errors in real-time with helpful error messages
Write business rules faster with intelligent code suggestions
Catch syntax errors before deployment with real-time validation
Discover available APIs and methods through IntelliSense
Use IDE-quality editing features directly in FlowX Designer
Developer Tools
***
### **Functions testing**
Test Reusable Functions more efficiently by saving test parameters directly from the testing modal. This enables faster iteration and better test coverage.
Save test inputs directly from the testing modal and reuse them in future test runs
Access previously saved test parameters for regression testing
Re-test functions quickly with saved parameter sets
Build a library of test cases for comprehensive function validation
Test functions more thoroughly to improve quality
Avoid re-entering test data for each test iteration
Use saved test cases as examples of how to use the function
Testing Enhancement
Platform improvements, security updates, and bug fixes.
🌍 [**Task Management Localization**](#task-management-localization) - Comprehensive localization support with automatic table grid localization and 51 substitution tags\
🔧 [**Platform Enhancements**](#platform-enhancements) - Infrastructure upgrades and security improvements\
🐛 [**Bug Fixes**](#bug-fixes) - Resolved issues and stability improvements
### **Task management localization**
FlowX.AI 5.2.0 adds comprehensive localization support for Task Management, enabling you to customize all user-facing text elements including table columns, filters, and actions. This allows you to deliver Task Management experiences in multiple languages:

* **FlowX Substitution Tags** (51 keys) - Custom Task Management elements, **manually configured in CMS**
* **Table Grid Localization** - Data table components, **automatically localized based on container app language**
Data table components (filters, menus, pagination, data types) are automatically localized based on container app language
Configure 51 system substitution tags in CMS to localize table columns, task actions, and UI elements
Support for 34 languages including Arabic, Chinese, Japanese, Korean, and European languages
Localize all task actions, statuses, and workflow-related text elements
FlowX Task Management uses a comprehensive table grid localization system. These keys are **automatically applied** by FlowX.AI based on your container app language and cover all table functionality:
* **Filters**: Set filters, text filters, number filters, date filters with all operators (equals, contains, starts with, etc.)
* **Menus**: Column menus, context menus, aggregation functions, sorting options
* **Pagination**: Page navigation, page size selectors, row counts
* **Data Types**: Boolean values, dates, numbers with proper formatting
* **Advanced Features**: Pivot mode, charting, column grouping, and row operations
* **ARIA Labels**: Accessibility labels for screen readers and assistive technologies
**Automatic Localization**: Table grid locale keys are automatically translated by FlowX.AI based on your container app language. No manual configuration or setup required.
Use these substitution tags in CMS to localize custom Task Management interface elements. All tags include English default values:
**Search & Navigation**
* `sys_tm_search` - "Search"
**Table Columns**
* `sys_tm_title` - "Title"
* `sys_tm_stage` - "Stage"
* `sys_tm_assignee` - "Assignee"
* `sys_tm_status` - "Status"
* `sys_tm_priority` - "Priority"
* `sys_tm_last_updated` - "Last updated"
**Process States (Status Values)**
* `sys_tm_created` - "Created"
* `sys_tm_started` - "Started"
* `sys_tm_finished` - "Finished"
* `sys_tm_finished_with_error` - "Finished with error"
* `sys_tm_failed` - "Failed"
* `sys_tm_expired` - "Expired"
* `sys_tm_aborted` - "Aborted"
* `sys_tm_terminated` - "Terminated"
* `sys_tm_dismissed` - "Dismissed"
* `sys_tm_on_hold` - "On hold"
**Bulk Actions**
* `sys_tm_assign_to` - "Assign to…"
* `sys_tm_unassign_all` - "Unassign All"
* `sys_tm_assign_all_to_me` - "Assign All to me"
* `sys_tm_hold_all` - "Hold All"
* `sys_tm_unhold_all` - "Unhold All"
**Task Actions**
* `sys_tm_view_application` - "View Application"
* `sys_tm_unassign` - "Unassign"
* `sys_tm_assign_to_myself` - "Assign to myself"
* `sys_tm_unhold` - "Unhold"
* `sys_tm_hold` - "Hold"
* `sys_tm_assign` - "Assign"
* `sys_tm_execute` - "Execute"
* `sys_tm_start` - "Start"
**Task Details Sections**
* `sys_tm_assignee_deactivated` - "(Deactivated)"
* `sys_tm_comments` - "Comments"
* `sys_tm_write_a_comment` - "Write a comment…"
* `sys_tm_history` - "History"
**History Events**
* `sys_tm_task_created` - "Task created"
* `sys_tm_user_created_this_task` - "`${user}` created this task"
* `sys_tm_started_process_instance_with_id` - "Started Process Instance with ID"
* `sys_tm_started_process_instance_on_build` - "Started Process Instance on build"
* `sys_tm_task_ownership_changed_to` - "Task ownership changed to"
* `sys_tm_task_moved_to` - "Task moved to"
* `sys_tm_task_status_changed_to` - "Task status changed to"
* `sys_tm_task_assigned_to` - "Task assigned to"
* `sys_tm_task_owner_removed` - "Task owner removed"
**User Selection & Search**
* `sys_tm_select_person` - "Select person..."
* `sys_tm_search_person` - "Search users"
* `sys_tm_search_term_validation` - "Type at least 4 characters..."
**UI States**
* `sys_tm_loading` - "Loading..."
* `sys_tm_nothing_found` - "Nothing Found"
**Data Display**
* `sys_tm_in` - "In" (custom filter operator)
* `sys_tm_yes` - "Yes" (boolean value)
* `sys_tm_no` - "No" (boolean value)
**\*\*Manual Configuration Required**: These 51 FlowX substitution tags must be configured manually in CMS for each language. They control custom Task Management UI elements outside of the data table.
Configure your container application language - FlowX.AI automatically handles table grid localization (300+ keys for filters, menus, pagination, data types) based on this setting
Add translations for all 51 FlowX substitution tags (sys\_tm\_\*) in CMS for each supported language. These control custom Task Management UI elements (task actions, bulk operations, history events, comments)
If you need custom columns beyond the defaults, use substitution tags for column display names in your Task Management configuration
Verify complete localization:
* **Table grid elements** (automatic): filters, sorting, pagination, menus should display in container app language
* **FlowX custom elements** (CMS): task actions, bulk operations, history events, comments should use your CMS translations
**Simple Setup**: Configure only the 51 FlowX substitution tags in CMS. Table grid localization (300+ keys) is handled automatically by the platform.
Deploy Task Management to users worldwide with native language support
Provide a fully localized experience across all Task Management components
Manage translations centrally through CMS substitution tags
Leverage professional translations for data grid components with automatic localization
Localization
Complete implementation guide with all 51 substitution tags, supported languages, and troubleshooting
Configure substitution tags in CMS for multi-language support
Learn about Task Management features and configuration
Configure Task Management integration in process settings
***
### **Platform enhancements**
FlowX.AI 5.2.0 includes platform improvements focused on security, stability, and infrastructure.
## Security & Infrastructure Updates
Update Java libraries and base images to address security vulnerabilities
Upgrade SpiceDB with new operator version
Update platform dependencies to latest secure versions
## Additional improvements
Add permission-based UI functionality in Reusable UI Templates
Improve FlowX Database query handling and error messages
Use system substitution tags in task management texts in CMS
Handle Server-Sent Events disconnections better to reduce log noise
Update environment variables for improved advancing controller with separate picking and processing operations, see details [here](./update-environment-variables-5.2)
Platform Updates
***
### **Bug fixes**
FlowX.AI 5.2.0 includes bug fixes and stability improvements to improve the overall user experience.
## Notable fixes
* **Process Instances Page**: Fix error when opening Runtime process instances page
* **Resource Import**: Fix import requests that use incorrect content type
* **Elasticsearch Updates**: Fix engine errors when updating documents in older indexes
* **Navigation Tree**: Fix navigation tree response for overridden processes
* **Dependency Management**: Fix errors when updating library dependency versions
* **Accessibility**: Fix missing accessibility sections on various components
* **Theme Configuration**: Fix element selection issues in segmented button panel
* **Modal Behavior**: Improve modal focus management and keyboard navigation
* **Select Components**: Fix highlighting and navigation issues in select/multiselect
* **Task Manager**: Fix browser freeze when opening table configuration
* **Angular SDK**: Fix keyboard navigation issues with select components and shift+tab behavior
* **React SDK**: Fix option highlighting and keyboard navigation in various components
* **Workflow Display**: Fix rendering issues in Integration Designer workflows
* **Collection Components**: Fix card expansion issues with accordions in navigation areas
* **Events Gateway**: Improve SSE disconnect handling to reduce error log flooding
* **Database Operations**: Improve error handling and validation for FlowX Database queries
* **Process Navigation**: Fix back button redirects from process definitions
* **Warning Management**: Clean up warnings properly when deleting parent actions
## Additional information
### Deployment information
For detailed deployment guidelines, component versions, and upgrade instructions, see the [Deployment Guidelines v5.2.0](./deployment-guidelines-v5.2).
### Environment variables updates
For detailed information on environment variables, see the [Update environment variables](./update-environment-variables-5.2) section.
### Coming soon
Additional features currently in development for future releases:
* Extended accessibility support for iOS and Android platforms
* Additional Python IDE capabilities
* Enhanced FlowX Database query preview and optimization tools
# v3.4.7 January 2024
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.7-january-2024/v3.4.7-january-2024
Welcome to the FLOWX.AI v3.4.7 patch release! This update brings several enhancements and fixes to improve your FLOWX.AI experience. While it may not be a major version update, it's packed with valuable improvements.
## **What's new**
### Process Engine 🚂
#### 🆕 **Default Data Transmission to Frontend (Improvement)**
In version 3.4.7 of the FLOWX.AI Platform, we're introducing a practical improvement related to sending data to the frontend. This enhancement aims to simplify the process of displaying process data in the frontend UI, reducing the time and effort required for configuration.
###### Background
Previously, the Configurator required explicit mention of objects to be sent to the frontend for displaying data in User Task UI. This often included configuring keys for various UI elements. To make this process more straightforward, we've implemented a default mechanism that automatically sends all keys configured as sources for UI elements to the frontend.
###### Changes and Benefits
To streamline the configuration process, we've made the following updates in the UI Configuration:
* **Label Change**: We've updated the label in the configuration UI under "Message" to "Custom UI Payload" for clarity.
* **Runtime Behavior (Default Data Transmission)**: During runtime, the Backend (BE) will automatically send to the frontend all data available as process variables with matching keys. This includes default keys and objects specified in the "Message" option of the root element for User Tasks.
* **Default Keys Sent to Frontend**: For various UI elements, predefined keys will be sent to the frontend by default.
#### 🆕 **Managing Subprocesses Expiration**
We introduced a new mechanism for precise control over subprocesses expiration.
Additional Configuration needed! Check the [**deployment guidelines**](deployment-guidelines-v3.4.7#process-engine).
### Documents Plugin 📄
🆕 **PDF to JPEG Conversion Improvement**
We have enhanced the PDF to JPEG conversion functionality. This improvement allows users to configure the DPI (dots per inch) value for converting PDFs to JPEG files, resulting in higher resolution images.
Additional Configuration needed! Check the [**deployment guidelines**](deployment-guidelines-v3.4.7#additional-configuration).
### OCR Plugin 👁️
🆕 **Control Aspect Ratio**
Introduced a mechanism to fine-tune the OCR by defining a range of acceptable aspect ratios for particular documents. Adjusting these ratios of the documents can help tailor the OCR plugin to different types of documents.
Additional Configuration needed! Check the [**deployment guidelines**](deployment-guidelines-v3.4.7#ocr-plugin).
### License Core
* Improved licensing core for a refined experience, ensuring improved functionality and ease of use.
## **Bug Fixes** 🔧
### Process Engine 🚂
#### Bug Fix: Subprocess Party Time 🎉
So, to make sure the subprocesses don't miss the farewell fireworks when the parent process expires, we've equipped them with a "Subprocess Farewell Dance Routine"! Now, when the parent process decides it's time to go, the subprocesses won't be hanging around like party crashers - they'll join the exit dance and wrap things up properly.
#### Bug Fix: Subprocess Timeout Tango - Interrupted Edition 💃🕰️
In the grand dance of subprocesses, we stumbled upon a partner who wasn't quite following the choreography. The bug report stated that subprocesses were not gracefully bowing out after an interrupting timer event. Now, when the timer says it's time to leave, the subprocesses won't be sticking around for an encore!
### Advancing Controller
#### Bug Fix: Parallel Advancing Ballet - Failure Recovery 🩰🐞
To ensure our parallel advancing ballet doesn't lose its rhythm, we've introduced the "Failure Recovery Pirouette." Now, when an advancing event faces failure, the partitions won't be left wondering if the music stopped—they'll gracefully exit the stage, and inactive partitions will automatically join the backstage crew, making room for the next act.
Thank you for being part of the FLOWX.AI Platform community, where even bugs are fixed with a twirl and a leap! 😄🩰🎭
## **Gremlins to Watch Out For** 🙁
Keep an eye out for these quirks:
* **Document preview UI element**: Our document preview component has a unique sense of style. It prefers to take up only a portion of the screen, even when told to "fill" the entire width. It's a rebel with a cause.
* **Business rules**: Our business rule have a language barrier, but they're working on it. Changing the language of a business rule doesn't always lead to using the new language for execution. It's like they have a favorite phrase they won't let go of.
* **Process Designer**: Deleting a boundary node in the process designer and coming back from the UI Designer doesn't always clean up the associated sequence from the boundary event. It's like they left a party and forgot their hat.
* **Datepicker Date Transformation**: Our Datepicker seems to possess a hidden talent. It mysteriously transforms random text into the current date when used with validators in UI Designer.
## **Additional information**
For deployment guidelines, refer to:
# Deployment guidelines v3.4.8
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.8-june-2024/deployment-guidelines-v3.4.8
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FLOWX.AI Designer > Platform Status**.
After updgrading to **3.4.8** FlowX.AI release, it is not possible to import old process definitions into the new platform release (exported from releases **\< 3.4.8**).

## Component versions
| 🧩 | 3.4.8 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 |
| ------------------------------ | -------------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ | -------- | ------- | ------- | ------- | ------- |
| **process-engine** | **4.3.5-2v14** | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 |
| **admin** | **3.3.19-8** | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 |
| **designer** | **3.35.18-7** | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 |
| **@flowx/ui-sdk** | **3.35.18-7** | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.35.18-7** | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.35.18-7** | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | **3.35.18-7** | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 |
| **cms-core** | **2.0.3** | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 |
| **scheduler-core** | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 |
| **events-gateway** | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - | - | - | - | - | - |
| **notification-plugin** | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 |
| **document-plugin** | **2.0.10-4** | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 |
| **ocr-plugin** | 1.0.15 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 |
| **license-core** | **1.2.1** | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 |
| **customer-management-plugin** | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.4 | 0.2.3 | 0.2.3 | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 |
| **task-management-plugin** | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 |
| **data-search** | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a |
| **audit-core** | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a |
| **reporting-plugin** | **0.1.5** | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a |
| **advancing-controller** | 0.3.5-1 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a |
| **iOS renderer** | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a |
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FlowX v4.0**, the `paperflow-web-components` library will be deprecated. Instead, the new components can be found in `@flowx/ui-toolkit`.
### Third-party recommended component versions
| FLOWX.AI Platform Version | Component name | Recommended versions (tested versions) |
| ------------------------- | ----------------- | -------------------------------------- |
| 3.4.8 | Keycloak | 18.x |
| 3.4.8 | Kafka | 3.2.3 |
| 3.4.8 | PostgreSQL | 14.3.0 |
| 3.4.8 | MongoDB | 5.0.8 |
| 3.4.8 | Redis | 6.2.6 |
| 3.4.8 | Elasticsearch | 7.17 |
| 3.4.8 | OracleDB | 19.8.0.0.0 |
| 3.4.8 | Angular (Web SDK) | 15.0.0 |
FlowX.AI supports any listed version of the prerequisite third-party components in the table above.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
## Additional Configuration
Before upgrading to v3.4.8 version we recommend to execute the initial data partitioning setup manually. This is needed no matter if you enable partitioning or not.
Therefore, when starting the new version of the process-engine, we recommend manually executing the setup SQL commands from Liquibase, as they may take more time. After setup, all existing information will go into the initial partition.
If partitioning is enabled, the initial partition will continue to be used until a new `partition_id` is generated according to the partitioning interval (DAY, WEEK, MONTH). Future partitions will be created automatically.
If partitioning is not enabled, all data will continue to be stored in this initial partition.
### Process instance data archiving
#### FlowX.AI configuration
New settings (new environment variables) have been added for process instance data partitioning and archiving. Check the following documentation sections for more details:
# v3.4.8 June 2024
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.8-june-2024/v3.4.8-june-2024
Welcome to the FlowX.AI v3.4.8 patch release! This update brings several enhancements and fixes to improve your FlowX.AI experience. While it may not be a major version update, it's packed with valuable improvements.
## What's new? 🆕
### FlowX.AI Engine: Process Instance Data Archiving
Database compatibility: Oracle DBs.
We are introducing a new system for archiving data related to old process instances. This enables the implementation of data retention policies, with more predictable storage usage and costs.
Some operations involving process instance data can be snappier, given the lower amount of data in the system and new structure. Archiving relies on partitioning data based on the process instance start time. Each partition is associated with a time period (day, week, month), and retention is defined by the number of periods maintained in the system.
Archived data remains in new tables in the database, optionally compressed, and is no longer accessible in FlowX. These tables can be compressed, copied, moved, archived, or deleted without affecting other processes in FlowX.
For more details about process instance partitioning and archiving, including configuration of the feature, see:
### Documents Plugin
Introducing configurable temporary file deletion strategy. Explore configuration details in the section below:
## Bug Fixes 🛠️
We've also squashed pesky bugs to ensure a smoother and more reliable experience across the board:
### FlowX.AI Engine
* **Token stuck in END Parallel Gateway node 🚧**: We've cleared the traffic jam where tokens were stuck at the END parallel gateway node. Now, your processes will flow like a river, smooth and unstoppable!
* **Process Continuation Issue**: Fixed an issue where processes started in version 2.14 couldn't time travel to version 3.4.x. Trying to advance these processes caused errors or made them vanish into the void. We've patched the timeline by updating the start swimlane ID in the database, so your processes can now journey safely to the future!
### FlowX.AI Admin
* **Process Version Memory Loss**: Fixed a bug where some process version params (like application ID, reporting usage, task manager usage, indexing keys, and application URL) mysteriously disappeared from old process definitions when importing a new version. We've given these params a memory boost, so they stick around like they should!
### FlowX.AI CMS
* **Lost in Translation**: Fixed an issue where languages were feeling a bit `null` and `void` in newly created environments. Instead of partying with an empty list like they should, they were sitting around with null values, causing chaos when trying to add new languages. Now, languages get the memo right away and initialize themselves properly.
* **Chill Media Library Search**: Updated the Media Library search so it no longer cares about upper or lower case. Now, whether you type in CAPS or whisper softly in lowercase, it'll find what you're looking for. No more sensitive searches, just chill browsing in the library!
## Additional information
For deployment guidelines, refer to:
# Deployment guidelines v4.0
Source: https://docs.flowx.ai/release-notes/v4.x/v4.0.0-april-2024/deployment-guidelines-v4.0.0
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FLOWX.AI Designer > Platform Status**.
After upgrading to **4.0** FLOWX.AI release, it is not possible to import old process definitions into the new platform release (exported from releases **\< 4.0**).

## Component versions
As of **FlowX.AI** next release (v4.1.0), the `paperflow-web-components` library will be deprecated, removing the dependencies. Instead, the new components can be found in `@flowx/ui-toolkit`.
| Component | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 |
| ---------------------------- | ---------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ | -------- |
| **process-engine** | **5.10.3** | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | 0.4.104 |
| **admin** | **4.6.10** | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 | 0.3.119 |
| **designer** | **4.0.1** | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 |
| **@flowx/ui-sdk** | **4.0.1** | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a |
| **@flowx/ui-toolkit** | **4.0.1** | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a |
| **@flowx/ui-theme** | **4.0.1** | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a |
| **paperflow-web-components** | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | - | - | - | - | 2.78.4-1 |
| **cms-core** | **2.2.5** | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 | 0.2.38 |
| **scheduler-core** | **2.1.4** | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 |
| **events-gateway** | **2.0.4** | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - | - |
| **notification-plugin** | **3.0.6** | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 | 1.0.206 |
| **document-plugin** | **3.0.6** | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 |
| **ocr-plugin** | **1.0.17** | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 | 0.1.33 |
| **license-core** | **2.0.5** | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 |
| **task-management-plugin** | **4.0.5** | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 |
| **data-search** | **1.0.6** | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 |
| **audit-core** | **3.1.4** | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 | 0.0.8 |
| **reporting-plugin** | **0.1.5** | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 |
| **advancing-controller** | **1.1.4** | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 |
| **iOS renderer** | **3.0.0** | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 | n/a |
| **Android renderer** | **3.0.0** | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | n/a |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.0 | Keycloak | 22.x |
| 4.0 | Kafka | 3.2.x |
| 4.0 | PostgreSQL | 16.2.x |
| 4.0 | MongoDB | 7.0.x |
| 4.0 | Redis | 7.2.x |
| 4.0 | Elasticsearch | 7.17.x |
| 4.0 | Oracle Database | 19.8.0.0.0 |
| 4.0 | Angular (Web SDK) | 16.3.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company’s specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
# Deployment changes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.0.0-april-2024/migrating-from-v3.4.x/migrating-from-v3.4.x
This document outlines the additional configuration changes required for deployment in version 4.0
### Revised cache key organization
To ensure a smooth transition to the 4.0 release, it's crucial to clear the cache before upgrading to v4.0. Use the following endpoint and request body for cache clearing:
Ensure that this operation is carried out by a user with an admin role.
##### Endpoint:
`POST {{baseUrlAdmin}}/api/internal/cache/clear`
##### Body:
```json theme={"system"}
{
"cacheNames": [
"flowx:core:cache"
]
}
```
This endpoint is designed to purge Redis caches selectively. It will exclusively delete caches that are specified in the admin microservice properties under the property key: "application.redis.clearable-caches".
### Access rights for Theme Management
To utilize the new theme management feature, make sure the following access rights are configured for the CMS microservice:
| Module | Scope | Role default value | Microservice |
| ------------- | ------ | -------------------- | ------------------ |
| manage-themes | import | ROLE\_THEMES\_IMPORT | Content Management |
| | import | ROLE\_THEMES\_EDIT | Content Management |
| | import | ROLE\_THEMES\_ADMIN | Content Management |
| manage-themes | read | ROLE\_THEMES\_READ | Content Management |
| | read | ROLE\_THEMES\_EDIT | Content Management |
| | read | ROLE\_THEMES\_ADMIN | Content Management |
| | read | ROLE\_THEMES\_IMPORT | Content Management |
| manage-themes | edit | ROLE\_THEMES\_EDIT | Content Management |
| | edit | ROLE\_THEMES\_ADMIN | Content Management |
| manage-themes | admin | ROLE\_THEMES\_ADMIN | Content Management |
Learn more
### Logging
To streamline logging and enhance readability, you can now disable health endpoint calls cluttering the logs of various deployed FlowX microservices using the following environment variables:
* `LOGGING_LEVEL_WEB: INFO` (default)
* `LOGGING_LEVEL_ORG_SPRINGFRAMEWORK_WEB: INFO` (default)
If logs lack detail, consider setting the value to ‘DEBUG’.
# Process configuration
Source: https://docs.flowx.ai/release-notes/v4.x/v4.0.0-april-2024/migrating-from-v3.4.x/process-configuration
This guide outlines changes in process and UI configuration from v3.4.x to 4.0 version.
In the latest version, there have been updates and adjustments to process and UI configurations to improve performance and usability. Below are the key changes and steps to migrate your configurations:
## Business Rules
* `output.put` method is required to generate structured output data when using input to validate or filter incoming data based on certain conditions (commonly used to retrieve information needed for processing)
MVEL Syntax Change: In MVEL 2.5.2.Final, the direct property assignment syntax (input.property = value) is no longer supported. Instead, you must use the output.put method (output.put("property", value)) to generate structured output data.
* This represents a fundamental change in how MVEL scripts interact with data
* The input object should be treated as read-only for accessing incoming data\*
* The output object with its put method must be used for storing any results or modified values
* `processInstanceID` and `processInstanceUUID` - This release introduces enhancements aimed at isolating process instance related values from business/configured parameters. Key changes include the removal of `processInstanceId`, `parentProcessInstanceId`, and `parentProcessInstanceUuid` from paramValues zone on process instance, relocating them to a distinct location within process instance data - to a new object called “instanceMetadata”.
### Business rules - new object "instanceMetadata"
Introducing a new object named "instanceMetadata". This object will serve as a container for process instance related values, allowing you to access relevant attributes in your scripts more effectively. Key specifications include making certain variables/parameters read-only, controlled by FlowX, and facilitating attribute access through the `instanceMetadata` object rather than directly calling attributes.
Configurators will utilize `instanceMetadata` to access attributes instead of directly calling them as in version 3.4.x. For example, `input.processInstanceId` will be accessed through `instanceMetadata.processInstanceId`.
Review and update any affected business rules accordingly.
#### Example of business rule (with Python)
This example is made just to demonstrate the use of the new `instanceMetadata.get` object.
```python theme={"system"}
test_string = "There are 2 apples for 4 persons"
# using List comprehension + isdigit() +split()
# getting numbers from string
res = [int(i) for i in test_string.split() if i.isdigit()]
output.put("app", {"phyton": str(res), "key3": "Value updated"});
key = input.get("app").get("key1")
id3 = instanceMetadata.get("processInstanceId")
uuid3 = instanceMetadata.get("processInstanceUuid")
output.put("id3", id3);
output.put("uuid3", uuid3);
```
## UI configuration
There are some changes that were brought together with the Theme Management feature to the UI components in **4.0** release that might impact your previous UI configuration.
### Root components
* **Card Element**: Previously (in **v3.4.x**) could have set a **Card style** property: **border** or be **raised**.
| Card 4.0 | Card 3.0 |
| :------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------: |
|  |  |
| | |
Now, for processes migrated from **v3.4.x** to achieve the previous styling (with "raised prop" or "border") you can either set up from Themes or by using **Theme Overrides** for **Card** element in **UI Designer**:
Depending on the number of Card elements present in your migrated processes, it's essential to devise a strategic approach. If a significant portion of the cards feature "border" styling, you can configure this setting within Themes Management and will be cascading through all of them. For the remaining cards, manual intervention is required to apply the "raised" effect by **overriding** their styles using **Theme Overrides**.

Read more about **Theme management** feature:
### Buttons
All **primary** and **secondary** buttons, in 4.x they transformed to **fill** buttons. If there were secondary buttons, once moved to "fill", they will appear similar to primary ones. You should perform an override in the UI Designer to make them look like secondary buttons as they did initially.

| Version | Primary | Secondary | Ghost | Text | Fill | New States: Pressed, Hover, Disabled |
| ------- | :-----: | :-------: | :---: | :--: | :--: | :----------------------------------: |
| 3.4.x | ✓ | ✓ | ✓ | ✓ | | |
| 4.0.x | | | ✓ | ✓ | ✓ | ✓ |
By following this migration guide, you can seamlessly transition to the Theming 4.0 feature, enhancing your project's design process and ensuring consistency across platforms and branches.
### Icons - no color property
Now, all icon color settings have a "No Color" option, which allows the icon (SVG) to be rendered with its original color settings.
If you are utilizing SVG icons for UI components (such as a left icon on an input element) and you desire to ensure that the color remains consistent regardless of the theme settings, it is imperative to override all states associated with the "Left icon," as demonstrated in the example below:

## Layout
In the context of the Theme Management feature, you can now apply the previously configured paddings directly from the previosuly used theme JSONs within the theme settings. Review the paddings you had set up previously and apply them in the Themes section.
**Themes → Global Settings → Styles**
### Components spacing
If you set it in **Theme → Global Settings**, it will cascade to all the following components:
* Input/ Selection
* Buttons
* Radio/Checkbox
* Message
* Segmentted Button
* Stepper
* Tabs

If you want to override the padding set in **Global Settings** for the above components, navigate to **Components → Your Component** and set your desired padding.
After editing the padding for a component, you can also reset the values and they will be set back to the values you added in **Global settings**.
### Layout elements
To set the padding for layout elements( **Cards** and **Forms**), access:
**Themes → Components → Layout Elements**
# Renderer SDKs
Source: https://docs.flowx.ai/release-notes/v4.x/v4.0.0-april-2024/migrating-from-v3.4.x/renderers
This guide assists in migrating from FlowX v3.4.x to v4.0.
## Web SDK migration guide
### Theming changes
All old configurations linked with the previous theming setup (versions prior to 4.0) must be removed from your SDK deployment:
1. Review Usage: Identify where you have applied theming v1 configurations in your project.
#### 3.4.x example:
```yaml theme={"system"}
...
themePaths: {
components: 'assets/theme/theme_components.json',
tokens: 'assets/theme/theme_tokens.json',
...
},
```
2. Update to Theming 4.0: Revise your theming configurations to use the latest theming v2 approach. Refer to our documentation or migration resources for guidance on transitioning to the new theming.
Learn more
### Authorization token
* **AuthToken Management**: The ui-sdk no longer relies on the authToken being stored in LOCAL\_STORAGE. Instead, the 'access\_token' is now passed as an input to the `` component through a private variable.
**Breaking change**: This update is mandatory for proper functionality of SSE (Server-Sent Events).
By adopting this approach, clients gain the flexibility to implement the most secure token management strategy tailored to their specific security needs. Moreover, shifting the responsibility to the container application for updating the 'access\_token' input ensures that any changes or refreshes to the authToken are securely managed within the application's domain. This proactive approach effectively mitigates potential security vulnerabilities associated with token management, offering a robust and adaptable solution.
Learn more
***
## iOS SDK migration guide
### Integration changes
The module name has changed from `FlowX` to `FlowXRenderer`.
Any files importing the SDK should be updated with the new module name.
```
//replace this
import FlowX
//with this
import FlowXRenderer
```
### Initialization config changes
A new configuration parameter, named `enginePath` was added to `FXConfig`. It represents the URL path component to the process engine.
```swift theme={"system"}
FXConfig.sharedInstance.configure { (config) in
config.baseURL = myBaseURL
config.enginePath = "engine"
config.imageBaseURL = myImageBaseURL
config.language = "en"
config.logLevel = .verbose
}
```
### Theming changes
The theming setup mechanism was updated.
Learn more
### Custom components
* The type of `data` property of custom components has changed from `[String: Any]` to `Any`.
* As a consequence, type checking, casting and extracting the needed data must be part of the implementation details of the custom component.
Learn more
### Start process updates
* The API for starting a process has changed.
* There are now 3 methods available.
Learn more
### Continue process updates
* The API for resuming an existing process has changed.
* There are now 3 methods available.
Learn more
***
## Android SDK migration guide
### Initialization config changes
A new configuration parameter, named `enginePath` was added for identifying the FlowX Process Engine microservice.
When the SDK initialization happens through the `FlowxSdkApi.getInstance().init(...)` method, the argument has to be set inside the `config: SdkConfig` parameter value:
```kotlin theme={"system"}
FlowxSdkApi.getInstance().init(
...
config = SdkConfig(
baseUrl = "URL to FlowX backend",
imageBaseUrl = "URL to FlowX CMS Media Library",
enginePath = "some_path",
language = "en",
validators = mapOf("exact_25_in_length" to { it.length == 25 }),
),
...
)
```
### Authentication changes
The authentication mechanism has changed, so instead of passing the `String` value for the access token, a `FlowxSdkApi.Companion.AccessTokenProvider` must be used instead.
This provider is defined as a functional interface returning the actual value of the access token:
```kotlin theme={"system"}
fun interface AccessTokenProvider {
fun get(): String
}
```
Related changes:
1. The provider can be passed if the business logic allows it when calling the `FlowxSdkApi.getInstance().init(...)`.
As a consequence, the new signature for the `FlowxSdkApi.getInstance().init(...)` is:
```kotlin theme={"system"}
fun init(
context: Context,
config: SdkConfig,
accessTokenProvider: AccessTokenProvider? = null,
customComponentsProvider: CustomComponentsProvider? = null,
)
```
2. The `FlowxSdkApi.getInstance().startProcess(...)` `accessToken` parameter was dropped. It is not needed anymore, as the authentication will rely solely on the `AccessTokenProvider`.
The new signature of this method is:
```kotlin theme={"system"}
fun startProcess(
processName: String,
params: JSONObject = JSONObject(),
isModal: Boolean = false,
closeModalFunc: ((processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
3. The `FlowxSdkApi.getInstance().continueProcess(...)` `accessToken` parameter was dropped. It is not needed anymore, as the authentication will rely solely on the `AccessTokenProvider`.
The new signature of this method is:
```kotlin theme={"system"}
fun continueProcess(
processUuid: String,
isModal: Boolean = false,
closeModalFunc: ((processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
4. The calls of the `FlowxSdkApi.getInstance().updateAccessToken("some_access_token")` method must be replaced by calls of the `FlowxSdkApi.getInstance().setAccessTokenProvider(accessTokenProvider = { "some_access_token" })`.
Whenever the access token changes based on your own authentication logic, it must be updated in the renderer by calling the `setAccessTokenProvider` method again.
Learn more
### Theming changes
The theming mechanism was replaced by a new approach, which enforces loading a theme before starting or resuming a process.
Related changes:
1. The `ai.flowx.android.sdk.process.model.SdkConfig` theming related parameters (i.e. `themeTokensJsonFileAssetsPath` and `themeComponentsJsonFileAssetsPath`) were dropped.
Because of that, when configuring the library through the `FlowxSdkApi.getInstance().init(...)` method, the `config` parameter will look like this:
```kotlin theme={"system"}
FlowxSdkApi.getInstance().init(
...
config = SdkConfig(
baseUrl = "URL to FlowX backend",
imageBaseUrl = "URL to FlowX CMS Media Library",
enginePath = "some_path",
language = "en",
validators = mapOf("exact_25_in_length" to { it.length == 25 }),
),
...
)
```
2. For styling the UI components displayed when rendering a process while authenticated, the `FlowxSdkApi.getInstance().setupTheme(...)` method must be called before starting or resuming any process:
```kotlin theme={"system"}
suspend fun setupTheme(
themeUuid: String,
fallbackThemeJsonFileAssetsPath: String? = null,
@MainThread onCompletion: () -> Unit
)
```
This will fetch a priorly defined theme in the FlowX Designer, cache it and then load its properties.
A process should be started or resumed only after the `onCompletion` closure is called, signaling the completion of setting up the theme.
Learn more
### Custom components changes
1. All `import ai.flowx.android.sdk.component.*` directives must be changed to `import ai.flowx.android.sdk.ui.components.*`
2. The type of the `data` parameter passed to a custom component through the `populateUi(data: JSONObject)` method, both for `@Composable` and for classical `View` system approaches, changed to `Any?`.
Therefore, the new signature of the method is `populateUi(data: Any?)`.
As a consequence, type checking, casting and extracting the needed data must be part of the implementation details of the custom component.
The value for the `data` parameter received in the `populateUi(data: Any?)` could be:
* `Boolean`
* `String`
* `java.lang.Number`
* `org.json.JSONObject`
* `org.json.JSONArray`
Learn more
# UI components - change log
Source: https://docs.flowx.ai/release-notes/v4.x/v4.0.0-april-2024/ui-components-changelog
This log outlines the changes in component styles and props from version 3.4.x to version 4.0.
## **General - for all components**
* All components now support token overrides for color, typography, and shadow settings defined in the theme.
* Styling options are now available for different platforms: web, iOS, and Android.

* Hide expressions can be set platform-specific.
* All icon color settings offer a 'No Color' option to retain the original SVG colors.

### **TAB BAR**
* New navigation area component. The Tab Bar is a component in user interfaces, facilitating navigation and content organization allowing configuration for parallel zones (using multiple user tasks within the same tab) and for multiple tabs (users can access multiple tabs within the tab bar)

Learn more
### **TAB**
* New navigation area component. Tabs are clickable navigation elements within the Tab Bar that allow users to switch between different sections or functionalities within an application.

Learn more
### **ZONE**
* New navigation area component for web. A container-like element grouping specific navigation areas or user tasks, used for oganizing content (ideally used for processes with headers and footers).
Learn more
### **CONTAINER**
* Introduced `position` property for setting sticky containers:

* Position ***Static***: The container remains fixed and does not scroll along with the page content.
* Position ***Sticky***: When the sticky property is enabled, the container maintains its position even during scrolling.
Learn more
* Web supports top, left, bottom, and right sticky positioning.
* iOS and Android support top and bottom sticky positioning within user tasks.
* Added `scrollable` property for iOS and Android root containers, allowing control over scroll behavior (defaults to true).
* Added `screen title` property for iOS and Android root containers, defining the navigation bar title.
### **CARD**
* Removed `card type` (raised or bordered) property. See more, [**here**](./migrating-from-v3.4.x/process-configuration#root-components).
* Added `scrollable` property for iOS and Android root containers, controlling scroll behavior (defaults to true).
* Added `screen title` property for iOS and Android root containers.

### **BUTTON**
* Replaced `primary` and `secondary` types with `fill`. See more, [**here**](./migrating-from-v3.4.x/process-configuration#buttons).
* State-specific properties can now be set for **label**, **icon**, **background** and **border** colors:
* **Web**: Default, hover, pressed and disabled states.
* **Android**: Default and disabled states.
* **iOS**: Default state.
### **TEXT**
* Added `link color` property for markdown link color.
### **FILE UPLOAD**
* State-specific properties can now be set for **label**, **icon**, **background** and **border** colors:
* **web**: Default, hover, pressed and disabled states.
* **Android**: Default and disabled states.
* **iOS**: Default state.
### **MESSAGE**
* New `link color` property for markdown link color.
### **FILE PREVIEW**
* New style properties for document icon and action icon colors.
* Introduced `auto` height type on iOS and Android when scrollable is set to false on the root container/card (when you want the file preview to fill the entire available space vertically).
* New source type: Media Library.
### **ALL FORM ELEMENTS**
* Added style properties for info label, error label, helper label and helper tooltip.
### **INPUT**
* State-specific properties can now be set for **border**, **background**, **text**, **right icon**, **left icon**, **prefix/suffix** and **placeholder** colors:
* **web**: Empty, active, filled, disabled, error and hover states.
* **Android**: Empty, active, filled, disabled and error states.
* **iOS**: Empty, active, filled, disabled and error states.

### **TEXTAREA**
* State-specific properties can now be set for **border**, **background**, **text** and **placeholder** colors:
* **web**: Empty, active, filled, disabled, error and hover states.
* **Android**: Empty, active, filled, disabled and error states.
* **iOS**: Empty, active, filled, disabled and error states.
### **SELECT**
* State-specific properties can now be set for **border**, **background**, **text**, **right icon**, **left icon** and **placeholder** colors:
* **web**: Empty, active, filled, disabled, error and hover states.
* **Android**: Empty, active, filled, disabled and error states.
* **iOS**: Empty, active, filled, disabled and error states.
### **DATEPICKER**
* State-specific properties can now be set for **border**, **background**, **text**, **right icon**, **left icon** and **placeholder** colors:
* **web**: Empty, active, filled, disabled, error and hover states.
* **Android**: Empty, active, filled, disabled and error states.
* **iOS**: Empty, active, filled, disabled and error states.
### **RADIO, CHECKBOX**
* State-specific properties can now be set for **border**, **background**, **text** and **icon** colors:
* **web**: Unselected, selected, disabled unselected, disabled selected, hover unselected and hover selected states
* **Android**: Unselected, selected, disabled unselected and disabled selected states
* **iOS**: Unselected, selected, disabled unselected and disabled selected states
### **SWITCH**
* State-specific properties can now be set for **border**, **background** and **knob** colors:
* **web**: Unselected, selected, disabled unselected and disabled selected states.
* **Android**: Unselected, selected, disabled unselected and disabled selected states.
* **iOS**: Only **background** color on selected state.
### **SEGMENTED BUTTON**
* State-specific properties can now be set for **border**, **background** and **text** colors:
* **web**: Unselected, selected, disabled unselected, disabled selected, hover unselected and hover selected states.
* **Android**: Unselected, selected, disabled unselected and disabled selected states.
* **iOS**: Only **background** and **text** color on unselected and selected states.
### **SLIDER**
* State-specific properties can now be set for **limits**, **value**, **filled**, **empty** and **knob** colors:
* **web**: Default and disabled states.
* **Android**: Default and disabled states.
* **iOS**: Default and disabled states. Disabled only with **limits** and **value**.
# FlowX.AI 4.0.0 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.0.0-april-2024/v4.0.0-april-2024
🎉 Welcome to the much-anticipated FlowX.AI 4.0 release! 🚀 Get ready to experience a whole new level of innovation and efficiency with FlowX.AI 4.0.
**Release Date:** 18th April 2024
In this exhilarating update, we've added a bunch of cool stuff. From a **new theming feature** to a complete overhaul of **navigation**, killing the **milestones nodes** (we know you hated them), brace yourself for a transformative journey through the latest features and enhancements...and also a surprise for you, awaiting at the [**bottom of the page**](#coming-soon)!
## Bonus: meme of the day
Start with a laugh, because it will be a lot to read!
Let's dive in and explore the exhilarating additions:
## **What's New?** 🆕
### Theme Management
The new **Theme Management** feature enhances our design process by establishing a unified visual language across various platforms.

This approach simplifies development by enabling the establishment of a foundational **theme**, which can then be customized to accommodate specific platform requirements.

Ultimately, this streamlines the development process, saving significant time and effort.
* **Design Tokens**: Represent the single source of truth for the theme, storing visual elements of the design system.
* **Color Palette, Shadows, Typography Tokens**: Configure these tokens based on your company's brand guidelines. They ensure reusability and consistency.

* **Platform-specific Settings**: Configure settings for each platform (web, iOS, Android) based on the global settings you've defined.
* **Styles and Utilities**: General settings applying to all components (styles) and labels, errors, and helper text settings (utilities).

**Component-level Configuration**: Customize the style of each component type.

#### Universal Styling
Introduced the option for platform-specific theming customization for components across Web, iOS, and Android.

More information about Theming:
### Navigation areas (removed Milestones nodes)


In this release, we've bid farewell to **Milestone Nodes**, ushering in a fresh and improved approach to organizing the user interface. Say hello to a sleeker and more efficient system with the introduction of [**Navigation areas**](../../4.0/docs/building-blocks/process/navigation-areas).
For process definitions originating from releases earlier than **4.0**, Milestone nodes will evolve into [**Zones**](../../4.0/docs/building-blocks/process/navigation-areas#zone) during migration, offering enhanced navigation capabilities.

### New navigation UI elements
* Tab Bar & Tabs
* Zones
* Parent Process Area

#### Navigation areas per platform
### UI Designer (enhancements)
* New enhanced UI designer, offering flexibility and control over your application's look and feel across all platforms.
* Added the possibility to customize the **navigation areas** through the **UI Designer**
#### UI Designer - universal configuration and styling
Introduced the option for platform-specific configuration and styling for components across Web, iOS, and Android.


The new navigation panel in the UI Designer allows you to manage navigation configurations efficiently across different platforms, ensuring consistency and clarity in your interface design.

### New node - Embedded subprocess
Introducing Embedded Subprocesses! Enhance your process management with the new embedd subprocess functionality and the new **Start Embedded Subprocess** node.
Seamlessly integrate self-contained subprocesses within parent processes for enhanced functionality and encapsulated operations. The Start Embedded Subprocess node enables the initiation of subprocesses within a parent process, offering a range of features and options for enhanced functionality.

### New nodes - Error Events
We are excited to introduce support for a new type of node in BPMN 2.0, specifically Error Events: Error Intermediate boundary event, which expand the capabilities of process modeling and error handling within your BPMN diagrams.

These Error Event nodes enhance the BPMN standard and offer improved control over error management.
### Nodes Redesign: Redefining Connectivity
Experience a redesigned interface for smoother interaction with **nodes** and **Process Designer**.

### Favorites Tab
Keep track of your favorite process definitions and streamline process development with the all-new **Favorites tab**, ensuring effortless collaboration among teams.
## **Changes** 🔧
For clients upgrading from an older release (v3.x), we recommend consulting our [**Migrating from v3.x**](./migrating-from-v3.4.x/) guide for comprehensive migration instructions.
Here's a summary of the changes introduced in version 4.0 after upgrading from v3.4.x for all microservices:
* **AuthToken Management**: The ui-sdk no longer relies on the authToken being stored in LOCAL\_STORAGE. Read more, [**here**](/4.0/sdks/angular-renderer#authorization).
* The **Subprocess Run** node is now called **Call activity** node.
* The **Start subprocess** action is now available only on [User Task](../building-blocks/node/user-task-node) nodes. For any other node types, you should use the [Call Activity node](../building-blocks/node/call-subprocess-tasks/call-activity-node) instead.
* Business Rules: Enhancements for structured data management and improved attribute access via `instanceMetadata` new object. Read more, [**here**](./migrating-from-v3.4.x/process-configuration#business-rules).
* **Timer event scheduler**: Significant optimizations have been implemented in the timer event scheduler, resulting in improved efficiency and responsiveness.
* **UI Designer** updates and improvements.
* UI components style and props changes - consult the [**UI components change log**](./ui-components-changelog) for more information.
* Revised cache key organization. Read more [**here**](./migrating-from-v3.4.x/migrating-from-v3.4.x#revised-cache-key-organization).
* New environment variables to prevent log flooding. Read more, [**here**](./migrating-from-v3.4.x/migrating-from-v3.4.x#logging).
* Java 17 integration: Integrated Java 17 (all backend services - base image: `eclipse-temurin - 17.0.10_7-jre-jammy`) as default buildpack.
Do not to forget to consult the [**migration guide**](./migrating-from-v3.4.x/) for more information.
### Admin - health monitoring
Improved health monitoring:
* Enabled role-based acccess control and added annotations to enable platform health by default.
* Established default annotations for platform health status.
* Adjusted liveness and readiness probes for improved reliability and responsiveness.
* Updated Prometheus scraping configuration for metric collection.
## **Bug Fixes** 🛠️
We've also squashed pesky bugs to ensure a smoother and more reliable experience across the board.
### Scheduler
* Tokens now leave the timer node promptly, no longer lingering like last-minute shoppers before closing time!
* Subprocesses can now rest easy knowing they won't trigger "Timer expression is not valid" errors when setting process expiry time in months—our code's time management just got a promotion!
### UI Designer
* Switch element label now obeys orders to move to the end—no more rebellious labels sticking to the start!
### Process Designer
* Small laptops users rejoice! Now you can scroll to see all subprocesses and audit logs without losing the last line—no more screen envy for external monitors!
* Start Subprocess Action now consistently saves selected version inputs and allows for multiple edits without page refreshes—no more need for extra clicks or browser gymnastics!
* Nodes now stay within swimlane borders when moved, preventing them from wandering off like lost sheep—no more unexpected node relocations disrupting your process layouts!
### FlowX Engine
* MVEL parser now (with the latest MVEL version update: 2.5.2) happily accepts arrays/lists after objects, eliminating JSON file frustrations and improving developer workflow—no more cryptic error messages ruining your day!
* `output.put` method is required to generate structured output data when using input to validate or filter incoming data based on certain conditions (commonly used to retrieve information needed for processing)
The direct property assignment syntax (input.property = value) is no longer supported. Instead, you must use the output.put method (output.put("property", value)) to generate structured output data.
* This represents a fundamental change in how MVEL scripts interact with data
* The input object should be treated as read-only for accessing incoming data
* The output object with its put method must be used for storing any results or modified values
* Python Business Rules now reliably execute during runtime, ensuring consistent behavior between test and live modes—no more mysterious token standstills!
### Web SDK
* You can now seamlessly execute actions in processes with radio buttons and validators, even after page reloads—eliminating the frustration of encountering unresponsive buttons.
* Also you can now successfully execute UI Actions on image components without encountering "undefined token uuid" errors—no more frustrations with unresponsive image interactions!
* Custom validators now retain their specified async execution type upon saving, ensuring consistency and reliability in process validation—no more frustrating switches back to sync execution!
* Forget playing favorites in the WEB\_SDK! Now you can save data from both form elements and UI action custom body simultaneously. Say goodbye to tough decisions—saving data just got a whole lot easier and funnier!
### FlowX Admin
* Fixed issues with Persistent Database (PDB) API and service account auto-mount.
* Disabled auto service links in containers (all SVC/PORT variables).
## Other
Our docs also received an upgrade...a new home...and a new AI search function! But we know that you like to read so do not be that lazy! 🔥
## Coming soon
Hey there, tired of drowning in "virtual paperwork"? Fear not! We've got you covered. Who said machines can't handle finances? 🤖💰
Coming soon: **FlowX AI Agents**. Want to find out more? Contact us about how we can make your journey smoother than ever before! 🚀
Get in contact
## Gremlins to Watch Out For
Keep an eye out for these quirks:
* Versioning: Merging branches without importing the latest committed version may result in a surprise merge conflict party. We're on it!
* UI Designer: When relocating UI elements between parents, the elements' order doesn't always get the memo, causing a mix-up in the family tree. We're untangling this knot!
## Resources
For deployment guidelines and a seamless transition to version 4.0:
# Deployment guidelines v4.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.0-may-2024/deployment-guidelines-v4.1.0
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
After upgrading to the 4.1 FlowX.AI release, you can import old process definitions into the new platform only if they are from version 4.0.
It is not possible to import old process definitions from versions earlier than v4.0.

As of **FlowX.AI** release v4.1.0, the `paperflow-web-components` is deprecated, removing the dependencies. Instead, the new components can be found in `@flowx/ui-toolkit`.
## Component versions
| Component | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------------------- | ---------- | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **6.0.3** | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **5.0.9** | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **4.17.1** | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | **4.17.1** | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | **4.17.1** | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | **4.17.1** | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **paperflow-web-components** | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **cms-core** | **3.0.1** | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **3.0.0** | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **3.0.0** | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **4.0.1** | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **4.0.0** | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | **3.0.0** | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | **5.0.2** | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **2.0.3** | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **4.0.3** | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | **0.1.6** | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | **2.0.0** | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **iOS renderer** | **3.0.7** | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **3.0.4** | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.1 | Keycloak | 22.x |
| 4.1 | Kafka | 3.2.x |
| 4.1 | PostgreSQL | 16.2.x |
| 4.1 | MongoDB | 7.0.x |
| 4.1 | Redis | 7.2.x |
| 4.1 | Elasticsearch | 7.17.x |
| 4.1 | Oracle Database | 19.8.0.0.0 |
| 4.1 | Angular (Web SDK) | 16.3.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
A FlowX release and its patch versions (such as 4.1.x) will *all* have the same the *Recommended Versions* for the third-party components.
# Migrating from previous versions to v4.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.0-may-2024/migrating-from-v3.4.x-to-v4.1
If you are upgrading from a v3.4.x version, first check the following **migration guide** (to capture all the changes introduced in v4.0):
If you are upgrading from v4.0 version, check the following migration guide:
## Migrating from v4.0 to v4.1
### Revised cache key organization
To ensure a smooth transition to the 4.1 release, it's essential to utilize the following clear cache endpoint and body:
##### Endpoint
`POST {{baseUrlAdmin}}/api/internal/cache/clear`
##### Body:
```json theme={"system"}
{
"cacheNames": [
"flowx:core:cache"
]
}
```
### Misconfigurations
To enable and to compute warnings for already existing processes from previous versions, use the following endpoint to retrieve and compute all warnings:
Please note that it may take some time for all misconfigurations in older processes to become available on the platform after calling this endpoint.
#### FlowX.AI Admin
```json theme={"system"}
{{baseUrlAdmin}}/api/process-versions/compute
```
For more details:
### Spring Boot upgrade
The following configuration changes are required after upgrading your Spring Boot application to version 3.2.x. Below is a detailed explanation of each section in the context of this upgrade:
Note that this setup is backwards compatible, it does not affect the configuration from v3.4.x. The configuration files will still work until v4.5 release.
The old environment variables (v3.4.x) will be removed in the v.4.5 FlowX.AI release.
Configuration properties updates:
#### Redis configuration
Where Redis is used (FlowX CMS, FlowX Admin, Documents plugin, events, Notifications plugin, FlowX Engine, Task Management plugin):
##### Old configuration
* `SPRING_DATA_HOST`
* `SPRING_DATA_PORT`
* `SPRING_DATA_PASSWORD`
##### New configuration
* `SPRING_DATA_REDIS_HOST`
* `SPRING_DATA_REDIS_PORT`
* `SPRING_DATA_REDIS_PASSWORD`
#### Management configuration
For all services managing metrics, especially exporting metrics to Prometheus:
##### Old configuration
* `MANAGEMENT_METRICS_EXPORT_PROMETHEUS_ENABLED`
##### New configuration
* `MANAGEMENT_PROMETHEUS_METRICS_EXPORT_ENABLED`: This variable enables or disables Prometheus metrics export dynamically based on the environment.
More details, [here](../../4.0/setup-guides/flowx-engine-setup-guide/engine-setup#configuring-application-management)
#### Authentication
For all services except the advancing-controller.
##### New configuration
Currently not required to be set as they take values from old configs.
* `SPRING_SECURITY_OAUTH2_RESOURCE_SERVER_OPAQUE_TOKEN_INTROSPECTION_URI`
* `SPRING_SECURITY_OAUTH2_RESOURCE_SERVER_OPAQUE_TOKEN_CLIENT_ID`
* `SPRING_SECURITY_OAUTH2_RESOURCE_SERVER_OPAQUE_TOKEN_CLIENT_SECRET`
##### Existing configuration
* `SECURITY_OAUTH2_BASE_SERVER_URL`
* `SECURITY_OAUTH2_REALM`
* `SECURITY_OAUTH2_CLIENT_CLIENT_ID`
* `SECURITY_OUATH2_CLIENT_CLIENT_SECRET`
#### Elasticsearch configuration
This outlines the Elasticsearch configuration for the following microservices: FlowX Admin, FlowX Engine, Data Search, and Audit Core.
##### Existing configuration
* `SPRING_ELASTICSEARCH_REST_URIS`: This environment variable is used by the microservices listed above. This variable needs to be set to the appropriate value for each environment.
Example:
```yaml theme={"system"}
# only the value changes for the next config:
spring:
elasticsearch:
rest:
uris: localhost:9200 #no more protocol/schema anymore
```
If you do not upgrade to the new configuration, make sure that in the actual configuration you will remove the protocol/schema, it is no longer needed: for example, instead of `http://localhost:9200` you will have `localhost:9200` as value.
##### New configuration
* `SPRING_ELASTICSEARCH_REST_PROTOCOL`: Default value is `https`; should be overridden if connection to Elasticsearch needs to be done over `http`.
Example:
```yaml theme={"system"}
# New configuration with default value:
spring:
elasticsearch:
rest:
protocol: https / http # default value is https - should be overriden if connection to elastic needs to be done on http.
```
#### License core configuration
For the License core microservice you need to configure two different data sources: one for the engine database and one for the license database.
##### Old Engine database source
* `ENGINE_DATASOURCE_URL`
* `ENGINE_DATASOURCE_JDBC_URL`
* `ENGINE_DATASOURCE_USERNAME`
* `ENGINE_DATASOURCE_PASSWORD`
##### New Engine database source
* `SPRING_DATASOURCE_ENGINE_URL: ${spring.datasource.jdbc-url}`: Pointing to old config for backwards compatibility.
* `SPRING_DATASOURCE_ENGINE_JDBC_URL: ${spring.datasource.jdbc-url}`: Pointing to old config for backwards compatibility
* `SPRING_DATASOURCE_ENGINE_USERNAME: ${spring.datasource.username}`: Pointing to old config for backwards compatibility
* `SPRING_DATASOURCE_ENGINE_PASSWORD: ${spring.datasource.password}`: Pointing to old config for backwards compatibility
##### Old License database source
* `SPRING_DATASOURCE_URL`
* `SPRING_DATASOURCE_JDBC_URL`
* `SPRING_DATASOURCE_USERNAME`
* `SPRING_DATASOURCE_PASSWORD`
##### New License database source
* `SPRING_DATASOURCE_LICENSE_URL: ${spring.datasource.jdbc-url}`: Pointing to old config for backwards compatibility.
* `SPRING_DATASOURCE_LICENSE_JDBC_URL: ${spring.datasource.jdbc-url}`: Pointing to old config for backwards compatibility.
* `SPRING_DATASOURCE_LICENSE_USERNAME: ${engine.datasource.username:postgres}`: Pointing to old config for backwards compatibility.
* `SPRING_DATASOURCE_LICENSE_PASSWORD: ${engine.datasource.password:wrongpwd}`: Pointing to old config for backwards compatibility.
#### Customer management plugin
##### New configuration
* `ELASTICSEARCH_PROTOCOL`: Possible values are `https` / `http`; default value is `https` - should be overridden if connection to Elasticsearch needs to be done over `http`.
### Open Telemetry
The FlowX.AI platform uses a mix of both auto instrumentation with Java agent and manual instrumentation using the Open Telemetry API.
Enabling Open Telemetry is optional.
For more information about how to leverage Open Telemetry with FlowX, check the following section:
**Additional configuration needed**! For more information about Open Telemetry deployment/configuration, check the following section:
For more information about microservices Open Telemetry default properties, check the following section:
# Components change log v4.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.0-may-2024/ui-components-changelog
This log outlines the changes in component styles and props from v4.0 to v4.1.
## Navigation areas
### Stepper
* Implemented fixed height settings on the Web (for sticky sections use case).
### Tab bar
* Added Sizing options: Tabs Gap & Component Gap properties.

### Page
* Added fixed height settings on the Web (for sticky sections use case)

### Modal
* Added fixed height settings on the Web (for sticky sections use case).

### Zone
* Incorporated fixed height settings on the Web (for sticky sections use case).

## UI components
### Container
* Integrated fixed height settings on the Web for better management of sticky sections.

### Card
* Enabled fixed height settings on the Web for sticky sections.

### Form
* Implemented fixed height settings on the Web for improved usability.

### File preview
* Introducing a new source type: Media Library. Check the following section for more details:

### Collection
* Added fixed height settings on the Web for smoother handling.

Note that for all components, the overflow property is set to scroll when the height is fixed.
The "overflow" property in CSS controls how content that exceeds the dimensions of a container is handled. It's particularly useful when the content inside a container is larger than the container itself.

# FlowX.AI 4.1.0 Release Notes (LTS)
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.0-may-2024/v4.1.0-may-2024
🎉 Welcome to the FlowX.AI 4.1.0 release!
**Release Date:** 30th May 2024
This release is a **Long-Term Support (LTS)** version, ensuring extended support and stability.
In this release, we've added some cool new features and enhancements to our already mind-blowing v4.0! Let's dive in and explore:
## **What's New?** 🆕
### Misconfigurations
The Misconfigurations Warnings feature introduces a proactive alert system that ensures alignment between process configurations and selected platforms.
With dynamic platform-specific settings, users receive alerts that guide them toward optimal configurations for navigation and UI design. These alerts, integrated into the frontend interface, empower users to make informed decisions, thereby enhancing the process configuration.

An additional step is required to compute and enable misconfigurations in existing processes from older releases:
#### Generate for available platforms only
You can control which platforms you want to make available configurations for navigation areas, UI Designer or to enable/disable misconfigurations. Options include: web only, mobile, and omnichannel.

### Navigation areas - navigation inside zones and pages
We're enhancing navigation within zones and pages to enable a step-by-step or wizard-style experience.
In the Navigation Panel, a new option will be available exclusively for the web platform. Users can choose between "Single Page Form," which displays all tasks in the same zone (in parallel), and "Wizard," presenting tasks one at a time with custom navigation buttons.

Check the following section for more information:
### Static document management via CMS
Decoupled static document management from the Document Plugin, enabling independent management of documents such as terms and conditions, rules and regulations, and brochures.

The changes involve enhancing the platform's capabilities for managing static documents, particularly **PDFs**, within the **Media Library**. This includes enabling the upload of PDF files, updating information text to reflect PDF format specifications.

PDF documents uploaded to the Media Library must adhere to a maximum file size limit of 10 MB. If you need to increase this limit for larger files, please refer to the following [**configuration options**](../../4.1.x/setup-guides/cms-setup#configuring-the-maximum-size-of-the-files).
Please note that raising the file size limit may increase vulnerability to potential attacks. Consider carefully before making this change.
With the introduction of the Media Library's static document management feature, the previous method of utilizing paths within the **Process Data** for **File Preview** component to display static documents will be phased out.
You can still use it if you have scenarios in which you need to [**generate templates from HTML**](../../4.1.x/docs/platform-deep-dive/plugins/custom-plugins/documents-plugin/generating-from-html-templates) and then display them in a file preview.
### Dismiss navigation on secondary token end
When a navigation sequence is initiated by a secondary token triggered by a boundary event, it will automatically be dismissed when the token reaches the stop process event. This feature ensures that informative modals are closed without requiring extra configurations.

### Theme Management
We've introduced preview options for more UI components. Now, you can review changes in the theming configurations before finalizing them.

### UI Designer
We've added new properties, settings and styles across different UI components for an enhanced experience. Check the UI components - change log for the full list of improvements:
### Tracing - open telemetry
In our 4.1 release, we're thrilled to introduce tracing with Open Telemetry with additional FlowX custom span attributes, offering enhanced visibility and insights into application behavior. With its capabilities, users can pinpoint issues and optimize performance.
Consequently, we are phasing out Jaeger tracing to focus on the advanced features and broader support of Open Telemetry, ensuring a smooth transition.
For traces visualization, use tools like Grafana to filter and search spans based on custom attributes like `fx.processInstanceUuid`, `fx.nodeName`, `fx.actionName`, and others. This helps in pinpointing specific operations or issues within a trace.
Check the following section for more information and for more scenarios:
**Additional configuration needed**! If you want to enable/configure Open Telemetry, check the following section:
For more information about the default Open Telemetry properties of FlowX.AI microservices, please refer to the following section:
### Spring Boot upgrade (for BE Java services)
In the 4.1 release, we upgraded Spring Boot from version 2.5.4 to 3.2.x for all Java libraries and services. This update delivers significant performance enhancements and includes important bug fixes, thereby offering enhanced stability and functionality.
## **Changes** 🔧
* **Process Designer**: The "Start Subprocess" functionality on Service Task nodes has been discontinued.
* **UI Designer**: Introduced `data test id` within the `Settings > Generic` tab across all UI components, facilitating seamless identification and interaction with UI elements during automated testing.
## **Bug Fixes** 🛠️
We've also squashed pesky bugs to ensure a smoother and more reliable experience across the board.
* **Process Designer**: The error hiccups with embedded subprocesses and their error events have been smoothed out! No more getting stuck in a loop; now, you'll gracefully proceed to the embedded subprocess as expected.
* **Process Designer**: The versioning hiccup causing merge conflicts when trying to merge a branch with a main branch that wasn't imported into the environment has been fixed!
* **UI Designer**: The slider UI element's identity crisis has been resolved. No longer will it confuse its maximum value with its minimum counterpart.
* **UI Designer**: Concatenation glitch in text elements, where values from the collection prototype play hide and seek, has been patched up! No more disappearing acts - they'll be displayed side by side as intended.
* **UI Designer**: The glitch preventing the assignment of actions in button UI Actions with blank spaces in their names has been smoothed out!
## Gremlins to Watch Out For
Keep an eye out for these quirks:
* **UI Designer**: When relocating UI elements between parents, the elements' order doesn't always get the memo, causing a mix-up in the family tree. We're untangling this knot!
## Resources
For deployment guidelines and a seamless transition to version 4.1:
# Deployment guidelines v4.1.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.1-june-2024/deployment-guidelines-v4.1.1
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
After upgrading to the 4.1.1 FlowX.AI release, you can import old process definitions into the new platform only if they are from versions 4.0/4.1.0.
It is not possible to import old process definitions from versions earlier than v4.0.

As of **FlowX.AI** release v4.1.0, the `paperflow-web-components` is deprecated, removing the dependencies. Instead, the new components can be found in `@flowx/ui-toolkit`.
## Component versions
| Component | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------------------- | --------- | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **6.1.2** | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **5.1.3** | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **paperflow-web-components** | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **cms-core** | **3.0.2** | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **3.0.1** | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **3.0.2** | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **4.0.3** | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **4.0.2** | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | **3.0.2** | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | **5.0.4** | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **2.0.4** | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **4.0.4** | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | **2.0.2** | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **iOS renderer** | 3.0.16 | 3.0.7 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 3.0.21 | 3.0.4 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.1.1 | Keycloak | 22.x |
| 4.1.1 | Kafka | 3.2.x |
| 4.1.1 | PostgreSQL | 16.2.x |
| 4.1.1 | MongoDB | 7.0.x |
| 4.1.1 | Redis | 7.2.x |
| 4.1.1 | Elasticsearch | 7.17.x |
| 4.1.1 | Oracle Database | 19.8.0.0.0 |
| 4.1.1 | Angular (Web SDK) | 16.3.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
A FlowX release and its patch versions (such as 4.1.x) will *all* have the same the *Recommended Versions* for the third-party components.
### Process instance data archiving
#### FlowX.AI configuration
New settings (new environment variables) have been added for process instance data partitioning and archiving. Check the following documentation sections for more details:
# Migrating from previous versions to v4.1.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.1-june-2024/migrating-from-previous-to-v4.1.1
If you are upgrading from a v3.4.x version, first check the following **migration guide** (to capture all the changes introduced in v4.0):
If you are upgrading from v4.0 to v4.1.1, do not forget to check the migration guides for the previous versions:
If you are upgrading from v4.1 to v4.1.1, check the following migration guide:
## Migrating from v4.1 to v4.1.1
Before upgrading to v4.1.1, we recommend executing the initial data partitioning DB migrations manually. We recommend this no matter if you enable partitioning or not, as these DB migrations could take a lot of time.
After executing manually the SQL commands from Liquibase, all existing process instance related information will go into the initial partition.
If partitioning is enabled, the initial partition will continue to be used until a new partition is generated according to the partitioning interval (DAY, WEEK, MONTH). Future partitions will be created automatically.
If partitioning is not enabled, all data will continue to be stored in this initial partition.
[Partitioning docs](../../4.1.x/setup-guides/flowx-engine-setup-guide/process-instance-data-archiving)
# FlowX.AI 4.1.1 Release Notes (LTS)
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.1-june-2024/v4.1.1-june-2024
**Release Date:** 17th June 2024
This is a patch version part of the the long-term support for version 4.1.
Welcome to FlowX.AI 4.1.1 release. Let's dive in and explore:
## **What's New?** 🆕
### FlowX.AI Engine: Process Instance Data Archiving
Database Compatibility: Oracle and Postgres.
We are introducing a new system for archiving data related to old process instances. This enables the implementation of data retention policies, with more predictable storage usage and costs.
Some operations involving process instance data can be snappier, given the lower amount of data in the system and new structure. Archiving relies on partitioning data based on the process instance start time. Each partition is associated with a time period (day, week, month), and retention is defined by the number of periods maintained in the system.
Archived data remains in new tables in the database, optionally compressed, and is no longer accessible in FlowX. These tables can be compressed, copied, moved, archived, or deleted without affecting other processes in FlowX.
For more details about process instance partitioning and archiving, including configuration of the feature, see:
## **Changes** 🔧
### Task Manager: base URL configuration
We have enhanced the Task Manager plugin by adding the ability to update the baseUrl for tasks. If the `task.baseUrl` is specified in the process parameters, it will now be sent to the Task Manager to update the tasks accordingly.
Example of a Business Rule:
```java theme={"system"}
output.put("task", {"baseUrl": "https://your_base_url"});
```
This update streamlines the configuration process, ensuring that task URLs are dynamically updated and properly managed within the Task Manager.
## Gremlins to Watch Out For
Keep an eye out for these quirks:
* **UI Designer**: When relocating UI elements between parents, the elements' order doesn't always get the memo, causing a mix-up in the family tree. We're untangling this knot!
## Resources
For deployment guidelines and a seamless transition to version 4.1.1:
# Deployment guidelines v4.1.2
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.2-june-2024/deployment-guidelines-v4.1.2
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
After upgrading to the 4.1.2 FlowX.AI release, you can import old process definitions into the new platform only if they are from versions 4.1.0 & 4.1.1.
It is not possible to import old process definitions from versions earlier than v4.1.0.

As of **FlowX.AI** release v4.1.0, the `paperflow-web-components` is deprecated, removing the dependencies. Instead, the new components can be found in `@flowx/ui-toolkit`.
## Component versions
| Component | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------------------- | ------------ | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **6.1.3** | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **5.1.4** | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **4.17.1-2** | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | **4.17.1-2** | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | **4.17.1-2** | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | **4.17.1-2** | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **paperflow-web-components** | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **cms-core** | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **iOS renderer** | 3.0.16 | 3.0.16 | 3.0.7 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 3.0.21 | 3.0.21 | 3.0.4 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.1.2 | Keycloak | 22.x |
| 4.1.2 | Kafka | 3.2.x |
| 4.1.2 | PostgreSQL | 16.2.x |
| 4.1.2 | MongoDB | 7.0.x |
| 4.1.2 | Redis | 7.2.x |
| 4.1.2 | Elasticsearch | 7.17.x |
| 4.1.2 | Oracle Database | 19.8.0.0.0 |
| 4.1.2 | Angular (Web SDK) | 16.3.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
A FlowX.AI release and its patch versions (such as 4.1.x) will *all* have the same the *Recommended Versions* for the third-party components.
# Migrating from previous versions to v4.1.2
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.2-june-2024/migrating-from-previous-to-v4.1.2
If you're upgrading from a v3.4.x version, make sure to first review the migration guide for v4.0 to capture all the significant changes:
If you are upgrading from v4.0 to v4.1.2, do not forget to check the migration guides for the previous versions:
# FlowX.AI 4.1.2 Release Notes (LTS)
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.2-june-2024/v4.1.2-june-2024
**Release Date:** 8th June 2024
This is a patch version part of the the long-term support for version 4.1.
Welcome to FLowX.AI 4.1.2 release. Let’s dive in and explore:
## Enhancements ✨
### Web Renderer
* Improved PDF viewer locale setting based on renderer language configuration. Now, the PDF viewer menu will display localized content according to the chosen language setting, enhancing user experience.
## Bug fixes 🛠️
### FlowX.AI Engine
* **Fixed the Server-Sent Events (SSE) message issue** where they were playing hide-and-seek in the console. The problem stemmed from swimlanes lacking proper permissions and an overly strict event filter. After granting correct permissions and adjusting the filter, SSE messages are now reliably displayed.
* **Export Process/Copy & Paste**: Addressed an issue where soft-deleted UI actions were erroneously included in `GET /data` responses. Now, during export or copy-paste operations, only active UI actions are included, ensuring deleted actions remain hidden as intended.
## Gremlins to watch out for
Keep an eye out for these quirks:
* **UI Designer**: When relocating UI elements between parents, the elements' order doesn't always get the memo, causing a mix-up in the family tree. We're untangling this knot!
## Resources
For deployment guidelines and a seamless transition to version 4.1.2:
# Deployment guidelines v4.1.3
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.3-august-2024/deployment-guidelines-v4.1.3
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
After upgrading to the 4.1.3 FlowX.AI release, you can import old process definitions into the new platform only from version 4.1.2.
It is not possible to import old process definitions from versions earlier than v4.1.2.

As of **FlowX.AI** release v4.1.0, the `paperflow-web-components` is deprecated, removing the dependencies. Instead, the new components can be found in `@flowx/ui-toolkit`.
## Component versions
| Component | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------------------- | ------------ | -------- | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **6.1.4** | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **5.1.5** | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **4.17.1-3** | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | **4.17.1-3** | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | **4.17.1-3** | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | **4.17.1-3** | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **paperflow-web-components** | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **cms-core** | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **iOS renderer** | 3.0.16 | 3.0.16 | 3.0.16 | 3.0.7 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 3.0.21 | 3.0.21 | 3.0.21 | 3.0.4 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.1.3 | Keycloak | 22.x |
| 4.1.3 | Kafka | 3.2.x |
| 4.1.3 | PostgreSQL | 16.2.x |
| 4.1.3 | MongoDB | 7.0.x |
| 4.1.3 | Redis | 7.2.x |
| 4.1.3 | Elasticsearch | 7.17.x |
| 4.1.3 | Oracle Database | 19.8.0.0.0 |
| 4.1.3 | Angular (Web SDK) | 16.3.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
A FlowX.AI release and its patch versions (such as 4.1.x) will *all* have the same the *Recommended Versions* for the third-party components.
# Migrating from previous versions to v4.1.3
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.3-august-2024/migrating-from-previous-to-v4.1.3
If you're upgrading from a v3.4.x version, make sure to first review the migration guide for v4.0 to capture all the significant changes:
If you're moving from v4.0 to v4.1.3, don’t forget to check the relevant migration guides for each version to ensure nothing is missed:
If you’re upgrading from v4.1.1 or v4.1.2 to v4.1.3, simply review the release notes and deployment guidelines for any notable changes:
# FlowX.AI 4.1.3 Release Notes (LTS)
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.3-august-2024/v4.1.3-august-2024
**Release Date:** 12th August 2024
This is a patch version part of the the long-term support for version 4.1.
Welcome to FLowX.AI 4.1.3 release. Let’s dive in and explore:
## Bug fixes 🛠️
### Process Designer
* **Copy/Paste Nodes**: Got a little too click-happy with those keyboard shortcuts in the Process Designer? You might have noticed multiple requests flooding in when you just wanted one. We’ve had a chat with the system, and it’s agreed to calm down. Now, one copy-paste equals one request. As it should be. ✂️📋
* **Stuck Nodes and Stubborn Swimlanes**: Tried to move a node or resize a swimlane after pasting and found everything frozen? The Process Designer had a little too much coffee. We’ve calmed it down, so now you can move and resize as you please. No more stuck nodes or swimlane stand-offs!
### FlowX.AI Engine
* **Business Rule Precision**: Occasionally, you might have encountered inconsistent outcomes when running the same business rule twice. This was due to a rare concurrency issue during rule compilation. We've addressed this by ensuring that, if an issue arises, the rule is recompiled rather than executing with an error. Now, your business rules run smoothly and consistently, just like you'd expect. 🎰🎯
## Gremlins to watch out for 👀
Keep an eye out for these quirks:
* **UI Designer**: When relocating UI elements between parents, the elements' order doesn't always get the memo, causing a mix-up in the family tree. We're untangling this knot!
## Resources 📚
Need more details for a seamless upgrade to v4.1.3? We've got you covered:
# Deployment guidelines v4.1.4
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.4-september-2024/deployment-guidelines-v4.1.4
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
After upgrading to the 4.1.4 FlowX.AI release, you can import old process definitions into the new platform only from versions 4.1.2 & 4.1.3.
It is not possible to import old process definitions from versions earlier than v4.1.2.

As of **FlowX.AI** release v4.1.0, the `paperflow-web-components` is deprecated, removing the dependencies. Instead, the new components can be found in `@flowx/ui-toolkit`.
## Component versions
| Component | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------------------- | ------------ | -------- | -------- | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **6.1.6** | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **5.1.6** | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **4.17.1-5** | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | **4.17.1-5** | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | **4.17.1-5** | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | **4.17.1-5** | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **paperflow-web-components** | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **cms-core** | **3.0.3** | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **3.0.2** | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **3.0.3** | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **4.0.4** | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **4.0.3** | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | **5.0.5** | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **2.0.5** | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **4.0.5** | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | **2.0.3** | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **iOS renderer** | 3.0.16 | 3.0.16 | 3.0.16 | 3.0.16 | 3.0.7 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 3.0.21 | 3.0.21 | 3.0.21 | 3.0.21 | 3.0.4 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.1.4 | Keycloak | 22.x |
| 4.1.4 | Kafka | 3.2.x |
| 4.1.4 | PostgreSQL | 16.2.x |
| 4.1.4 | MongoDB | 7.0.x |
| 4.1.4 | Redis | 7.2.x |
| 4.1.4 | Elasticsearch | 7.17.x |
| 4.1.4 | Oracle Database | 19.8.0.0.0 |
| 4.1.4 | Angular (Web SDK) | 16.3.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
A FlowX.AI release and its patch versions (such as 4.1.x) will *all* have the same the *Recommended Versions* for the third-party components.
# Migrating from previous versions to v4.1.4
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.4-september-2024/migrating-from-previous-to-v4.1.4
If you're upgrading from a v3.4.x version, make sure to first review the migration guide for v4.0 to capture all the significant changes:
If you're moving from v4.0 to v4.1.3, don’t forget to check the relevant migration guides for each version to ensure nothing is missed:
If you’re upgrading from v4.1.1, v4.1.2 or v4.1.3 to v.4.1.4, simply review the release notes and deployment guidelines for any notable changes:
# FlowX.AI 4.1.4 Release Notes (LTS)
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.4-september-2024/v4.1.4-september-2024
**Release Date:** 6th September 2024
This release is part of the long-term support (LTS) for version 4.1. While it’s a minor patch, we’ve focused on enhancing your security and overall experience with important fixes and updates.
## Fixes 🛠️
We kicked out a few troublemaking vulnerabilities to keep things running smoothly and securely for you! 🤺
## What's new? 🚀
Added support for [**EntraID**](https://www.microsoft.com/en-us/security/business/identity-access/microsoft-entra-id), improving integration options and expanding authentication capabilities.
## Resources 📚
Need help upgrading to version 4.1.4? We've got everything you need for a smooth transition:
# Deployment guidelines v4.1.5
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.5-september-2024/deployment-guidelines-v4.1.5
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
After upgrading to the 4.1.5 FlowX.AI release, you can import old process definitions into the new platform only from versions 4.1.2, 4.1.3 & 4.1.4.
It is not possible to import old process definitions from versions earlier than v4.1.2.

As of **FlowX.AI** release v4.1.0, the `paperflow-web-components` is deprecated, removing the dependencies. Instead, the new components can be found in `@flowx/ui-toolkit`.
## Component versions
| Component | 4.1.5 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------------------- | ------------ | -------- | -------- | -------- | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **6.1.7** | 6.1.6 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **5.1.7** | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **4.17.1-6** | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | **4.17.1-6** | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | **4.17.1-6** | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | **4.17.1-6** | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **paperflow-web-components** | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **cms-core** | 3.0.3 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | 3.0.2 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | 3.0.3 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | 4.0.4 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | 4.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | 5.0.5 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | 2.0.5 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | 4.0.5 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | 2.0.3 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **iOS renderer** | 3.0.16 | 3.0.16 | 3.0.16 | 3.0.16 | 3.0.16 | 3.0.7 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 3.0.21 | 3.0.21 | 3.0.21 | 3.0.21 | 3.0.21 | 3.0.4 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.1.5 | Keycloak | 22.x |
| 4.1.5 | Kafka | 3.2.x |
| 4.1.5 | PostgreSQL | 16.2.x |
| 4.1.5 | MongoDB | 7.0.x |
| 4.1.5 | Redis | 7.2.x |
| 4.1.5 | Elasticsearch | 7.17.x |
| 4.1.5 | Oracle Database | 19.8.0.0.0 |
| 4.1.5 | Angular (Web SDK) | 16.3.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
A FlowX.AI release and its patch versions (such as 4.1.x) will *all* have the same the *Recommended Versions* for the third-party components.
# Migrating from previous versions to v4.1.5
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.5-september-2024/migrating-from-previous-to-v4.1.5
If you're upgrading from a v3.4.x version, make sure to first review the migration guide for v4.0 to capture all the significant changes:
If you're moving from v4.0 to v4.1.3, don’t forget to check the relevant migration guides for each version to ensure nothing is missed:
If you’re upgrading from > v4.1.0 to v4.1.5 simply review the release notes and deployment guidelines for any notable changes:
# FlowX.AI 4.1.5 Release Notes (LTS)
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.5-september-2024/v4.1.5-september-2024
**Release Date:** 23rd September 2024
This release is part of the long-term support (LTS) for version 4.1. While it’s a minor patch, we’ve focused on enhancing your security and overall experience with important fixes and updates.
## Fixes 🛠️
* **UI templates - generic properties**: UI templates with generic properties (e.g., labels) were being overridden by platform-specific settings upon process start, causing unexpected changes. This override issue has been resolved—generic properties will now stay as configured.
* **Undo/redo (Windows)**: We’ve reminded the **Ctrl** key that it’s not the “Undo!” button, and it now behaves like a respectable key should. You can once again Copy, Paste, and Select All without your inputs mysteriously disappearing and reappearing.
## Resources 📚
Need help upgrading to version 4.1.5? We've got everything you need for a smooth transition:
# Deployment guidelines v4.2.0
Source: https://docs.flowx.ai/release-notes/v4.x/v4.2.x/v4.2.0-june-2024/deployment-guidelines-v4.2.0
Do not forget, when upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
It is not possible to import old process definitions from versions earlier than v4.2.0.

## Component versions
| Component | 4.2.0 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ------------------------------ | ----- | ------ | ------ | ------ | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **paperflow-web-components** | | - | - | - | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **flowx-process-renderer** | | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **cms-core** | | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **customer-management-plugin** | | 2.0.3 | 2.0.2 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.4 | 0.2.3 | 0.2.3 | 0.2.1 |
| **task-management-plugin** | | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **iOS renderer** | | 3.0.7 | 3.0.7 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | | 3.0.4 | 3.0.4 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Recommended versions for FlowX.AI 4.2.0
| FLOWX.AI Platform Version | Component name | Recommended version (tested versions) |
| ------------------------- | ----------------- | ------------------------------------- |
| 4.2.0 | Keycloak | 22.0.x |
| 4.2.0 | Kafka | 3.2.3 |
| 4.2.0 | PostgreSQL | 16.2.0 |
| 4.2.0 | MongoDB | 7.0.6 |
| 4.2.0 | Redis | 7.2.4 |
| 4.2.0 | Elasticsearch | 7.17 |
| 4.2.0 | OracleDB | 19.8.0.0.0 |
| 4.2.0 | Angular (Web SDK) | 17.0.0 |
FlowX.AI supports any version of the listed third-party components as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FlowX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
# FlowX.AI 4.2.0 Release
Source: https://docs.flowx.ai/release-notes/v4.x/v4.2.x/v4.2.0-june-2024/v4.2.0-june-2024
We are excited to announce the release FlowX.AI 4.2 🔥, featuring new and improved features that will elevate your workflow experience.
Let's dive in and explore:
## **What's New?** 🆕
### FlowX.AI UI Designer
We are thrilled to introduce the new and improved **UI Designer Navigator**, a major update designed to streamline your UI design process.
The UI layer panel has been redesigned for a more intuitive experience, making it easier to manage and navigate through your design elements.
Dragging and dropping components in the preview is now smoother and more precise, allowing for faster and easier creation of UIs.
You can now change the root component from a form group to a container or vice versa, offering greater flexibility when copying nodes or resolving configuration problems.
It is now simpler to identify where you are placing a component within the hierarchy, thanks to the enhanced drag/reorder functionality in the right panel.

### FlowX.AI Engine
#### Autocomputed data to send
In previous platform versions, when creating your UI screens and working with data, you had to ensure that all the data stored in your process keys was saved in the process instance. This required adding an extra parameter called "Data to send" to the "Save Data" node action.
| Older versions | v4.2 |
| :-------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------: |
|  |  |
| | |
Now, with the autocompute feature, this step is no longer necessary, as the data is automatically saved and sent on your process instance.
You no longer need to add "Save Data" node actions, but make sure to include "Forms to Validate" on the UI Actions. This helps ensure that data is submitted correctly and automatically activates any added validators where they exist.

However, you still have the option to customize which keys are included or excluded as needed.

### Scripting UX improvements
We're excited to announce significant improvements to our scripting UX. These enhancements focus on upgrading the code editors and introducing an advanced autocomplete feature. Configurators, both experienced and novice, will benefit from better visual feedback, support for interpolation syntax, and integrated help and examples.
The updates aim to streamline the configuration process, reduce errors, and make testing and troubleshooting more efficient.
#### Autocomplete based on data model
Introducing autocomplete for attributes, tailored to the data model attributes for enhanced configuration efficiency:
| Section | Autocomplete field(s)/editors | Type |
| ------------------------------------------------------------------ | -------------------------------------------------- | ---------------------------- |
| Node config > Action -> Start subprocess | Copy from current state Exclude from current state | Field w/out interpolation |
| Node config > Data stream topics | Key name | Field w/out interpolation |
| Node config > Action > Kafka send action | Message Header | JSON editor w/ interpolation |
| Action > Business Rule | Business rule | Code editor |
| Node config > Action > Kafka send action > From integration | All integration fields | Input w/ interpolation |
| Throw message node > Node config | Correlation Key | Field |
| Throw message node > Node config | Send data | Editor - JSON |
| Start message node > Node config | Process key | Field w/out interpolation |
| Exclusive gateway > Gateway decision | Expression | Code editor |
| UI designer > Form & form elements | Disable expression | JS editor |
| UI designer > Input, text area (?), slider (min & max), text, link | Computed values | JS editor |
| UI designer > UI components | Hide expression | JS editor |
| Catch message node (boundary) > Node config | Process Key Correlation key | Field w/out interpolation |
#### New test business rule editor

#### New hide/disabled expressions editor

## **Changes** 🔧
* **WEB SDK**: Angular update (v17).
## Additional information
For deployment guidelines, refer to:
# Deployment guidelines v4.2.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.2.x/v4.2.1-july-2024/deployment-guidelines-v4.2.1
Do not forget, when upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
It is not possible to import old process definitions from versions earlier than v4.2.0.

## Component versions
| Component | 4.2.0 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ------------------------------ | ----- | ------ | ------ | ------ | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **paperflow-web-components** | | - | - | - | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **flowx-process-renderer** | | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **cms-core** | | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **customer-management-plugin** | | 2.0.3 | 2.0.2 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.4 | 0.2.3 | 0.2.3 | 0.2.1 |
| **task-management-plugin** | | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **iOS renderer** | | 3.0.7 | 3.0.7 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | | 3.0.4 | 3.0.4 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Recommended versions for FlowX.AI 4.2.0
| FLOWX.AI Platform Version | Component name | Recommended version (tested versions) |
| ------------------------- | ----------------- | ------------------------------------- |
| 4.2.1 | Keycloak | 22.0.x |
| 4.2.1 | Kafka | 3.2.3 |
| 4.2.1 | PostgreSQL | 16.2.0 |
| 4.2.1 | MongoDB | 7.0.6 |
| 4.2.1 | Redis | 7.2.4 |
| 4.2.1 | Elasticsearch | 7.17 |
| 4.2.1 | OracleDB | 19.8.0.0.0 |
| 4.2.1 | Angular (Web SDK) | 17.0.0 |
FlowX.AI supports any version of the listed third-party components as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FlowX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
# FlowX.AI 4.2.1 Release
Source: https://docs.flowx.ai/release-notes/v4.x/v4.2.x/v4.2.1-july-2024/v4.2.1-july-2024
We are excited to announce the release FlowX.AI 4.2.1 🔥, featuring new and improved features that will elevate your workflow experience.
Let's dive in and explore:
## **What's New?** 🆕
### Web Renderer
Changes were made to the icons module configuration to allow the addition of a custom icon dictionary.
#### Old configuration
The previous configuration imported the FlxIconModule with an extra icon set directly in the imports array.
```typescript theme={"system"}
@NgModule({
declarations: [...],
imports: [
FlxIconModule.withExtraIconSet(EXTRA_ICON_SET)
]
)
```
#### New configuration
The new configuration separates the extra icon set from the imports array and places it in the providers array. This change allows for extending the existing icon set with a custom icon dictionary while still keeping the `FlxIconModule` in the imports array to use the `flx-icon` component.
```typescript theme={"system"}
@NgModule({
declarations: [...],
imports: [
FlxIconModule // keep the module in order to be able to use the flx-icon component
],
providers: [
provideExtraIconSet(EXTRA_ICON_SET) // extend the existing icon set with a custom icon dictionary
]
)
```
### FlowX.AI Engine - Scripting UX improvements
**Input Fields**: Support interpolation as valid syntax in code editors.
Autocomplete feature added to:
* **Node Configurations**:
* Start subprocess actions: copy or exclude from the current state.
* Key names for the data stream topics.
* Process keys for Start message nodes.
* Process keys and correlation keys for Catch message nodes (boundary).
* Timer interrupting/non interrupting definition/function (x).
* Output and collection keys in Call activity nodes.
* **Node actions**:
* Append params to parent process: destination states specified when appending parameters to parent processes.
* **UI Designer**:
* Process data keys for file previews and image source locations.
* Collection sources and prototype identifier keys.
* Input keys for custom components.
* **Process Settings**: Indexing keys used for the Task Management plugin.
These updates aim to streamline the scripting user experience and enhance overall functionality.
### FlowX.AI UI Designer
* Improved UI Designer Navigator for better usability.
## Bug Fixes 🛠️
### FlowX.AI Engine
* Fixed duplicate key error. This issue was caused by conflicting keys in processes with start embedded subprocesses nodes and throw/catch message events. The key management logic was updated to ensure unique keys, resolving the error.
* Fixed an issue where executing a business rule with the same input sometimes caused the process engine to return an error. Implemented null checks in the business rule script, regular cache clearing, and enhanced error logging for improved debugging.
## Additional information
For deployment guidelines, refer to:
# Deployment guidelines v4.5.0
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.0-october-2024/deployment-guidelines-v4.5.0
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
It is not possible to import old process definitions from versions earlier than v4.5.0

## Component versions
| Component | 4.5.0 | 4.1.5 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------------------- | ---------- | -------- | -------- | -------- | -------- | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **7.3.5** | 6.1.7 | 6.1.6 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **6.1.11** | 5.1.7 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.9.8** | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | **5.9.8** | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | **5.9.8** | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | **5.9.8** | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.9.8** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.9.8** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.9.8** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.9.8** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.9.8** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **4.1.6** | 3.0.3 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **4.0.4** | 3.0.2 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **4.0.4** | 3.0.3 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **5.0.4** | 4.0.4 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **5.0.4** | 4.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | **4.1.3** | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | **6.0.1** | 5.0.5 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **3.1.2** | 2.0.5 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **5.0.3** | 4.0.5 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | **0.1.12** | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | **3.0.3** | 2.0.3 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **1.3.9** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **application-manager** | **1.3.7** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **data-sync** | **1.3.5** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **iOS renderer** | **4.0.2** | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **4.0.0** | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
Note: The same container image and Helm chart are used for both **Application Manager** and **Runtime Manager**.
## AI Agents
| Component | 4.5.0 | 4.1.5 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | --------- | ----- | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.0.0** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.0.0** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.0.0** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.0.0** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.5.0 | Keycloak | 22.x |
| 4.5.0 | Kafka | 3.2.x |
| 4.5.0 | PostgreSQL | 16.2.x |
| 4.5.0 | MongoDB | 7.0.x |
| 4.5.0 | Redis | 7.2.x |
| 4.5.0 | Elasticsearch | 7.17.x |
| 4.5.0 | OracleDB | 19.23.0.0.0 |
| 4.5.0 | Angular (Web SDK) | 17.x |
| 4.5.0 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
## New microservices - setup guides
## New access rights and roles
## Updated access rights and roles
Added new roles for **manage-views**.
# Deployment changes for v4.5.0
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.0-october-2024/migrating-from-v4.1.x-to-v4.5.0/migrating-from-v4.1.x
This document outlines the configuration and infrastructure changes introduced from v4.1.x to v4.5.0 for deploying the FlowX.AI platform.
## CMS Setup
### MongoDB configuration
In version 4.5.0, the CMS setup includes a more comprehensive MongoDB configuration, especially for runtime data handling:
* **Runtime MongoDB Instance**: A dedicated MongoDB instance for managing runtime data.
* **New Environment Variables**:
* `RUNTIME_DB_USERNAME`: Username for runtime MongoDB access.
* `SPRING_DATA_MONGODB_RUNTIME_URI`: Connection URI for the runtime MongoDB instance.
* `SPRING_DATA_MONGODB_STORAGE`: Specifies storage type for Azure environments (`mongodb` or `cosmosdb`). Default is `mongodb`.
* **Transaction Settings for Mongock Library**:
* `MONGOCK_TRANSACTIONENABLED`: Controls MongoDB transaction support with Mongock, defaulting to `false` due to compatibility concerns with MongoDB 5.
### Private storage configuration
Private CMS to securely store uploaded documents and AI-generated documents, ensuring they are accessible only via authenticated endpoints. This CMS will support AI services and workflows while maintaining strict access controls.
Private CMS ensures secure file storage by keeping documents hidden from the Media Library and accessible only through authenticated endpoints with access token permissions. Files can be retrieved using tags (e.g., ai\_document, ref:UUID\_doc) and are excluded from application builds as they aren't needed at runtime.
* `APPLICATION_FILE_STORAGE_S3_PRIVATE_SERVER_URL`: This environment variable specifies the URL of the S3 server used for private file storage.
* `APPLICATION_FILE_STORAGE_S3_PRIVATE_BUCKET_NAME`: This environment variable specifies the name of the S3 bucket dedicated to private file storage.
* `APPLICATION_FILE_STORAGE_S3_PRIVATE_CREATE_BUCKET`: This environment variable indicates whether the private S3 bucket should be created if it does not already exist. It can be set to true or false.
* `APPLICATION_FILE_STORAGE_S3_PRIVATE_ACCESS_KEY`: This environment variable holds the access key used to authenticate to the S3 server for private file storage.
* `APPLICATION_FILE_STORAGE_S3_PRIVATE_SECRET_KEY`: This environment variable holds the secret key used to authenticate to the S3 server for private file storage.
***
## Admin setup
### MongoDB configuration
Version 4.5.0 introduces a new MongoDB setup in the Admin service for managing data model information:
* **New MongoDB Data Model Configuration**:
* **Environment Variables**:
* `SPRING_DATA_MONGODB_URI`: URI for connecting to the MongoDB data model instance.
* `DB_USERNAME`: Set to `data-model` for data model access.
* `SPRING_DATA_MONGODB_STORAGE`: Specifies storage type for Azure environments (`mongodb` or `cosmosdb`).
***
## Engine setup
### MongoDB configuration
The Engine configuration now includes additional setup for a runtime MongoDB instance to manage runtime builds:
* **Runtime MongoDB for Engine**:
* **New Environment Variables**:
* `SPRING_DATA_MONGODB_RUNTIME_URI`: URI for connecting to the runtime MongoDB.
* `DB_USERNAME`: Set to `app-runtime` for runtime data access.
# Configuration and migration guide
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.0-october-2024/migrating-from-v4.1.x-to-v4.5.0/process-configuration
This guide outlines changes in process and UI configuration from v4.1.x to 4.5.1 version.
## Applications
The **Applications** feature in FlowX AI v4.5.0 is a new structure that organizes all dependencies and resources required for a project into a single deployable view. This enhancement simplifies configuration, deployment, and maintenance by layering applications on top of processes, offering a centralized workspace that encapsulates everything needed for project execution.

Several key configuration changes impact how resources and dependencies are managed, deployed, and maintained. This guide provides a breakdown of the configuration changes, automatic migration processes, and manual steps required to ensure a smooth transition.

***
### Consolidated resource management
* **Change**: All resources that were previously managed individually within processes are now grouped within Applications. This includes content management elements, integrations, themes, task configurations, and permissions.
* **Impact**: Resources like **enumerations**, **substitution tags**, and **generic parameters** are now managed within Applications, allowing centralized configuration and version control.
* **Migration**: All process-related resources will be migrated automatically into a **default application**, ensuring continuity of functionality in the new framework. After migration, you should verify that all critical resources are correctly configured within this default application.
### Enhanced version control and dependency management
* **Impact**: Applications support **dependency management** through **Libraries** and enforce version-controlled resources. Setting up an application now requires careful dependency management and versioning to prevent unintended updates.
* **Benefit**: Allows for modular, reusable resources and stable deployments across applications, reducing resource duplication and enhancing project compatibility.
### Migration checklist
To ensure a smooth transition, complete the following steps:
1. **Verify Process Migration**: Confirm that all existing process definitions have been correctly migrated into the default application.
2. **Set Configuration Parameter Overrides**: Post-deployment, adjust environment-specific Configuration Parameters in the default application.
3. **Update Task Views**: Replace the global "All Tasks" feature with application-specific Views in each application.
4. **Transfer Processes and Dependencies Manually**: If moving a process from the default application to another application, manually transfer associated resources and re-check dependencies.
***
## Generic parameters migration
* **Overview**: In version 4.5.0, global generic parameters (from versions prior to 4.5.0) have been migrated to application-level as Configuration Parameters, consolidating parameter management within specific applications for improved organization and control.

* **Migration**: All generic parameters will be automatically migrated to Configuration Parameters section under a default application.
* **Business Rules Unaffected**: There is no impact on existing business rules; they will continue to function as before without requiring updates.
* **Process Export Considerations**: If you export a process from one application to another, ensure that you also transfer the associated configuration parameters. This step is crucial to maintain process functionality and consistency across applications.
* **Important Note**: Only values of generic parameters associated with the specific environment, or where `env = null` (displayed as "all" in the interface in versions prior to 4.5.0), will be migrated. You must ensure that you have correctly set the values for generic parameters, paying attention to environment values (which are case-sensitive), and export these generic parameters before migration to avoid any potential data loss.

* **Post-Deployment Step**: After the first deployment to an upper environment, you will need to create configuration parameter overrides with the specific values required for that environment. This ensures that all environment-specific configurations are accurately maintained and applied across different deployment stages.
To set configuration parameter overrides, navigate to **Your App -> Runtime -> Configuration Parameters Overrides**.

***
## Task management
* "All Tasks" as a View: The global "All Tasks" feature is no longer standalone and will now function as a View in an application.
**v4.5.0:**

**v4.1.x:**

***
## General
Before starting the migration, complete the following steps:
1. **Merge All Feature Branches**: Ensure all feature branches for processes are merged into the latest version on the main branch.
2. **Remove Unnecessary Resources**: Delete any test processes or resources that are no longer needed.
3. **Export Generic Parameters**: Export generic parameters as a backup to ensure they migrate accurately to application-specific Configuration Parameters.
### Migration steps
During migration, resources will be transferred into a single **default application** with one committed version.
* **Process Definitions**: Only the last committed process version on the main branch will migrate. If no committed version exists, the latest WIP version will be used.
* **Enumerations, Substitution Tags, and Task Manager**: These resources will be migrated to the default application.
* **Generic Parameters**: Migrated as **Configuration Parameters** within the default application, covering only values where `env = null` or that match the platform’s environment setting.
* **Languages**: Language settings (available languages and default) will be moved to application settings. Languages remain globally available.
### Resources excluded from migration
Some resources will remain globally available or are deprecated:
* **Themes**
* **Fonts**
* **Global Media Library** (for media used in themes)
* **Source Systems**
* **Notifications and Document Templates**
* **Out of Office (Task Manager)**
* **Integration Management** (not included in v4.5)
* **Content Models** (deprecated)
***
## Datepicker Migration
In version 4.5, significant updates have been introduced to the **Datepicker** component to ensure compatibility with ISO 8601 date formats and enhanced handling of date attributes within the **Data Model**. This migration affects both newly created and existing processes.
### Key changes
1. **Introduction of Date Types**:
* **Standard Date**: Stores and displays date values in ISO 8601 format, respecting the application's locale and timezone settings.
* **Legacy Date**: Retains previous formatting to ensure compatibility with existing business rules and processes.
2. **Properties Updates**:
* The **Datepicker** now supports dependent properties such as `minDate`, `maxDate`, and `defaultValue`. These properties:
* Follow the formatting rules of the selected date type (Standard or Legacy).
* Ensure that dynamic date values pulled from the **Data Model** are displayed correctly.
3. **Backward Compatibility**:
* **Existing Processes**: All migrated processes with legacy Datepicker components will default to `Legacy Date` type. This preserves the original formatting and ensures no disruption in business rules or workflows.
* **New Processes**: Newly created processes will default to `Standard Date` type, saving values in ISO 8601 format.
***
### Migration process
1. **Legacy Datepickers**:
* Automatically flagged during migration.
* Continue to work with existing business rules.
* Require manual review for future updates to transition to the **Standard Date** format.
2. **Business Rules Updates**:
* Legacy Datepickers may require manual adjustments if associated business rules reference hardcoded date formats.
* Ensure that any dynamic dates used in business rules are compatible with the ISO 8601 standard.
3. **Standard Datepickers**:
* All new Datepicker components save date values directly in ISO 8601 format.
* Fully compatible with updated **Data Model** attributes, allowing seamless integration with external systems, adaptors, and reporting plugins.
### Considerations
* **Default Values**:
* For **Standard Datepickers**, the `defaultValue` must be in ISO 8601 format.
* Dynamic defaults can also be set using **Data Model** attributes or process data.
* **Data Model Integration**:
* All external and internal date attributes, including those used by adaptors or business rules, must be explicitly defined in the **Data Model**.
* **UI Designer Overrides**:
* Overrides can be applied to display dates differently for specific UI elements, ensuring flexibility for localized formatting.
### Recommendations for transition
* **Existing Processes**:
* Leave Datepicker components in `Legacy` mode unless business rules and workflows are updated to support ISO 8601.
* **New Processes**:
* Use `Standard Date` to ensure future compatibility and alignment with ISO 8601 formatting.
* **Documentation**:
* Review and update all timer expressions, adaptors, and external data feeds to use ISO 8601 format for consistency.
***
## Post-migration recommendations
For complex projects with multiple use cases, **do not use the default application for ongoing development or production builds**. Instead:
1. **Create Branches within the Default Application**: Organize and streamline resources by creating branches. This enables a lightweight build focused on production.
2. **Split the Default Application into Smaller Applications**: Use the import/export feature to separate the default application into individual applications by use case.
* **Note**: When importing processes into a new application, resource references may need to be manually reconfigured.
***
# Renderer SDKs
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.0-october-2024/migrating-from-v4.1.x-to-v4.5.0/renderers
This guide assists in migrating from FlowX v4.1.x to v4.5.0.
## Android SDK migration guide
### Initialization config changes
A new configuration parameter, named `locale` was added in order to improve formatting the dates, numbers and currencies.
When the SDK initialization happens through the `FlowxSdkApi.getInstance().init(...)` method, the argument has to be set inside the `config: SdkConfig` parameter value:
```kotlin theme={"system"}
FlowxSdkApi.getInstance().init(
...
config = SdkConfig(
baseUrl = "URL to FlowX backend",
imageBaseUrl = "URL to FlowX CMS Media Library",
enginePath = "some_path",
language = "en",
locale = Locale.getDefault(), // e.g. Locale("en", "US"), Locale("fr", "CA")
validators = mapOf("exact_25_in_length" to { it.length == 25 }),
enableLog = false,
),
...
)
```
### Changes when starting a Flowx process
Two new parameters were added:
| Name | Description | Type | Requirement |
| ----------------- | -------------------------------------------------------------------------------------- | --------------- | -------------------------------- |
| `applicationUuid` | The uuid string of the application containing the process to be started | `String` | Mandatory |
| `onProcessEnded` | Callback function where you can do additional processing when the started process ends | `(() -> Unit)?` | Optional. It defaults to `null`. |
```kotlin theme={"system"}
fun startProcess(
applicationUuid: String,
processName: String,
params: JSONObject = JSONObject(),
isModal: Boolean = false,
onProcessEnded: (() -> Unit)? = null,
closeModalFunc: ((processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
### Changes when resuming a Flowx process
One new parameter was added:
| Name | Description | Type | Requirement |
| ---------------- | ---------------------------------------------------------------------------------------- | --------------- | -------------------------------- |
| `onProcessEnded` | Callback function where you can do additional processing when the continued process ends | `(() -> Unit)?` | Optional. It defaults to `null`. |
```kotlin theme={"system"}
fun continueProcess(
processUuid: String,
isModal: Boolean = false,
onProcessEnded: (() -> Unit)? = null,
closeModalFunc: ((processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
### Public API changes
The `changeLanguage` method has been updated and renamed to `changeLocaleSettings`, in order to accommodate the newly added `locale` config parameter:
```kotlin theme={"system"}
fun changeLocaleSettings(locale: Locale, language: String)
```
### Library dependencies updates
* **[Kotlin](https://kotlinlang.org/)**: 1.9.22 **↗** **1.9.24**
* **[Compose BOM](https://developer.android.com/jetpack/compose/bom/bom-mapping)**: 2024.02.00 **↗** **2024.06.00**
* **[Compose Compiler](https://developer.android.com/jetpack/androidx/releases/compose-compiler)**: 1.5.9 **↗** **1.5.14**
* **[Gson](https://github.com/google/gson)**: 2.10.1 **↗** **2.11.0**
***
## iOS SDK migration guide
### Initialization config changes
A new configuration parameter, named `locale` was added in order to improve formatting the dates, numbers and currencies.
The locale needs to be set on the `FXConfig.sharedInstance.configure` method
```swift theme={"system"}
FXConfig.sharedInstance.configure { (config) in
config.locale = "en-US"
...
}
```
### Changes when starting a process
Two new parameters were added on the 3 available start process methods:
| Name | Description | Type | Requirement |
| ----------------- | -------------------------------------------------------------------------------------- | --------------- | ------------------------------- |
| `applicationUuid` | The uuid string of the application containing the process to be started | `String` | Mandatory |
| `onProcessEnded` | Callback function where you can do additional processing when the started process ends | `(() -> Void)?` | Optional. It defaults to `nil`. |
```swift theme={"system"}
func startProcess(applicationUuid: String,
name: String,
params: [String : Any]?,
isModal: Bool = false,
showLoader: Bool = false,
completion: ((UIViewController?) -> Void)?,
onProcessEnded: (() -> Void)? = nil)
```
### Changes when resuming a Flowx process
One new parameter was added on the 3 available continue process methods:
| Name | Description | Type | Requirement |
| ---------------- | -------------------------------------------------------------------------------------- | --------------- | ------------------------------- |
| `onProcessEnded` | Callback function where you can do additional processing when the started process ends | `(() -> Void)?` | Optional. It defaults to `nil`. |
```swift theme={"system"}
func continueExistingProcess(uuid: String,
name: String,
isModal: Bool = false,
completion: ((UIViewController?) -> Void)? = nil,
onProcessEnded: (() -> Void)? = nil)
```
### Public API changes
The `changeLanguage` method has been updated and renamed to `changeLocaleSettings`, in order to accommodate the newly added `locale` config parameter:
```swift theme={"system"}
func changeLocaleSettings(locale: String?, language: String?)
```
***
## Angular SDK migration guide
### Renderer SDK component usage
In the Angular SDK, the `` component has two new parameters have been introduced: appInfo and locale. These additions help support localization and application-specific configurations.
* **appInfo**: Object containing an appId key, which identifies the application.
* **locale**: Provides region-specific settings for localization.
Add the definitions for these properties in the class file of the component that uses the process renderer component:
```typescript theme={"system"}
appInfo = { appId: 'your-app-id' },
locale = 'en-US',
```
Use these parameters in the template as inputs for the `` component:
```html theme={"system"}
```
### Icon module update
The `withExtraIconSet` method has been replaced with `provideExtraIconSet`, which should now be used in the providers array.
```typescript theme={"system"}
@NgModule({
imports: [
IconModule, // Import the IconModule
],
providers: [
// Use provideExtraIconSet to add your custom icon set
provideExtraIconSet({
customIcon1: 'path/to/custom-icon1.svg',
customIcon2: 'path/to/custom-icon2.svg',
// Add more icons as needed
})
]
})
export class AppModule {}
```
### Additional libraries
The following npm packages are now essential for handling date and input formatting:
```npm theme={"system"}
npm i date-fns inputmask
```
* date-fns
* inputmask
# FlowX.AI 4.5.0 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.0-october-2024/v4.5.0-october-2024
Welcome to the FlowX.AI 4.5.0 release! 🚀 This update is packed with groundbreaking features, enhancements, and fixes to supercharge your workflow and provide a seamless development experience.
**Release Date:** 31st October 2024
Get ready because this update is big—really big. We’re taking the scenic route to explore all the exciting new features and improvements that you won’t want to miss, so get ready. There’s a lot to explore here (and yes, that pun is courtesy of our AI, since even our technical writer was stumped on how to market this one).
Before diving in, here is a bonus meme:

***
## **Highlights**
### What's new? 🆕
1. **Applications**: Manage projects with version control and streamlined deployment.
2. **Integration Designer**: Simplify REST API integrations with drag-and-drop tools.
3. **AI Agents**: Leverage LLM-agnostic AI for smarter business processes.
4. **Localization**: Robust support for global languages and regional preferences.
5. **Data Model 2.0**: Improved data handling with dynamic binding and reusable objects.
6. **Task Management 2.0**: Enhanced tracking with customizable views and advanced filtering.
7. **UI Designer Upgrades**: Grid layouts, table components, and an improved navigator.
8. **Scripting Enhancements**: Autocomplete and test editors for streamlined UX.
9. **SDKs**: New React SDK for building responsive applications.
***
## **Detailed updates**
### Application
The new Application concept introduces a streamlined approach to managing and deploying complex projects within FlowX. By grouping all related resources—such as processes, enumerations, integrations, and assets—into a single, organized workspace, applications provide a cohesive view for efficient development and deployment.

This feature supports version control at the application level, allowing users to create and manage multiple versions and builds. Applications also facilitate resource sharing through dependencies, enabling the reuse of processes and configurations across projects. These enhancements make it easier to maintain project integrity, deploy updates seamlessly, and ensure consistency across environments. Here is a quick walkthrough demo:
For more details, check out this section
#### Config vs build
* Config mode is the environment where you set up, adjust, and manage your application's resources, processes, and configurations. It's the workspace where you fine-tune every aspect of the application before it's ready for deployment. Think of it as the design phase, where the focus is on setup, organization, and preparation.
* Build mode is the stage where the configurations you've set up are packaged into a deployable form. This is the runtime-ready version of your application, containing everything needed for it to function in a production environment. A build includes a snapshot of the application’s state at a given point, ensuring stability and predictability when deployed.
For more details, check out this section
For more details, check out this section
***
### Integration Designer
The Integration Designer simplifies the integration of FlowX with external systems using REST APIs. It offers a user-friendly graphical interface with intuitive drag-and-drop functionality for defining data models, orchestrating workflows, and configuring system endpoints.
With Integration Designer, you can easily set up REST-based connections and define workflows, while enjoying flexible authorization options such as Service Token, Bearer, or No Auth.
**Did you know?**
Unlike [Postman](https://www.postman.com/), which focuses on API testing, the Integration Designer automates workflows between systems. With drag-and-drop ease, it handles REST API connections, real-time processes, and error management, making integrations seamless and scalable.
For more details, check out this section
***
### AI Agents
FlowX AI Agents bring powerful automation and insight capabilities by harnessing a flexible, LLM-agnostic core, tailored to optimize your business processes and interactions. Built on a robust AI architecture, FlowX leverages interconnected language models adaptable across deployment options, from open-source models to private LLMs, ensuring secure, on-premise functionality that can integrate with any public LLM providers.
Stay tuned for more.
***
### Localization and Internationalization
We are introducing robust localization and internationalization features to enhance global usability and adaptability. Key updates include:
Enhanced formatting options for dates, times, numbers, and currencies with support for various international standards including short, medium, long, full, and custom formats.
Support for currency formatting with options to display values using ISO codes or symbols, adapting to user-selected locales and regional preferences.
Comprehensive settings for pluralization, capitalization, alignment, and sorting that adapt to regional requirements, helping cater to a diverse global user base.
New options in the UI Designer to override general settings for text, messages, links, and form elements based on locale and region.
Static and dynamically generated legal documents can now be customized based on regional and locale settings, improving compliance and communication with local audiences.
For more details, check out this section
***
### Data model 2.0
In this release, we've introduced Data Model 2.0, a major upgrade designed to simplify and enhance data handling. Key improvements include the introduction of reusable objects, a visual representation of complex data structures, and dynamic data binding, all aimed at creating a more reliable and intuitive experience. The new model ensures references are automatically updated when changes are made, streamlining data management across the platform.
**Highlights**:
* **New Root Element**: Provides a structural basis without impacting business logic, ensuring a clear and organized data structure.
* **Enhanced Data Binding**: Expanded to more areas, with dynamic updates based on changes in the data model.
* **Localization**: Added handling mechanism for locale-specific formatting, ensuring accurate data representation.
For more details, check out this section
***
### Task management 2.0
We've enhanced Task Management capabilities, making it easier to create, track, and manage tasks efficiently. The updated Task Management features include customizable views and advanced filtering and sorting options for task data. Additionally, users can now implement both low-code and full-code solutions for a tailored Task Management experience, ensuring maximum flexibility for different business needs.

For more details, check out this section
***
### UI Designer
#### Grid layout
We are excited to introduce the Grid Layout feature in this release, enhancing the flexibility and usability of the UI Designer for creating structured and responsive layouts. With the new Grid Layout, users can organize form elements, tables, and other components using a multi-column and row system, allowing for more complex, bidirectional designs compared to the previous flex-based layout.

***
#### Table
In this release, we've introduced a new Table component, allowing for more structured data display with customizable columns, pagination options, and dynamic styling features. The table supports resizable columns, flexible layouts, and integrates seamlessly with our theming settings for a consistent look across the application.

For more details, check out this section
***
#### FlowX.AI UI Designer new navigator
We are thrilled to introduce the new and improved **UI Designer Navigator**, a major update designed to streamline your UI design process.
The UI layer panel has been redesigned for a more intuitive experience, making it easier to manage and navigate through your design elements.
Dragging and dropping components in the preview is now smoother and more precise, allowing for faster and easier creation of UIs.
You can now change the root component from a form group to a container or vice versa, offering greater flexibility when copying nodes or resolving configuration problems.
It is now simpler to identify where you are placing a component within the hierarchy, thanks to the enhanced drag/reorder functionality in the right panel.
***
### Autocomputed data to send
In previous platform versions, when creating your UI screens and working with data, you had to ensure that all the data stored in your process keys was saved in the process instance. This required adding an extra parameter called "Data to send" to the "Save Data" node action.
**Older versions** vs **v4.5**:
Now, with the autocompute feature, this step is no longer necessary, as the data is automatically saved and sent on your process instance.
You no longer need to add "Save Data" node actions, but make sure to include "Forms to Validate" on the UI Actions. This helps ensure that data is submitted correctly and automatically activates any added validators where they exist.

However, you still have the option to customize which keys are included or excluded as needed.

***
### Scripting UX improvements
We're excited to announce significant improvements to our scripting UX. These enhancements focus on upgrading the code editors and introducing an advanced autocomplete feature. Configurators, both experienced and novice, will benefit from better visual feedback, support for interpolation syntax, and integrated help and examples.
The updates aim to streamline the configuration process, reduce errors, and make testing and troubleshooting more efficient.
#### Autocomplete based on data model
Autocomplete for attributes is now available, improving configuration efficiency by offering tailored suggestions based on data model attributes. These enhancements apply to various fields and editors, including JSON, code, and JavaScript editors, as well as input fields across different node configurations, UI components, and business rules.
#### New test business rule editor
#### New hide/disabled expressions editor

***
### SDKs
With the 4.5.0 release, we're excited to announce the launch of the FlowX React SDK! This new SDK empowers developers to seamlessly integrate FlowX.AI capabilities into React applications, making it easier than ever to build highly interactive, responsive, and dynamic user experiences.
To get started, simply install the FlowX React SDK via npm and check our documentation for examples and best practices!
***
## **Changes** 🔧
* **WEB SDK**: Angular update (v17).
## Additional information
For deployment guidelines, refer to:
# Deployment guidelines v4.5.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.1-november-2024/deployment-guidelines-v4.5.1
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
It is not possible to import old process definitions from versions earlier than v4.5.0

## Component versions
| Component | 4.5.1 | 4.5.0 | 4.1.5 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------------------- | ---------- | ------ | -------- | -------- | -------- | -------- | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **7.4.1** | 7.3.5 | 6.1.7 | 6.1.6 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **6.2.2** | 6.1.11 | 5.1.7 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.18.0** | 5.9.8 | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | **5.18.0** | 5.9.8 | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | **5.18.0** | 5.9.8 | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | **5.18.0** | 5.9.8 | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.18.0** | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.18.0** | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.18.0** | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.18.0** | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.18.0** | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **4.1.10** | 4.1.6 | 3.0.3 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | 4.0.4 | 4.0.4 | 3.0.2 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | 4.0.4 | 4.0.4 | 3.0.3 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | 5.0.4 | 5.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | 5.0.4 | 5.0.4 | 4.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 4.1.3 | 4.1.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | **6.0.5** | 6.0.1 | 5.0.5 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | 3.1.2 | 3.1.2 | 2.0.5 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | 5.0.3 | 5.0.3 | 4.0.5 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | 3.0.3 | 3.0.3 | 2.0.3 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **1.4.3** | 1.3.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **application-manager** | **1.4.6** | 1.3.7 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **data-sync** | **1.3.6** | 1.3.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **iOS renderer** | 4.0.2 | 4.0.2 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 4.0.0 | 4.0.0 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
Note: The same container image and Helm chart are used for both **Application Manager** and **Runtime Manager**.
## AI Agents
| Component | 4.5.1 | 4.5.0 | 4.1.5 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | --------- | ----- | ----- | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.0.6** | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.0.2** | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.2.2** | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.0.4** | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.0.7** | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.5.1 | Keycloak | 22.x |
| 4.5.1 | Kafka | 3.2.x |
| 4.5.1 | PostgreSQL | 16.2.x |
| 4.5.1 | MongoDB | 7.0.x |
| 4.5.1 | Redis | 7.2.x |
| 4.5.1 | Elasticsearch | 7.17.x |
| 4.5.1 | OracleDB | 19.23.0.0.0 |
| 4.5.1 | Angular (Web SDK) | 17.x |
| 4.5.1 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
## Configuration changes
In the 4.5.1 release, a new configuration option has been added to the Integration Designer for enhanced Kafka topic management.
* **New Configuration**: `FLOWX_WORKFLOW_CREATETOPICS`
* **When set to true**: In development environments, where Kafka topics may need to be created automatically, this configuration can be enabled (flowx.workflow\.createTopics: true). This allows for the automatic creation of "in" and "out" topics when workflows are created, eliminating the need to wait for topic creation at runtime.
* **Default setting (false)**: In production or controlled environments, where automated topic creation is not desired, this setting remains false to prevent unintended Kafka topic creation.
This update aims to streamline the development process by enabling faster setup of workflows with automatic Kafka topic creation in designated environments.
# Deployment changes for v.4.5.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.1-november-2024/migrating-from-v4.1.x-to-v4.5.1/migrating-from-v4.1.x
This document outlines the configuration and infrastructure changes introduced from v4.1.x to v4.5.1 for deploying the FlowX.AI platform.
## 4.5.0 changes
### CMS Setup
#### MongoDB configuration
In version 4.5.0, the CMS setup includes a more comprehensive MongoDB configuration, especially for runtime data handling:
* **Runtime MongoDB Instance**: A dedicated MongoDB instance for managing runtime data.
* **New Environment Variables**:
* `SPRING_DATA_MONGODB_RUNTIME_ENABLED`: Enables runtime MongoDB usage. Default is `true`.
* `RUNTIME_DB_USERNAME`: Username for runtime MongoDB access.
* `SPRING_DATA_MONGODB_RUNTIME_URI`: Connection URI for the runtime MongoDB instance.
* `SPRING_DATA_MONGODB_STORAGE`: Specifies storage type for Azure environments (`mongodb` or `cosmosdb`). Default is `mongodb`.
* **Transaction Settings for Mongock Library**:
* `MONGOCK_TRANSACTIONENABLED`: Controls MongoDB transaction support with Mongock, defaulting to `false` due to compatibility concerns with MongoDB 5.
***
### Admin setup
#### MongoDB configuration
Version 4.5.0 introduces a new MongoDB setup in the Admin service for managing data model information:
* **New MongoDB Data Model Configuration**:
* **Environment Variables**:
* `SPRING_DATA_MONGODB_URI`: URI for connecting to the MongoDB data model instance.
* `DB_USERNAME`: Set to `data-model` for data model access.
* `SPRING_DATA_MONGODB_STORAGE`: Specifies storage type for Azure environments (`mongodb` or `cosmosdb`).
***
### Engine setup
#### MongoDB configuration
The Engine configuration now includes additional setup for a runtime MongoDB instance to manage runtime builds:
* **Runtime MongoDB for Engine**:
* **New Environment Variables**:
* `SPRING_DATA_MONGODB_RUNTIME_ENABLED`: Enables runtime MongoDB access. Default is `true`.
* `SPRING_DATA_MONGODB_RUNTIME_URI`: URI for connecting to the runtime MongoDB.
* `DB_USERNAME`: Set to `app-runtime` for runtime data access.
***
## 4.5.1 changes
In the 4.5.1 release, a new configuration option has been added to the Integration Designer for enhanced Kafka topic management.
* **New Configuration**: `FLOWX_WORKFLOW_CREATETOPICS`
* **When set to true**: In development environments, where Kafka topics may need to be created automatically, this configuration can be enabled (flowx.workflow\.createTopics: true). This allows for the automatic creation of "in" and "out" topics when workflows are created, eliminating the need to wait for topic creation at runtime.
* **Default setting (false)**: In production or controlled environments, where automated topic creation is not desired, this setting remains false to prevent unintended Kafka topic creation.
This update aims to streamline the development process by enabling faster setup of workflows with automatic Kafka topic creation in designated environments.
# Configuration and migration guide
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.1-november-2024/migrating-from-v4.1.x-to-v4.5.1/process-configuration
This guide outlines changes in process and UI configuration from v4.1.x to 4.5.1 version.
## Applications (v4.5.0)
The **Applications** feature in FlowX AI v4.5.0 is a new structure that organizes all dependencies and resources required for a project into a single deployable view. This enhancement simplifies configuration, deployment, and maintenance by layering applications on top of processes, offering a centralized workspace that encapsulates everything needed for project execution.

Several key configuration changes impact how resources and dependencies are managed, deployed, and maintained. This guide provides a breakdown of the configuration changes, automatic migration processes, and manual steps required to ensure a smooth transition.

***
### Consolidated resource management
* **Change**: All resources that were previously managed individually within processes are now grouped within Applications. This includes content management elements, integrations, themes, task configurations, and permissions.
* **Impact**: Resources like **enumerations**, **substitution tags**, and **generic parameters** are now managed within Applications, allowing centralized configuration and version control.
* **Migration**: All process-related resources will be migrated automatically into a **default application**, ensuring continuity of functionality in the new framework. After migration, you should verify that all critical resources are correctly configured within this default application.
### Enhanced version control and dependency management
* **Impact**: Applications support **dependency management** through **Libraries** and enforce version-controlled resources. Setting up an application now requires careful dependency management and versioning to prevent unintended updates.
* **Benefit**: Allows for modular, reusable resources and stable deployments across applications, reducing resource duplication and enhancing project compatibility.
### Migration checklist
To ensure a smooth transition, complete the following steps:
1. **Verify Process Migration**: Confirm that all existing process definitions have been correctly migrated into the default application.
2. **Set Configuration Parameter Overrides**: Post-deployment, adjust environment-specific Configuration Parameters in the default application.
3. **Update Task Views**: Replace the global "All Tasks" feature with application-specific Views in each application.
4. **Transfer Processes and Dependencies Manually**: If moving a process from the default application to another application, manually transfer associated resources and re-check dependencies.
***
## Generic parameters migration (v4.5.0)
* **Overview**: In version 4.5.0, global generic parameters (from versions prior to 4.5.0) have been migrated to application-level as Configuration Parameters, consolidating parameter management within specific applications for improved organization and control.

* **Migration**: All generic parameters will be automatically migrated to Configuration Parameters section under a default application.
* **Business Rules Unaffected**: There is no impact on existing business rules; they will continue to function as before without requiring updates.
* **Process Export Considerations**: If you export a process from one application to another, ensure that you also transfer the associated configuration parameters. This step is crucial to maintain process functionality and consistency across applications.
* **Important Note**: Only values of generic parameters associated with the specific environment, or where `env = null` (displayed as "all" in the interface in versions prior to 4.5.0), will be migrated. You must ensure that you have correctly set the values for generic parameters, paying attention to environment values (which are case-sensitive), and export these generic parameters before migration to avoid any potential data loss.

* **Post-Deployment Step**: After the first deployment to an upper environment, you will need to create configuration parameter overrides with the specific values required for that environment. This ensures that all environment-specific configurations are accurately maintained and applied across different deployment stages.
To set configuration parameter overrides, navigate to **Your App -> Runtime -> Configuration Parameters Overrides**.

***
## Task management (v4.5.0)
* "All Tasks" as a View: The global "All Tasks" feature is no longer standalone and will now function as a View in an application.
**v4.5.0:**

**v4.1.x:**

***
## General (v4.5.0)
Before starting the migration, complete the following steps:
1. **Merge All Feature Branches**: Ensure all feature branches for processes are merged into the latest version on the main branch.
2. **Remove Unnecessary Resources**: Delete any test processes or resources that are no longer needed.
3. **Export Generic Parameters**: Export generic parameters as a backup to ensure they migrate accurately to application-specific Configuration Parameters.
### Migration steps
During migration, resources will be transferred into a single **default application** with one committed version.
* **Process Definitions**: Only the last committed process version on the main branch will migrate. If no committed version exists, the latest WIP version will be used.
* **Enumerations, Substitution Tags, and Task Manager**: These resources will be migrated to the default application.
* **Generic Parameters**: Migrated as **Configuration Parameters** within the default application, covering only values where `env = null` or that match the platform’s environment setting.
* **Languages**: Language settings (available languages and default) will be moved to application settings. Languages remain globally available.
### Resources excluded from migration
Some resources will remain globally available or are deprecated:
* **Themes**
* **Fonts**
* **Global Media Library** (for media used in themes)
* **Source Systems**
* **Notifications and Document Templates**
* **Out of Office (Task Manager)**
* **Integration Management** (not included in v4.5)
* **Content Models** (deprecated)
***
## Datepicker Migration (v4.5.0)
In version 4.5, significant updates have been introduced to the **Datepicker** component to ensure compatibility with ISO 8601 date formats and enhanced handling of date attributes within the **Data Model**. This migration affects both newly created and existing processes.
### Key changes
1. **Introduction of Date Types**:
* **Standard Date**: Stores and displays date values in ISO 8601 format, respecting the application's locale and timezone settings.
* **Legacy Date**: Retains previous formatting to ensure compatibility with existing business rules and processes.
2. **Properties Updates**:
* The **Datepicker** now supports dependent properties such as `minDate`, `maxDate`, and `defaultValue`. These properties:
* Follow the formatting rules of the selected date type (Standard or Legacy).
* Ensure that dynamic date values pulled from the **Data Model** are displayed correctly.
3. **Backward Compatibility**:
* **Existing Processes**: All migrated processes with legacy Datepicker components will default to `Legacy Date` type. This preserves the original formatting and ensures no disruption in business rules or workflows.
* **New Processes**: Newly created processes will default to `Standard Date` type, saving values in ISO 8601 format.
***
### Migration process
1. **Legacy Datepickers**:
* Automatically flagged during migration.
* Continue to work with existing business rules.
* Require manual review for future updates to transition to the **Standard Date** format.
2. **Business Rules Updates**:
* Legacy Datepickers may require manual adjustments if associated business rules reference hardcoded date formats.
* Ensure that any dynamic dates used in business rules are compatible with the ISO 8601 standard.
3. **Standard Datepickers**:
* All new Datepicker components save date values directly in ISO 8601 format.
* Fully compatible with updated **Data Model** attributes, allowing seamless integration with external systems, adaptors, and reporting plugins.
### Considerations
* **Default Values**:
* For **Standard Datepickers**, the `defaultValue` must be in ISO 8601 format.
* Dynamic defaults can also be set using **Data Model** attributes or process data.
* **Data Model Integration**:
* All external and internal date attributes, including those used by adaptors or business rules, must be explicitly defined in the **Data Model**.
* **UI Designer Overrides**:
* Overrides can be applied to display dates differently for specific UI elements, ensuring flexibility for localized formatting.
### Recommendations for transition
* **Existing Processes**:
* Leave Datepicker components in `Legacy` mode unless business rules and workflows are updated to support ISO 8601.
* **New Processes**:
* Use `Standard Date` to ensure future compatibility and alignment with ISO 8601 formatting.
* **Documentation**:
* Review and update all timer expressions, adaptors, and external data feeds to use ISO 8601 format for consistency.
***
## Post-migration recommendations (v4.5.0)
For complex projects with multiple use cases, **do not use the default application for ongoing development or production builds**. Instead:
1. **Create Branches within the Default Application**: Organize and streamline resources by creating branches. This enables a lightweight build focused on production.
2. **Split the Default Application into Smaller Applications**: Use the import/export feature to separate the default application into individual applications by use case.
* **Note**: When importing processes into a new application, resource references may need to be manually reconfigured.
***
# Renderer SDKs
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.1-november-2024/migrating-from-v4.1.x-to-v4.5.1/renderers
This guide assists in migrating from FlowX v4.1.x to v4.5.1.
## Android SDK migration guide (v4.5.0)
### Initialization config changes
A new configuration parameter, named `locale` was added in order to improve formatting the dates, numbers and currencies.
When the SDK initialization happens through the `FlowxSdkApi.getInstance().init(...)` method, the argument has to be set inside the `config: SdkConfig` parameter value:
```kotlin theme={"system"}
FlowxSdkApi.getInstance().init(
...
config = SdkConfig(
baseUrl = "URL to FlowX backend",
imageBaseUrl = "URL to FlowX CMS Media Library",
enginePath = "some_path",
language = "en",
locale = Locale.getDefault(), // e.g. Locale("en", "US"), Locale("fr", "CA")
validators = mapOf("exact_25_in_length" to { it.length == 25 }),
enableLog = false,
),
...
)
```
### Changes when starting a Flowx process
Two new parameters were added:
| Name | Description | Type | Requirement |
| ----------------- | -------------------------------------------------------------------------------------- | --------------- | -------------------------------- |
| `applicationUuid` | The uuid string of the application containing the process to be started | `String` | Mandatory |
| `onProcessEnded` | Callback function where you can do additional processing when the started process ends | `(() -> Unit)?` | Optional. It defaults to `null`. |
```kotlin theme={"system"}
fun startProcess(
applicationUuid: String,
processName: String,
params: JSONObject = JSONObject(),
isModal: Boolean = false,
onProcessEnded: (() -> Unit)? = null,
closeModalFunc: ((processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
### Changes when resuming a Flowx process
One new parameter was added:
| Name | Description | Type | Requirement |
| ---------------- | ---------------------------------------------------------------------------------------- | --------------- | -------------------------------- |
| `onProcessEnded` | Callback function where you can do additional processing when the continued process ends | `(() -> Unit)?` | Optional. It defaults to `null`. |
```kotlin theme={"system"}
fun continueProcess(
processUuid: String,
isModal: Boolean = false,
onProcessEnded: (() -> Unit)? = null,
closeModalFunc: ((processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
### Public API changes
The `changeLanguage` method has been updated and renamed to `changeLocaleSettings`, in order to accommodate the newly added `locale` config parameter:
```kotlin theme={"system"}
fun changeLocaleSettings(locale: Locale, language: String)
```
### Library dependencies updates
* **[Kotlin](https://kotlinlang.org/)**: 1.9.22 **↗** **1.9.24**
* **[Compose BOM](https://developer.android.com/jetpack/compose/bom/bom-mapping)**: 2024.02.00 **↗** **2024.06.00**
* **[Compose Compiler](https://developer.android.com/jetpack/androidx/releases/compose-compiler)**: 1.5.9 **↗** **1.5.14**
* **[Gson](https://github.com/google/gson)**: 2.10.1 **↗** **2.11.0**
***
## iOS SDK migration guide (v4.5.0)
### Initialization config changes
A new configuration parameter, named `locale` was added in order to improve formatting the dates, numbers and currencies.
The locale needs to be set on the `FXConfig.sharedInstance.configure` method
```swift theme={"system"}
FXConfig.sharedInstance.configure { (config) in
config.locale = "en-US"
...
}
```
### Changes when starting a process
Two new parameters were added on the 3 available start process methods:
| Name | Description | Type | Requirement |
| ----------------- | -------------------------------------------------------------------------------------- | --------------- | ------------------------------- |
| `applicationUuid` | The uuid string of the application containing the process to be started | `String` | Mandatory |
| `onProcessEnded` | Callback function where you can do additional processing when the started process ends | `(() -> Void)?` | Optional. It defaults to `nil`. |
```swift theme={"system"}
func startProcess(applicationUuid: String,
name: String,
params: [String : Any]?,
isModal: Bool = false,
showLoader: Bool = false,
completion: ((UIViewController?) -> Void)?,
onProcessEnded: (() -> Void)? = nil)
```
### Changes when resuming a Flowx process
One new parameter was added on the 3 available continue process methods:
| Name | Description | Type | Requirement |
| ---------------- | -------------------------------------------------------------------------------------- | --------------- | ------------------------------- |
| `onProcessEnded` | Callback function where you can do additional processing when the started process ends | `(() -> Void)?` | Optional. It defaults to `nil`. |
```swift theme={"system"}
func continueExistingProcess(uuid: String,
name: String,
isModal: Bool = false,
completion: ((UIViewController?) -> Void)? = nil,
onProcessEnded: (() -> Void)? = nil)
```
### Public API changes
The `changeLanguage` method has been updated and renamed to `changeLocaleSettings`, in order to accommodate the newly added `locale` config parameter:
```swift theme={"system"}
func changeLocaleSettings(locale: String?, language: String?)
```
***
## Angular SDK migration guide (v4.5.0)
### Renderer SDK component usage
In the Angular SDK, the `` component has two new parameters have been introduced: appInfo and locale. These additions help support localization and application-specific configurations.
* **appInfo**: Object containing an appId key, which identifies the application.
* **locale**: Provides region-specific settings for localization.
Add the definitions for these properties in the class file of the component that uses the process renderer component:
```typescript theme={"system"}
appInfo = { appId: 'your-app-id' },
locale = 'en-US',
```
Use these parameters in the template as inputs for the `` component:
```html theme={"system"}
```
### Icon module update
The `withExtraIconSet` method has been replaced with `provideExtraIconSet`, which should now be used in the providers array.
```typescript theme={"system"}
@NgModule({
imports: [
IconModule, // Import the IconModule
],
providers: [
// Use provideExtraIconSet to add your custom icon set
provideExtraIconSet({
customIcon1: 'path/to/custom-icon1.svg',
customIcon2: 'path/to/custom-icon2.svg',
// Add more icons as needed
})
]
})
export class AppModule {}
```
### Additional libraries
The following npm packages are now essential for handling date and input formatting:
```npm theme={"system"}
npm i date-fns inputmask
```
* date-fns
* inputmask
# FlowX.AI 4.5.1 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.1-november-2024/v4.5.1-november-2024
FlowX.AI 4.5.1 brings essential bug fixes and user experience improvements.
**Release Date:** 8th November 2024
## **What's new?** 🆕
The FlowX.AI 4.5.1 release brings several exciting updates and refinements, building on previous improvements and adding enhanced functionality to improve user experience and integration capabilities.
### Table
#### Theme Admin for Table
The new form in the Theme Admin provides an intuitive way to manage component styles directly within the UI, specifically enhancing control over table appearance. You can set a variety of visual properties for tables, such as padding, background colors, text styles, and border options, allowing precise customization without the need for extensive coding.
* **Common Properties**: Control foundational styling attributes like padding (both vertical and horizontal), spacing, radius, and background color.

* **Table Header Customization**: Adjust properties specific to table headers, including vertical padding, background color, title text style, and title color for a clean and professional look.

#### Preview Theme in UI Designer
You can now preview theme changes in real time within the UI Designer, including previews of the table component with the applied theme settings. This enhancement allows designers to visualize exactly how the configured theme will appear across various components, streamlining the review and approval process for a consistent and polished final look.

### Application permissions updates
**Permissions Enhancements**: Extended and updated user permissions provide a more flexible and secure way to manage access across different roles and functionalities. With this update, permissions are easier to configure, supporting both new setups and revised existing structures.
For more details, check out this section
### Integration Designer setup
* **New Configuration for Integration Designer**: A new configuration for handling integration topics is now available in the Integration Designer, allowing more granular control over integration flows and topic management.
Check the deployment guidelines for more details:
## **Changes** 🔧
* **UX Refinements**: Multiple user experience improvements, addressing minor design and workflow tweaks, make the platform more consistent and user-friendly.
## Additional information
For deployment guidelines, refer to:
# Deployment guidelines v4.5.2
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.2-november-2024/deployment-guidelines-v4.5.2
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
It is not possible to import old process definitions from versions earlier than v4.5.0

## Component versions
| Component | 4.5.2 | 4.5.1 | 4.5.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------------------- | ---------- | ------ | ------ | -------- | -------- | -------- | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | 7.4.1 | 7.4.1 | 7.3.5 | 6.1.6 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **6.2.5** | 6.2.2 | 6.1.11 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.21.4** | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | **5.21.4** | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | **5.21.4** | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | **5.21.4** | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.21.4** | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.21.4** | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.21.4** | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.21.4** | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.21.4** | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **4.1.15** | 4.1.10 | 4.1.6 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **5.1.0** | 5.0.4 | 5.0.4 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **5.1.0** | 5.0.4 | 5.0.4 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 4.1.3 | 4.1.3 | 4.1.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | **6.0.8** | 6.0.5 | 6.0.1 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | 3.1.2 | 3.1.2 | 3.1.2 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | 5.0.3 | 5.0.3 | 5.0.3 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | 3.0.3 | 3.0.3 | 3.0.3 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **1.5.0** | 1.4.3 | 1.3.9 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **1.5.6** | 1.4.6 | 1.3.7 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **1.4.0** | 1.3.6 | 1.3.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | 4.0.2 | 4.0.2 | 4.0.2 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 4.0.0 | 4.0.0 | 4.0.0 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
Note: The same container image and Helm chart are used for **Application Manager** and **Runtime Manager**.
## AI Agents
| Component | 4.5.2 | 4.5.1 | 4.5.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ---------- | ----- | ----- | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.3.2** | 1.0.6 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.0.4** | 1.0.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.3.5** | 1.2.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.0.12** | 1.0.4 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.0.9** | 1.0.7 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.5.2 | Keycloak | 22.x |
| 4.5.2 | Kafka | 3.2.x |
| 4.5.2 | PostgreSQL | 16.2.x |
| 4.5.2 | MongoDB | 7.0.x |
| 4.5.2 | Redis | 7.2.x |
| 4.5.2 | Elasticsearch | 7.17.x |
| 4.5.2 | OracleDB | 19.23.0.0.0 |
| 4.5.2 | Angular (Web SDK) | 17.x |
| 4.5.2 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
## Documents and notifications templates setup guides
### Runtime database integration
Both Notifications and Documents services now seamlessly connect to the runtime database.
Add the following environment variables:
* `SPRING_DATA_MONGODB_RUNTIME_ENABLED` - Enables Runtime MongoDB usage (default value: `true`)
* `RUNTIME_DB_USERNAME`: `app-runtime`
* `SPRING_DATA_MONGODB_RUNTIME_URI` - URI for connecting to the Runtime MongoDB instance - `app-runtime`
* `SPRING_DATA_MONGODB_STORAGE` - Specifies the storage type used for the Runtime MongoDB instance (Azure environments only)
* **Possible Values:** `mongodb`, `cosmosdb`
* **Default Value:** `mongodb`
### Data-sync service enhancements
Two new migrations added to the data-sync service.
Requires connectivity with Notifications and Documents databases for proper operation:
* `NOTIFICATIONPLUGIN_MONGO_USERNAME`: `mongodb-username` -> Represents the username for authenticating to the MongoDB database used by the Notifications Plugin.
* `NOTIFICATIONPLUGIN_MONGO_PASSWORD`: `mongodb-password` -> Represents the password associated with the `NOTIFICATIONPLUGIN_MONGO_USERNAME` for database access.
* `DOCUMENTPLUGIN_MONGO_USERNAME`: `mongodb-username` -> Represents the username for authenticating to the MongoDB database used by the Documents Plugin.
* `DOCUMENTPLUGIN_MONGO_PASSWORD`: `mongodb-password` -> Represents the password associated with the `DOCUMENTPLUGIN_MONGO_USERNAME` for database access.
* `FLOWX_DATASOURCE_DOCUMENTPLUGIN_URI`: Specifies the connection details for the MongoDB database used by the Documents Plugin.
* `FLOWX_DATASOURCE_NOTIFICATIONPLUGIN_URI`: Specifies the connection details for the MongoDB database used by the Notifications Plugin.
### Update default application
If you have already updated to **4.5.0** or **4.5.1**, ensure that you create at least one new version of the `default_application`(where all the process definitions from previous versions are migrated). This step verifies that your default application remains up to date with the latest changes:
1. Open the `default_application` in the UI.
2. Check for a **new version** (either draft or committed).
3. Ensure that there is a new version compared to the **committed version** that was automatically created during the migration from Release 4.5.0.
4. Save or commit a new version if necessary.
This step ensures your application configurations are aligned with the latest migration requirements.
# FlowX.AI 4.5.2 Release
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.2-november-2024/v4.5.2-november-2024
FlowX.AI 4.5.2 introduces table updates, performance improvements, enhanced plugin integrations, and essential bug fixes.
## **What's new?** 🆕
The FlowX.AI 4.5.2 release brings exciting updates focusing on performance, integration enhancements, and improved rendering capabilities to provide a more seamless and robust experience.
### Rendering updates
#### Table enhancements
The table component has been enhanced with several new customization options to provide greater control over its appearance and functionality:
* **Min-Max Cell Width**: Define precise minimum and maximum widths for table cells to ensure optimal layout and readability.
* **Header Text Alignment**: Customize the alignment of header text for better visual consistency across tables.

* **Padding and Spacing**: Fine-tune padding and spacing properties for both rows and columns to improve table design and usability.

* **"No Data" Message Customization**: Introduced the ability to set a custom system message (through `sys_table_empty` system substitution tag) for tables when no data is available, offering a more user-friendly experience.


***
### Performance improvements
Added significant optimizations to improve runtime efficiency and scalability:
* **Caching for Runtime Committed Builds**: Reduced runtime overhead with enhanced caching mechanisms, speeding up build deployments.
* **MongoDB Indexing**: Introduced indices for the MongoDB runtime, significantly improving database query performance.
* **Improved Data-Sync Support**: Enhanced data-sync service to support minor version releases, ensuring smoother version transitions and minimal downtime during upgrades.
***
### Plugin updates
#### Notifications & Documents plugins
Notifications and Documents plugins have been integrated as **application resources**.
**Deployment changes**: Added **Runtime Database Integration** and **Data-Sync Service Enhancements**
See the [**Deployment guidelines**](deployment-guidelines-v4.5.2#documents-and-notifications-templates-setup-guides) for more details.
***
## Bug fixes 🐞
* Addressed multiple rendering and core engine bugs to enhance system stability and user experience.
## **Changes** 🔧
* **UX Refinements**: Multiple user experience improvements, addressing minor design and workflow tweaks, make the platform more consistent and user-friendly.
## Additional information
For deployment guidelines, refer to:
# Deployment guidelines v4.5.3
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.3-november-2024/deployment-guidelines-v4.5.3
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
It is not possible to import old process definitions from versions earlier than v4.5.0

## Component versions
| Component | 4.5.3 | 4.5.1 | 4.5.0 | 4.1.5 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------------------- | ---------- | ------ | ------ | -------- | -------- | -------- | -------- | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **7.4.3** | 7.4.1 | 7.3.5 | 6.1.7 | 6.1.6 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **6.2.7** | 6.2.2 | 6.1.11 | 5.1.7 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.22.9** | 5.18.0 | 5.9.8 | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | **5.22.9** | 5.18.0 | 5.9.8 | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | **5.22.9** | 5.18.0 | 5.9.8 | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | **5.22.9** | 5.18.0 | 5.9.8 | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.22.9** | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.22.9** | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.22.9** | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.22.9** | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.22.9** | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **4.2.1** | 4.1.10 | 4.1.6 | 3.0.3 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.2 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.3 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **5.1.1** | 5.0.4 | 5.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **5.1.1** | 5.0.4 | 5.0.4 | 4.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 4.1.3 | 4.1.3 | 4.1.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | **6.0.9** | 6.0.5 | 6.0.1 | 5.0.5 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | 3.1.2 | 3.1.2 | 3.1.2 | 2.0.5 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | 5.0.3 | 5.0.3 | 5.0.3 | 4.0.5 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | 3.0.3 | 3.0.3 | 3.0.3 | 2.0.3 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **1.6.0** | 1.4.3 | 1.3.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **application-manager** | **1.7.1** | 1.4.6 | 1.3.7 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **data-sync** | **1.5.0** | 1.3.6 | 1.3.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **iOS renderer** | 4.0.2 | 4.0.2 | 4.0.2 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 4.0.0 | 4.0.0 | 4.0.0 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
Note: The same container image and Helm chart are used for **Application Manager** and **Runtime Manager**.
## AI Agents
| Component | 4.5.3 | 4.5.1 | 4.5.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ---------- | ----- | ----- | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.3.4** | 1.0.6 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.0.5** | 1.0.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.3.6** | 1.2.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.0.20** | 1.0.4 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.0.10** | 1.0.7 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.5.3 | Keycloak | 22.x |
| 4.5.3 | Kafka | 3.2.x |
| 4.5.3 | PostgreSQL | 16.2.x |
| 4.5.3 | MongoDB | 7.0.x |
| 4.5.3 | Redis | 7.2.x |
| 4.5.3 | Elasticsearch | 7.17.x |
| 4.5.3 | OracleDB | 19.23.0.0.0 |
| 4.5.3 | Angular (Web SDK) | 17.x |
| 4.5.3 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
**Update default application**: If you have already updated to **v4.5.0** or **v4.5.1**, ensure that you create at least one new version of the default\_application(where all the process definitions from previous versions are migrated). This step verifies that your default application remains up to date with the latest changes:
1. Open the default\_application in the UI.
2. Check for a new version (either draft or committed).
3. Ensure that there is a new version compared to the committed version that was automatically created during the migration from Release 4.5.0.
4. Save or commit a new version if necessary.
This step ensures your application configurations are aligned with the latest migration requirements.
## New environment variables
### Runtime database integration
Both Notifications and Documents services now seamlessly connect to the runtime database.
Add the following environment variables:
* `SPRING_DATA_MONGODB_RUNTIME_ENABLED` - Enables Runtime MongoDB usage (default value: `true`)
* `RUNTIME_DB_USERNAME`: `app-runtime`
* `SPRING_DATA_MONGODB_RUNTIME_URI` - URI for connecting to the Runtime MongoDB instance - `app-runtime`
* `SPRING_DATA_MONGODB_STORAGE` - Specifies the storage type used for the Runtime MongoDB instance (Azure environments only)
* **Possible Values:** `mongodb`, `cosmosdb`
* **Default Value:** `mongodb`
### Data-sync service enhancements
Two new migrations added to the data-sync service.
Requires connectivity with Notifications and Documents databases for proper operation:
* `NOTIFICATIONPLUGIN_MONGO_USERNAME`: `mongodb-username` -> Represents the username for authenticating to the MongoDB database used by the Notifications Plugin.
* `NOTIFICATIONPLUGIN_MONGO_PASSWORD`: `mongodb-password` -> Represents the password associated with the `NOTIFICATIONPLUGIN_MONGO_USERNAME` for database access.
* `DOCUMENTPLUGIN_MONGO_USERNAME`: `mongodb-username` -> Represents the username for authenticating to the MongoDB database used by the Documents Plugin.
* `DOCUMENTPLUGIN_MONGO_PASSWORD`: `mongodb-password` -> Represents the password associated with the `DOCUMENTPLUGIN_MONGO_USERNAME` for database access.
* `FLOWX_DATASOURCE_DOCUMENTPLUGIN_URI`: Specifies the connection details for the MongoDB database used by the Documents Plugin.
* `FLOWX_DATASOURCE_NOTIFICATIONPLUGIN_URI`: Specifies the connection details for the MongoDB database used by the Notifications Plugin.
# Migrating from older versions to v4.5.3
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.3-november-2024/migrating-from-v4.1.x-to-v4.5.3/migrating-from-v4.1.x
This document outlines the configuration and infrastructure changes introduced from v4.1.x to v4.5.3 for deploying the FlowX.AI platform.
## 4.5.0 changes
### CMS Setup
#### MongoDB configuration
In version 4.5.0, the CMS setup includes a more comprehensive MongoDB configuration, especially for runtime data handling:
* **Runtime MongoDB Instance**: A dedicated MongoDB instance for managing runtime data.
* **New Environment Variables**:
* `SPRING_DATA_MONGODB_RUNTIME_ENABLED`: Enables runtime MongoDB usage. Default is `true`.
* `RUNTIME_DB_USERNAME`: Username for runtime MongoDB access.
* `SPRING_DATA_MONGODB_RUNTIME_URI`: Connection URI for the runtime MongoDB instance.
* `SPRING_DATA_MONGODB_STORAGE`: Specifies storage type for Azure environments (`mongodb` or `cosmosdb`). Default is `mongodb`.
* **Transaction Settings for Mongock Library**:
* `MONGOCK_TRANSACTIONENABLED`: Controls MongoDB transaction support with Mongock, defaulting to `false` due to compatibility concerns with MongoDB 5.
***
### Admin setup
#### MongoDB configuration
Version 4.5.0 introduces a new MongoDB setup in the Admin service for managing data model information:
* **New MongoDB Data Model Configuration**:
* **Environment Variables**:
* `SPRING_DATA_MONGODB_URI`: URI for connecting to the MongoDB data model instance.
* `DB_USERNAME`: Set to `data-model` for data model access.
* `SPRING_DATA_MONGODB_STORAGE`: Specifies storage type for Azure environments (`mongodb` or `cosmosdb`).
***
### Engine setup
#### MongoDB configuration
The Engine configuration now includes additional setup for a runtime MongoDB instance to manage runtime builds:
* **Runtime MongoDB for Engine**:
* **New Environment Variables**:
* `SPRING_DATA_MONGODB_RUNTIME_ENABLED`: Enables runtime MongoDB access. Default is `true`.
* `SPRING_DATA_MONGODB_RUNTIME_URI`: URI for connecting to the runtime MongoDB.
* `DB_USERNAME`: Set to `app-runtime` for runtime data access.
***
## 4.5.1 changes
In the 4.5.1 release, a new configuration option has been added to the Integration Designer for enhanced Kafka topic management.
* **New Configuration**: `FLOWX_WORKFLOW_CREATETOPICS`
* **When set to true**: In development environments, where Kafka topics may need to be created automatically, this configuration can be enabled (flowx.workflow\.createTopics: true). This allows for the automatic creation of "in" and "out" topics when workflows are created, eliminating the need to wait for topic creation at runtime.
* **Default setting (false)**: In production or controlled environments, where automated topic creation is not desired, this setting remains false to prevent unintended Kafka topic creation.
This update aims to streamline the development process by enabling faster setup of workflows with automatic Kafka topic creation in designated environments.
### Update default application
If you have already updated to **4.5.0** or **4.5.1**, ensure that you create at least one new version of the `default_application`(where all the process definitions from previous versions are migrated). This step verifies that your default application remains up to date with the latest changes:
1. Open the `default_application` in the UI.
2. Check for a **new version** (either draft or committed).
3. Ensure that there is a new version compared to the **committed version** that was automatically created during the migration from Release 4.5.0.
4. Save or commit a new version if necessary.
This step ensures your application configurations are aligned with the latest migration requirements.
***
## 4.5.3 changes
### Update default application
If you have already updated to **4.5.0** or **4.5.3**, ensure that you create at least one new version of the `default_application`(where all the process definitions from previous versions are migrated). This step verifies that your default application remains up to date with the latest changes:
1. Open the `default_application` in the UI.
2. Check for a **new version** (either draft or committed).
3. Ensure that there is a new version compared to the **committed version** that was automatically created during the migration from Release 4.5.0.
4. Save or commit a new version if necessary.
This step ensures your application configurations are aligned with the latest migration requirements.
### Documents and notifications templates setup guides
#### Runtime database integration
Both Notifications and Documents services now seamlessly connect to the runtime database.
Add the following environment variables:
* `SPRING_DATA_MONGODB_RUNTIME_ENABLED` - Enables Runtime MongoDB usage (default value: `true`)
* `RUNTIME_DB_USERNAME`: `app-runtime`
* `SPRING_DATA_MONGODB_RUNTIME_URI` - URI for connecting to the Runtime MongoDB instance - `app-runtime`
* `SPRING_DATA_MONGODB_STORAGE` - Specifies the storage type used for the Runtime MongoDB instance (Azure environments only)
* **Possible Values:** `mongodb`, `cosmosdb`
* **Default Value:** `mongodb`
#### Data-sync service enhancements
Two new migrations added to the data-sync service.
Requires connectivity with Notifications and Documents databases for proper operation:
* `NOTIFICATIONPLUGIN_MONGO_USERNAME`: `mongodb-username` -> Represents the username for authenticating to the MongoDB database used by the Notifications Plugin.
* `NOTIFICATIONPLUGIN_MONGO_PASSWORD`: `mongodb-password` -> Represents the password associated with the `NOTIFICATIONPLUGIN_MONGO_USERNAME` for database access.
* `DOCUMENTPLUGIN_MONGO_USERNAME`: `mongodb-username` -> Represents the username for authenticating to the MongoDB database used by the Documents Plugin.
* `DOCUMENTPLUGIN_MONGO_PASSWORD`: `mongodb-password` -> Represents the password associated with the `DOCUMENTPLUGIN_MONGO_USERNAME` for database access.
* `FLOWX_DATASOURCE_DOCUMENTPLUGIN_URI`: Specifies the connection details for the MongoDB database used by the Documents Plugin.
* `FLOWX_DATASOURCE_NOTIFICATIONPLUGIN_URI`: Specifies the connection details for the MongoDB database used by the Notifications Plugin.
# Configuration and migration guide
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.3-november-2024/migrating-from-v4.1.x-to-v4.5.3/process-configuration
This guide outlines changes in process and UI configuration from v4.1.x to 4.5.1 version.
## Applications (v4.5.0)
The **Applications** feature in FlowX AI v4.5.0 is a new structure that organizes all dependencies and resources required for a project into a single deployable view. This enhancement simplifies configuration, deployment, and maintenance by layering applications on top of processes, offering a centralized workspace that encapsulates everything needed for project execution.

Several key configuration changes impact how resources and dependencies are managed, deployed, and maintained. This guide provides a breakdown of the configuration changes, automatic migration processes, and manual steps required to ensure a smooth transition.

***
### Consolidated resource management
* **Change**: All resources that were previously managed individually within processes are now grouped within Applications. This includes content management elements, integrations, themes, task configurations, and permissions.
* **Impact**: Resources like **enumerations**, **substitution tags**, and **generic parameters** are now managed within Applications, allowing centralized configuration and version control.
* **Migration**: All process-related resources will be migrated automatically into a **default application**, ensuring continuity of functionality in the new framework. After migration, you should verify that all critical resources are correctly configured within this default application.
### Enhanced version control and dependency management
* **Impact**: Applications support **dependency management** through **Libraries** and enforce version-controlled resources. Setting up an application now requires careful dependency management and versioning to prevent unintended updates.
* **Benefit**: Allows for modular, reusable resources and stable deployments across applications, reducing resource duplication and enhancing project compatibility.
### Migration checklist
To ensure a smooth transition, complete the following steps:
1. **Verify Process Migration**: Confirm that all existing process definitions have been correctly migrated into the default application.
2. **Set Configuration Parameter Overrides**: Post-deployment, adjust environment-specific Configuration Parameters in the default application.
3. **Update Task Views**: Replace the global "All Tasks" feature with application-specific Views in each application.
4. **Transfer Processes and Dependencies Manually**: If moving a process from the default application to another application, manually transfer associated resources and re-check dependencies.
***
## Generic parameters migration (v4.5.0)
* **Overview**: In version 4.5.0, global generic parameters (from versions prior to 4.5.0) have been migrated to application-level as Configuration Parameters, consolidating parameter management within specific applications for improved organization and control.

* **Migration**: All generic parameters will be automatically migrated to Configuration Parameters section under a default application.
* **Business Rules Unaffected**: There is no impact on existing business rules; they will continue to function as before without requiring updates.
* **Process Export Considerations**: If you export a process from one application to another, ensure that you also transfer the associated configuration parameters. This step is crucial to maintain process functionality and consistency across applications.
* **Important Note**: Only values of generic parameters associated with the specific environment, or where `env = null` (displayed as "all" in the interface in versions prior to 4.5.0), will be migrated. You must ensure that you have correctly set the values for generic parameters, paying attention to environment values (which are case-sensitive), and export these generic parameters before migration to avoid any potential data loss.

* **Post-Deployment Step**: After the first deployment to an upper environment, you will need to create configuration parameter overrides with the specific values required for that environment. This ensures that all environment-specific configurations are accurately maintained and applied across different deployment stages.
To set configuration parameter overrides, navigate to **Your App -> Runtime -> Configuration Parameters Overrides**.

***
## Task management (v4.5.0)
* "All Tasks" as a View: The global "All Tasks" feature is no longer standalone and will now function as a View in an application.
**v4.5.0:**

**v4.1.x:**

***
## General (v4.5.0)
Before starting the migration, complete the following steps:
1. **Merge All Feature Branches**: Ensure all feature branches for processes are merged into the latest version on the main branch.
2. **Remove Unnecessary Resources**: Delete any test processes or resources that are no longer needed.
3. **Export Generic Parameters**: Export generic parameters as a backup to ensure they migrate accurately to application-specific Configuration Parameters.
### Migration steps
During migration, resources will be transferred into a single **default application** with one committed version.
* **Process Definitions**: Only the last committed process version on the main branch will migrate. If no committed version exists, the latest WIP version will be used.
* **Enumerations, Substitution Tags, and Task Manager**: These resources will be migrated to the default application.
* **Generic Parameters**: Migrated as **Configuration Parameters** within the default application, covering only values where `env = null` or that match the platform’s environment setting.
* **Languages**: Language settings (available languages and default) will be moved to application settings. Languages remain globally available.
### Resources excluded from migration
Some resources will remain globally available or are deprecated:
* **Themes**
* **Fonts**
* **Global Media Library** (for media used in themes)
* **Source Systems**
* **Notifications and Document Templates**
* **Out of Office (Task Manager)**
* **Integration Management** (not included in v4.5)
* **Content Models** (deprecated)
***
## Datepicker Migration (v4.5.0)
In version 4.5, significant updates have been introduced to the **Datepicker** component to ensure compatibility with ISO 8601 date formats and enhanced handling of date attributes within the **Data Model**. This migration affects both newly created and existing processes.
### Key changes
1. **Introduction of Date Types**:
* **Standard Date**: Stores and displays date values in ISO 8601 format, respecting the application's locale and timezone settings.
* **Legacy Date**: Retains previous formatting to ensure compatibility with existing business rules and processes.
2. **Properties Updates**:
* The **Datepicker** now supports dependent properties such as `minDate`, `maxDate`, and `defaultValue`. These properties:
* Follow the formatting rules of the selected date type (Standard or Legacy).
* Ensure that dynamic date values pulled from the **Data Model** are displayed correctly.
3. **Backward Compatibility**:
* **Existing Processes**: All migrated processes with legacy Datepicker components will default to `Legacy Date` type. This preserves the original formatting and ensures no disruption in business rules or workflows.
* **New Processes**: Newly created processes will default to `Standard Date` type, saving values in ISO 8601 format.
***
### Migration process
1. **Legacy Datepickers**:
* Automatically flagged during migration.
* Continue to work with existing business rules.
* Require manual review for future updates to transition to the **Standard Date** format.
2. **Business Rules Updates**:
* Legacy Datepickers may require manual adjustments if associated business rules reference hardcoded date formats.
* Ensure that any dynamic dates used in business rules are compatible with the ISO 8601 standard.
3. **Standard Datepickers**:
* All new Datepicker components save date values directly in ISO 8601 format.
* Fully compatible with updated **Data Model** attributes, allowing seamless integration with external systems, adaptors, and reporting plugins.
### Considerations
* **Default Values**:
* For **Standard Datepickers**, the `defaultValue` must be in ISO 8601 format.
* Dynamic defaults can also be set using **Data Model** attributes or process data.
* **Data Model Integration**:
* All external and internal date attributes, including those used by adaptors or business rules, must be explicitly defined in the **Data Model**.
* **UI Designer Overrides**:
* Overrides can be applied to display dates differently for specific UI elements, ensuring flexibility for localized formatting.
### Recommendations for transition
* **Existing Processes**:
* Leave Datepicker components in `Legacy` mode unless business rules and workflows are updated to support ISO 8601.
* **New Processes**:
* Use `Standard Date` to ensure future compatibility and alignment with ISO 8601 formatting.
* **Documentation**:
* Review and update all timer expressions, adaptors, and external data feeds to use ISO 8601 format for consistency.
***
## Post-migration recommendations (v4.5.0)
For complex projects with multiple use cases, **do not use the default application for ongoing development or production builds**. Instead:
1. **Create Branches within the Default Application**: Organize and streamline resources by creating branches. This enables a lightweight build focused on production.
2. **Split the Default Application into Smaller Applications**: Use the import/export feature to separate the default application into individual applications by use case.
* **Note**: When importing processes into a new application, resource references may need to be manually reconfigured.
***
# Renderer SDKs
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.3-november-2024/migrating-from-v4.1.x-to-v4.5.3/renderers
This guide assists in migrating from FlowX v4.1.x to v4.5.1.
## Android SDK migration guide (v4.5.0)
### Initialization config changes
A new configuration parameter, named `locale` was added in order to improve formatting the dates, numbers and currencies.
When the SDK initialization happens through the `FlowxSdkApi.getInstance().init(...)` method, the argument has to be set inside the `config: SdkConfig` parameter value:
```kotlin theme={"system"}
FlowxSdkApi.getInstance().init(
...
config = SdkConfig(
baseUrl = "URL to FlowX backend",
imageBaseUrl = "URL to FlowX CMS Media Library",
enginePath = "some_path",
language = "en",
locale = Locale.getDefault(), // e.g. Locale("en", "US"), Locale("fr", "CA")
validators = mapOf("exact_25_in_length" to { it.length == 25 }),
enableLog = false,
),
...
)
```
### Changes when starting a Flowx process
Two new parameters were added:
| Name | Description | Type | Requirement |
| ----------------- | -------------------------------------------------------------------------------------- | --------------- | -------------------------------- |
| `applicationUuid` | The uuid string of the application containing the process to be started | `String` | Mandatory |
| `onProcessEnded` | Callback function where you can do additional processing when the started process ends | `(() -> Unit)?` | Optional. It defaults to `null`. |
```kotlin theme={"system"}
fun startProcess(
applicationUuid: String,
processName: String,
params: JSONObject = JSONObject(),
isModal: Boolean = false,
onProcessEnded: (() -> Unit)? = null,
closeModalFunc: ((processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
### Changes when resuming a Flowx process
One new parameter was added:
| Name | Description | Type | Requirement |
| ---------------- | ---------------------------------------------------------------------------------------- | --------------- | -------------------------------- |
| `onProcessEnded` | Callback function where you can do additional processing when the continued process ends | `(() -> Unit)?` | Optional. It defaults to `null`. |
```kotlin theme={"system"}
fun continueProcess(
processUuid: String,
isModal: Boolean = false,
onProcessEnded: (() -> Unit)? = null,
closeModalFunc: ((processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
### Public API changes
The `changeLanguage` method has been updated and renamed to `changeLocaleSettings`, in order to accommodate the newly added `locale` config parameter:
```kotlin theme={"system"}
fun changeLocaleSettings(locale: Locale, language: String)
```
### Library dependencies updates
* **[Kotlin](https://kotlinlang.org/)**: 1.9.22 **↗** **1.9.24**
* **[Compose BOM](https://developer.android.com/jetpack/compose/bom/bom-mapping)**: 2024.02.00 **↗** **2024.06.00**
* **[Compose Compiler](https://developer.android.com/jetpack/androidx/releases/compose-compiler)**: 1.5.9 **↗** **1.5.14**
* **[Gson](https://github.com/google/gson)**: 2.10.1 **↗** **2.11.0**
***
## iOS SDK migration guide (v4.5.0)
### Initialization config changes
A new configuration parameter, named `locale` was added in order to improve formatting the dates, numbers and currencies.
The locale needs to be set on the `FXConfig.sharedInstance.configure` method
```swift theme={"system"}
FXConfig.sharedInstance.configure { (config) in
config.locale = "en-US"
...
}
```
### Changes when starting a process
Two new parameters were added on the 3 available start process methods:
| Name | Description | Type | Requirement |
| ----------------- | -------------------------------------------------------------------------------------- | --------------- | ------------------------------- |
| `applicationUuid` | The uuid string of the application containing the process to be started | `String` | Mandatory |
| `onProcessEnded` | Callback function where you can do additional processing when the started process ends | `(() -> Void)?` | Optional. It defaults to `nil`. |
```swift theme={"system"}
func startProcess(applicationUuid: String,
name: String,
params: [String : Any]?,
isModal: Bool = false,
showLoader: Bool = false,
completion: ((UIViewController?) -> Void)?,
onProcessEnded: (() -> Void)? = nil)
```
### Changes when resuming a Flowx process
One new parameter was added on the 3 available continue process methods:
| Name | Description | Type | Requirement |
| ---------------- | -------------------------------------------------------------------------------------- | --------------- | ------------------------------- |
| `onProcessEnded` | Callback function where you can do additional processing when the started process ends | `(() -> Void)?` | Optional. It defaults to `nil`. |
```swift theme={"system"}
func continueExistingProcess(uuid: String,
name: String,
isModal: Bool = false,
completion: ((UIViewController?) -> Void)? = nil,
onProcessEnded: (() -> Void)? = nil)
```
### Public API changes
The `changeLanguage` method has been updated and renamed to `changeLocaleSettings`, in order to accommodate the newly added `locale` config parameter:
```swift theme={"system"}
func changeLocaleSettings(locale: String?, language: String?)
```
***
## Angular SDK migration guide (v4.5.0)
### Renderer SDK component usage
In the Angular SDK, the `` component has two new parameters have been introduced: appInfo and locale. These additions help support localization and application-specific configurations.
* **appInfo**: Object containing an appId key, which identifies the application.
* **locale**: Provides region-specific settings for localization.
Add the definitions for these properties in the class file of the component that uses the process renderer component:
```typescript theme={"system"}
appInfo = { appId: 'your-app-id' },
locale = 'en-US',
```
Use these parameters in the template as inputs for the `` component:
```html theme={"system"}
```
### Icon module update
The `withExtraIconSet` method has been replaced with `provideExtraIconSet`, which should now be used in the providers array.
```typescript theme={"system"}
@NgModule({
imports: [
IconModule, // Import the IconModule
],
providers: [
// Use provideExtraIconSet to add your custom icon set
provideExtraIconSet({
customIcon1: 'path/to/custom-icon1.svg',
customIcon2: 'path/to/custom-icon2.svg',
// Add more icons as needed
})
]
})
export class AppModule {}
```
### Additional libraries
The following npm packages are now essential for handling date and input formatting:
```npm theme={"system"}
npm i date-fns inputmask
```
* date-fns
* inputmask
# FlowX.AI 4.5.3 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.3-november-2024/v4.5.3-november-2024
FlowX.AI 4.5.3 introduces advanced branch merging capabilities, enhanced table customization, plugin integration improvements, significant performance optimizations, and essential bug fixes. This release provides a robust, user-friendly experience with improved operational clarity and efficiency.
**Release Date:** 25th November 2024
## What's new? 🆕
The Merge Conflicts feature now delivers an elevated collaboration experience for managing branch versions. This update focuses on improving conflict detection, resolution efficiency, and seamless merging workflows.
### Key enhancements to merge conflicts
The 4.5.3 release introduces robust enhancements to merge conflict handling, focusing on user experience and operational clarity. Key updates include:
#### Merging without conflicts
Easily merge secondary branches into main or other branches when no conflicts are detected. The updated merge modal offers:
* A clean interface with streamlined branch selection.
* A mandatory, validated commit message field (max 50 characters).
* Real-time feedback for successful merges and branching graph updates.

#### Advanced conflict detection
A new Conflicts Detected Modal lists all resources with conflicting changes. Key highlights include:
* Clear grouping by resource type (e.g., Processes, Enumerations, Media Library).
* Scrollable lists and clickable entries to resolve specific conflicts.
* A detailed overview of source and target branch differences for full context.

#### Resource-Level conflict resolution
Conflicts can now be resolved directly at the resource level with an intuitive interface:
* **JSON Comparisons**: Differences highlighted with color-coded visuals (source: yellow, target: blue).

* **Navigation Support**: Jump between differences for efficient resolution.
* **Progress Tracking**: Mark resources as “Reviewed” or “Seen” to monitor resolution status.

#### Flexible merge overrides
Proceed with merges even if some conflicts are unresolved, using the Merge Anyway option.
* A confirmation modal outlines how unresolved conflicts will be handled (e.g., prioritizing source branch changes).
* Provides flexibility while maintaining control over merge outcomes.

***
### Plugin updates
#### Notifications & Documents plugins
Notifications and Documents plugins have been integrated as **application resources**.
**Deployment changes**: Added **Runtime Database Integration** and **Data-Sync Service Enhancements**
See the [**Deployment guidelines**](deployment-guidelines-v4.5.3#new-environment-variables) for more details.
***
### Rendering updates
#### Table enhancements
The table component has been enhanced with several new customization options to provide greater control over its appearance and functionality:
* **Min-Max Cell Width**: Define precise minimum and maximum widths for table cells to ensure optimal layout and readability.
* **Header Text Alignment**: Customize the alignment of header text for better visual consistency across tables.

* **Padding and Spacing**: Fine-tune padding and spacing properties for both rows and columns to improve table design and usability.

* **"No Data" Message Customization**: Introduced the ability to set a custom system message (through `sys_table_empty` system substitution tag) for tables when no data is available, offering a more user-friendly experience.


***
## Bug fixes 🐞
* Resolved multiple rendering issues for smoother user experience.
* Fixed substitution tag conflicts to ensure correct rendering during process execution.
* Addressed issues with enum mapper loss during merges when system names change.
* Improved conflict detection for swim lanes, including start/end nodes and node mismatches.
* Prevented errors during branch merges with updated allocation rules and modified views.
* Ensured proper deletion of workflows, notification templates, and document templates across merged branches.
* Resolved issues where `viewColumnFlowxUuid` became null after updates.
***
## Changes 🔧
### Enhanced merge experience
* Polished resource-specific conflict handling for better error feedback.
* Improved clarity and guidance in merge modals and resolution interfaces.
### Export and runtime improvements
* Enhanced allocation rule export capabilities.
* Added retry token support in process instance views for better runtime resilience.
***
## Known issues
We’re aware of a few quirks during merge conflicts and are working to fix them. Here’s a quick rundown:
1. **Nodes and Resources**: Some nodes aren’t returned when creating WIP versions:
* When creating a new WIP version after merging branches, some nodes are not returned, resulting in incomplete swimlanes. This issue occurs particularly when new nodes are added to both custom and default swimlanes across branches before merging. It may lead to missing nodes in the final version, affecting process completeness.
2. **Enumerations**:
* **Duplicate content values can be created during Merging**: Merging branches with enumeration updates can result in duplicate content values or child enums with the same code. This occurs when identical names are added to the same enum in different branches, bypassing backend validation. Instead of flagging a conflict, the merge proceeds, creating duplicate entries. This issue disrupts the expected uniqueness constraint for enumeration values.
* **Enum content values might not save correctly in some cases**: In specific scenarios involving transformations of content values into child enums across branches, content values added in one branch may not appear after merging. Despite accepting changes from the branch where the content value was added, the merged version omits it, leading to incomplete or inconsistent enumeration data.
3. **Swim Lanes**:
* **Branches with deleted swim lanes cannot be merged**: Branches with swim lanes deleted in separate versions cannot be merged successfully. An API error occurs when attempting to merge, even after accepting all changes from one branch. This issue arises when swim lanes with nodes are deleted in parallel branches, disrupting the merge process and resulting in a 500 Internal Server Error.
4. **Error When Merging Branches with Identical Resource Names Across All Resource Types**:
* Merging branches that include newly created resources (e.g., views, stages, processes) with identical names results in a 500 Internal Server Error. Although backend validation prevents duplicate names during normal creation, this check is bypassed during merging. The error occurs due to a unique constraint violation when attempting to insert resources with the same name, disrupting the merge process for all resource types.
5. **Conflict Detection Gaps**:
* **New substitution tags with the same name on different branches aren’t flagged**: Merging branches that include new substitution tags with identical names on different branches does not trigger a conflict. Instead, both tags are retained, resulting in duplicate substitution tags with the same name but different values. This issue bypasses expected conflict detection and can lead to inconsistencies in substitution tag usage.
* **Adding values to deleted data model keys does not raise conflicts**: When values are added to a data model key in one branch and the same key is deleted in another, merging does not generate a conflict. Instead, the added values from the first branch are silently lost in the merged version. This issue bypasses expected conflict detection, leading to data loss and inconsistencies in the resulting data model.
6. **Media Library**
* **Branches with media library assets sometimes fail to merge into the main branch**: Merging branches with media library assets can result in a 500 Internal Server Error when changes to the same asset occur across multiple branches. This issue typically arises when one branch is merged into another, and then the combined branch is merged into the main branch. The failure occurs due to null parameter handling during the merge process, preventing the merge from completing successfully.
7. **UI/UX**:
* **Unnecessary scrollbars appear in the merge modal for single items**: The merge conflict modal displays unnecessary scrollbars when only a single item is present in the list. This occurs in scenarios where media library assets with long keys are involved, creating a layout issue that affects the user interface. While functionality is not impacted, this visual inconsistency can reduce the overall user experience during conflict resolution.
* **Fields like `originalCreationTimestamp` and `flowxUuid` are incorrectly flagged as conflicts**: The merge conflict modal displays unnecessary scrollbars when only a single item is present in the list. This occurs in scenarios where media library assets with long keys are involved, creating a layout issue that affects the user interface. While functionality is not impacted, this visual inconsistency can reduce the overall user experience during conflict resolution.
***
## Additional information
For deployment guidelines, refer to:
# Deployment guidelines v4.5.4
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.4-december-2024/deployment-guidelines-v4.5.4
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

## Component versions
| Component | 4.5.4 | 4.5.3 | 4.5.1 | 4.5.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------------------- | ---------- | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **7.4.12** | 7.4.3 | 7.4.1 | 7.3.5 | 6.1.6 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **6.4.2** | 6.2.7 | 6.2.2 | 6.1.11 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.34.0** | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | **5.34.0** | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | **5.34.0** | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | **5.34.0** | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.34.0** | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.34.0** | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.34.0** | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.34.0** | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.34.0** | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **4.2.6** | 4.2.1 | 4.1.10 | 4.1.6 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **5.1.3** | 5.1.1 | 5.0.4 | 5.0.4 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **5.2.0** | 5.1.1 | 5.0.4 | 5.0.4 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 4.1.3 | 4.1.3 | 4.1.3 | 4.1.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | **6.0.13** | 6.0.9 | 6.0.5 | 6.0.1 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | 3.1.2 | 3.1.2 | 3.1.2 | 3.1.2 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **5.1.1** | 5.0.3 | 5.0.3 | 5.0.3 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **1.7.0** | 1.6.0 | 1.4.3 | 1.3.9 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **1.11.0** | 1.7.1 | 1.4.6 | 1.3.7 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | 1.5.0 | 1.5.0 | 1.3.6 | 1.3.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.2 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 4.0.0 | 4.0.0 | 4.0.0 | 4.0.0 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
Note: The same container image and Helm chart are used for **Application Manager** and **Runtime Manager**.
## AI Agents
| Component | 4.5.4 | 4.5.3 | 4.5.1 | 4.5.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ---------- | ------ | ----- | ----- | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.7.5** | 1.3.4 | 1.0.6 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.4.2** | 1.0.5 | 1.0.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.6.2** | 1.3.6 | 1.2.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.0.29** | 1.0.20 | 1.0.4 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.1.3** | 1.0.10 | 1.0.7 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.5.4 | Keycloak | 22.x |
| 4.5.4 | Kafka | 3.2.x |
| 4.5.4 | PostgreSQL | 16.2.x |
| 4.5.4 | MongoDB | 7.0.x |
| 4.5.4 | Redis | 7.2.x |
| 4.5.4 | Elasticsearch | 7.17.x |
| 4.5.4 | OracleDB | 19.23.0.0.0 |
| 4.5.4 | Angular (Web SDK) | 17.x |
| 4.5.4 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
**Update default application**: If you have already updated to **v4.5.0** or **v4.5.1**, ensure that you create at least one new version of the default\_application(where all the process definitions from previous versions are migrated). This step verifies that your default application remains up to date with the latest changes:
1. Open the default\_application in the UI.
2. Check for a new version (either draft or committed).
3. Ensure that there is a new version compared to the committed version that was automatically created during the migration from Release 4.5.0.
4. Save or commit a new version if necessary.
This step ensures your application configurations are aligned with the latest migration requirements.
# FlowX.AI 4.5.4 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.4-december-2024/v4.5.4-december-2024
This internal release brings various enhancements and new features to improve functionality, usability, and performance across the platform.
## What's new? 🆕
### Integration designer updates
* **Testing on Upper Environments**: Users can now test endpoints and workflows in upper environments with customizable configurations and detailed runtime logs, ensuring smooth and accurate testing.
* **System Enumeration Toggle**: Added a toggle to manage system enumeration mapping:
* Turning it ON includes the system in the enumeration table and enables the Enum Mapper.
* Turning it OFF removes the system, disables related mappings, and clears existing data with a warning.
* **Duplicate Workflow & Endpoint**: A new "Duplicate" option streamlines the creation of similar workflows or endpoints, supporting renaming, optional descriptions, and independent modifications. Success or error notifications ensure clarity during the duplication process.
* **Testing on Committed Versions**: Enables testing of endpoints and workflows on committed versions with editable inputs, detailed logs, and response previews in modals tailored to the selected version.
* **Enum Translation in Lists**: Expanded support for enum translation in lists of objects and arrays of enums, with simplified and efficient JSON path formatting.
* **Multiple Incoming Sequences**: Workflow nodes now support multiple incoming sequences, allowing for complex designs where conditions or actions converge.
* **Rename Workflow Nodes**: Introduced in-place editing for workflow node names, with validations to ensure uniqueness and compliance with naming rules.
* **Start/Call Subworkflow Node (Sync)**: Added a new node with the ability to reuse predefined workflows (local or library) within parent workflows. Subworkflows complete before proceeding and halt the parent workflow on failure.
* **Configurable Timeout & Retry**: Endpoint nodes now allow configurable timeouts (default: 10,000 ms) and retry mechanisms with exponential backoff, ensuring resilience during API interactions.
* **Missing Sequence Alerts**: Workflow nodes with unmapped branches now display a yellow warning icon and provide actionable guidance for resolution.
***
### AI agents
* **AI Designer**: Modified keys for Data Models.
* **AI Analyst**: Added support for boundary events.
* **AI Developer**: Enhanced business rule explanations.
***
### Analytics integration for container apps
This feature is compatible with the new Angular packages, scheduled for release in v4.5.5.
Container apps now support tracking "Screen Displayed" and "Action Executed" events, configurable in the UI Designer to improve insights into user interactions.
**UI Designer updates**:
* **Analytics Screen Name**: Configurable under Root UI components (Cards and Containers) to enable tracking in analytics platforms like Google Analytics.
"Screen Displayed" events support user task-based reporting, such as when a user task screen is shown.

The configured values are stored in `flowxProps.analytics`, making them accessible for integration with analytics tools.
* **Action Analytics**: Tracks user actions (e.g., button clicks) with tags set directly in the UI Action Form.
Added analytics configuration in the **UX Section** for all UI action types.

Values are saved in `params.analytics` via the PATCH `/actions` request.
**Renderers updates**:
Renderers now expose a public API for triggering analytics events:
* **Screen Events**: Triggered on user task display, using `flowxProps.analytics`.
* **Action Events**: Triggered on action execution, using `params.analyticcs`.
Dynamic values such as process store keys and replace tags are supported for more contextual tracking.
***
### UI action form updates
* Introduced **Functional** and **UX sections** for all action types, with a checkbox for **Add Analytics Name** in the UX section.
* Removed the **Start Process Inherit** UI action type.
* Simplified custom and exclude key management.

***
### Hide expressions enhancements
This feature is compatible with the new Angular packages, scheduled for release in v4.5.5.
The [**Hide Expressions**](../../4.6.0/docs/building-blocks/ui-designer/ui-component-types/form-elements/input-form-field#hidedisable-expressions) feature is now standardized across all FlowX components extending functionality to collection prototypes, table cell children, and more.
Supported components include:
* Card
* Collection
* Collection Prototype children (excluding the Collection Prototype itself)
* Text
* Link
* Image
* File Preview
* File Upload
* Button
* Table cell children (e.g.: texts, images, buttons, links)
***
### Grid improvements in preview
* Enhanced grid placeholder design.
* Added drag-and-drop support for placeholder column and row spans.
***
## Bug fixes 🐞
***
## Changes 🔧
* **Web Renderer Caching**: Improved CMS resource caching using browser mechanisms keyed to the build ID.
* **Process Designer**: Enhanced drop-node-on-sequence functionality.
***
## Additional information
For deployment guidelines, refer to:
# Deployment guidelines v4.5.5
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.5-december-2024/deployment-guidelines-v4.5.5
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

## Component versions
| Component | 4.5.5 | 4.5.4 | 4.5.3 | 4.5.1 | 4.5.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **7.6.0** | 7.4.12 | 7.4.3 | 7.4.1 | 7.3.5 | 6.1.6 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **6.4.4** | 6.4.2 | 6.2.7 | 6.2.2 | 6.1.11 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.41.3** | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.41.3** | | | | | | | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.41.3** | | | | | | | | | | | | | | | | | | | | | | |
| **@flowx/ui-sdk** | - | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-ui-toolkit** | **5.41.3** | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | - | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.41.3** | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.41.3** | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | - | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.41.3** | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.41.3** | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **4.3.2** | 4.2.6 | 4.2.1 | 4.1.10 | 4.1.6 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | 5.1.3 | 5.1.3 | 5.1.1 | 5.0.4 | 5.0.4 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **5.2.1** | 5.2.0 | 5.1.1 | 5.0.4 | 5.0.4 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 4.1.3 | 4.1.3 | 4.1.3 | 4.1.3 | 4.1.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | 6.0.13 | 6.0.13 | 6.0.9 | 6.0.5 | 6.0.1 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | 3.1.2 | 3.1.2 | 3.1.2 | 3.1.2 | 3.1.2 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | 5.1.1 | 5.1.1 | 5.0.3 | 5.0.3 | 5.0.3 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **1.7.3** | 1.7.0 | 1.6.0 | 1.4.3 | 1.3.9 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **1.14.1** | 1.11.0 | 1.7.1 | 1.4.6 | 1.3.7 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | 1.5.0 | 1.5.0 | 1.5.0 | 1.3.6 | 1.3.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | **4.0.3** | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.2 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **4.0.7** | 4.0.0 | 4.0.0 | 4.0.0 | 4.0.0 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
Note: The same container image and Helm chart are used for **Application Manager** and **Runtime Manager**.
## AI Agents
| Component | 4.5.5 | 4.5.4 | 4.5.3 | 4.5.1 | 4.5.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ---------- | ------ | ------ | ----- | ----- | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.8.0** | 1.7.5 | 1.3.4 | 1.0.6 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.5.0** | 1.4.2 | 1.0.5 | 1.0.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.8.3** | 1.6.2 | 1.3.6 | 1.2.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.0.32** | 1.0.29 | 1.0.20 | 1.0.4 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.2.0** | 1.1.3 | 1.0.10 | 1.0.7 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.5.5 | Keycloak | 22.x |
| 4.5.5 | Kafka | 3.2.x |
| 4.5.5 | PostgreSQL | 16.2.x |
| 4.5.5 | MongoDB | 7.0.x |
| 4.5.5 | Redis | 7.2.x |
| 4.5.5 | Elasticsearch | 7.17.x |
| 4.5.5 | OracleDB | 19.23.0.0.0 |
| 4.5.5 | Angular (Web SDK) | 17.x |
| 4.5.5 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
**Update default application**: If you have already updated to **v4.5.0** or **v4.5.1**, ensure that you create at least one new version of the default\_application(where all the process definitions from previous versions are migrated). This step verifies that your default application remains up to date with the latest changes:
1. Open the default\_application in the UI.
2. Check for a new version (either draft or committed).
3. Ensure that there is a new version compared to the committed version that was automatically created during the migration from Release 4.5.0.
4. Save or commit a new version if necessary.
This step ensures your application configurations are aligned with the latest migration requirements.
# FlowX.AI 4.5.5 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.5-december-2024/v4.5.5-december-2024
This release brings various enhancements and new features to improve functionality, usability, and performance across the platform.
## **What's new?** 🆕
### **Integration designer updates**
* **Testing on Upper Environments:** Test endpoints and workflows in upper environments with customizable configurations and detailed runtime logs for smooth and accurate testing.
* **System Enumeration Toggle:** Manage system enumeration mapping with a new toggle.
* **ON:** Includes the system in the enumeration table and enables the Enum Mapper.
* **OFF:** Removes the system, disables related mappings, and clears existing data with a warning.
* **Duplicate Workflow & Endpoint:** Streamline the creation of similar workflows or endpoints with the "Duplicate" option. Includes support for renaming, optional descriptions, and independent modifications. Success or error notifications ensure clarity.
* **Testing on Committed Versions:** Test endpoints and workflows on committed versions with editable inputs, detailed logs, and response previews displayed in tailored modals.
* **Enum Translation in Lists:** Expanded support for enum translation in lists of objects and arrays of enums, with simplified JSON path formatting for enhanced efficiency.
* **Multiple Incoming Sequences:** Workflow nodes now support multiple incoming sequences, enabling complex designs where conditions or actions converge.
* **Rename Workflow Nodes:** Added in-place editing for workflow node names, ensuring unique and compliant naming through validations.
* **Show System-Auth Details in Test Modal:** Introduced visibility for system-auth details directly in the test modal, improving debugging and configuration insights.
* **Default Retry Values for REST Endpoints:** Updated default retry values for REST endpoints to enhance reliability and optimize configurations.
* **Start/Call Subworkflow Node (Sync):** Added a new node that allows reusing predefined workflows (local or library) within parent workflows. Subworkflows complete before proceeding and halt the parent workflow on failure.
* **Configurable Timeout & Retry Mechanisms:** Endpoint nodes now allow configurable timeouts (default: 10,000 ms) and retry mechanisms with exponential backoff, ensuring resilience during API interactions.
* **Missing Sequence Alerts:** Workflow nodes with unmapped branches now display a yellow warning icon, providing actionable guidance to resolve missing sequences.
***
### UI Designer updates
#### UI action form updates
* Introduced **Functional** and **UX sections** for all action types, with a checkbox for **Add Analytics Name** in the UX section.
* Removed the **Start Process Inherit** UI action type.
* Simplified custom and exclude key management.

#### Hide expressions enhancements
The [**Hide Expressions**](../../4.6.0/docs/building-blocks/ui-designer/ui-component-types/form-elements/input-form-field#hidedisable-expressions) feature is now standardized across all FlowX components extending functionality to collection prototypes, table cell children, and more.
Supported components include:
* Card
* Collection
* Collection Prototype children (excluding the Collection Prototype itself)
* Text
* Link
* Image
* File Preview
* File Upload
* Button
* Table cell children (e.g.: texts, images, buttons, links)
#### Grid improvements in preview
* Enhanced grid placeholder design.
* Added drag-and-drop support for placeholder column and row spans.
#### Table UI component enhancements
Added in-place editing and validations for table cells, along with support for row deletions.
#### Conditional formatting for UI elements
This release introduces the ability to dynamically change styling and configuration properties of UI elements based on specified conditions. You can set multiple conditions and corresponding styling overrides—such as colors, fonts, and borders—and update Image or Document URLs contextually. This enhancement reduces the need for multiple prototypes, simplifies the UI configuration process, and makes it easier to highlight data patterns, outliers, or trends directly within the interface.
***
### AI agents
* **AI Designer**: Modified keys for Data Models.
* **AI Analyst**: Added support for boundary events.
* **AI Developer**: Enhanced business rule explanations.
***
### Analytics integration for container apps
Container apps now support tracking "Screen Displayed" and "Action Executed" events, configurable in the UI Designer to improve insights into user interactions.
**UI Designer updates**:
* **Analytics Screen Name**: Configurable under Root UI components (Cards and Containers) to enable tracking in analytics platforms like Google Analytics.
"Screen Displayed" events support user task-based reporting, such as when a user task screen is shown.

The configured values are stored in `flowxProps.analytics`, making them accessible for integration with analytics tools.
* **Action Analytics**: Tracks user actions (e.g., button clicks) with tags set directly in the UI Action Form.
Added analytics configuration in the **UX Section** for all UI action types.

Values are saved in `params.analytics` via the PATCH `/actions` request.
**Renderers updates**:
Renderers now expose a public API for triggering analytics events:
* **Screen Events**: Triggered on user task display, using `flowxProps.analytics`.
* **Action Events**: Triggered on action execution, using `params.analytics`.
Dynamic values such as process store keys and replace tags are supported for more contextual tracking.
***
### New Angular SDK
We're excited to announce new releases for new Flowx packages to support web applications:
* `@flowx/core-sdk`
* `@flowx/angular-sdk`
* `@flowx/angular-theme`
* `@flowx/angular-ui-toolkit`
* `@flowx/core-theme`
We recommend upgrading to the **latest** versions of all @flowx packages to take full advantage of these new features and improvements. Check the deployment guidelines for version details.
***
### Projects updates
#### Export/Import Builds with Binaries
We’ve introduced flexible export/import options to accommodate diverse deployment scenarios, including fully isolated environments:
* **With Binaries**: Packages now include all necessary binaries within the exported .zip file, enabling offline and on-premise usage where public URLs may not be accessible.
* **Without Binaries**: Retains the existing metadata-only approach, referencing publicly accessible binaries to keep export packages lightweight.
* **Dynamic Import Behavior**: The import process automatically adapts, either utilizing embedded binaries or fetching them from public URLs as needed.
Whether you’re operating in an isolated on-premise setup or a fully connected environment, you can seamlessly manage builds without compromising on flexibility or compatibility.
#### Application Runtime
* Start processes via Kafka messages for improved integrations to offer more flexible process initialization.
### Plugins
* **Audit Logs for Task Management, Resources, and Templates (Docs & Notif)**:
Improved observability and traceability within the Task Management plugin. Audit logs now capture key events and changes across tasks, related resources, and template configurations (Documentation & Notifications), providing a clearer historical record and aiding in compliance and troubleshooting.
* **All Tasks Displayed in Runtime Tab**:
Streamlined access to task-related information by displaying all tasks directly in the Runtime tab. This consolidation simplifies navigation and makes it easier to monitor and manage task execution and status in real-time.
* **Number of Tasks Displayed Picker**:
Introduced a configurable picker to control how many tasks are displayed at once. Users can tailor the task view density to their preferences, enhancing the management experience and visibility.
* **Removed Support for Unreferenced Enumerations**:
Enumerations not referenced by any resources are no longer supported. This change reduces clutter and ensures cleaner, more maintainable configurations within the plugin environment.
***
## Changes 🔧
* **Web Renderer Caching**: Improved CMS resource caching using browser mechanisms keyed to the build ID.
* **Process Designer**: Enhanced drop-node-on-sequence functionality.
* **FlowX.AI Designer**: Applications are now marked and referred to as "Projects".
* **FlowX.AI Designer**: Renamed “System assets” to Global Media Library, clarifying resource locations and responsibilities.
***
## Additional information
For deployment guidelines, refer to:
# Deployment guidelines v4.5.6
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.6-december-2024/deployment-guidelines-v4.5.6
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

## Component versions
| Component | 4.5.6 | 4.5.5 | 4.5.4 | 4.5.3 | 4.5.1 | 4.5.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | 7.6.0 | 7.6.0 | 7.4.12 | 7.4.3 | 7.4.1 | 7.3.5 | 6.1.6 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **6.4.5** | 6.4.4 | 6.4.2 | 6.2.7 | 6.2.2 | 6.1.11 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.45.3** | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.45.3** | 5.41.3 | - | - | - | - | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.45.3** | 5.41.3 | - | - | - | - | - | - | | | | | | | | | | | | | | | | |
| **@flowx/ui-sdk** | - | - | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-ui-toolkit** | **5.45.3** | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | - | - | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.45.3** | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.45.3** | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | - | - | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.45.3** | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.45.3** | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **4.3.3** | 4.3.2 | 4.2.6 | 4.2.1 | 4.1.10 | 4.1.6 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **5.1.5** | 5.1.3 | 5.1.3 | 5.1.1 | 5.0.4 | 5.0.4 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **5.2.3** | 5.2.1 | 5.2.0 | 5.1.1 | 5.0.4 | 5.0.4 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 4.1.3 | 4.1.3 | 4.1.3 | 4.1.3 | 4.1.3 | 4.1.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | **6.0.14** | 6.0.13 | 6.0.13 | 6.0.9 | 6.0.5 | 6.0.1 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | 3.1.2 | 3.1.2 | 3.1.2 | 3.1.2 | 3.1.2 | 3.1.2 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | 5.1.1 | 5.1.1 | 5.1.1 | 5.0.3 | 5.0.3 | 5.0.3 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | 1.7.3 | 1.7.3 | 1.7.0 | 1.6.0 | 1.4.3 | 1.3.9 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **1.14.2** | 1.14.1 | 1.11.0 | 1.7.1 | 1.4.6 | 1.3.7 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **1.5.1** | 1.5.0 | 1.5.0 | 1.5.0 | 1.3.6 | 1.3.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | 4.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.2 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 4.0.7 | 4.0.7 | 4.0.0 | 4.0.0 | 4.0.0 | 4.0.0 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
Note: The same container image and Helm chart are used for **Application Manager** and **Runtime Manager**.
## AI Agents
| Component | 4.5.6 | 4.5.5 | 4.5.4 | 4.5.3 | 4.5.1 | 4.5.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | --------- | ------ | ------ | ------ | ----- | ----- | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.8.1** | 1.8.0 | 1.7.5 | 1.3.4 | 1.0.6 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.6.0** | 1.5.0 | 1.4.2 | 1.0.5 | 1.0.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | 1.8.3 | 1.8.3 | 1.6.2 | 1.3.6 | 1.2.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | 1.1.0 | 1.0.32 | 1.0.29 | 1.0.20 | 1.0.4 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | 1.2.0 | 1.2.0 | 1.1.3 | 1.0.10 | 1.0.7 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.5.6 | Keycloak | 22.x |
| 4.5.6 | Kafka | 3.2.x |
| 4.5.6 | PostgreSQL | 16.2.x |
| 4.5.6 | MongoDB | 7.0.x |
| 4.5.6 | Redis | 7.2.x |
| 4.5.6 | Elasticsearch | 7.17.x |
| 4.5.6 | OracleDB | 19.23.0.0.0 |
| 4.5.6 | Angular (Web SDK) | 17.x |
| 4.5.6 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
**Update default application**: If you have already updated to **v4.5.0** or **v4.5.1**, ensure that you create at least one new version of the default\_application(where all the process definitions from previous versions are migrated). This step verifies that your default application remains up to date with the latest changes:
1. Open the default\_application in the UI.
2. Check for a new version (either draft or committed).
3. Ensure that there is a new version compared to the committed version that was automatically created during the migration from Release 4.5.0.
4. Save or commit a new version if necessary.
This step ensures your application configurations are aligned with the latest migration requirements.
# FlowX.AI 4.5.6 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.6-december-2024/v4.5.6-december-2024
Version 4.5.6 brings enhanced export options for media libraries, key bug fixes, and improved plugin functionality for better performance and usability.
## **What's new?** 🆕
***
### Projects updates
#### Export media library with binaries
We’ve introduced flexible export options to accommodate diverse deployment scenarios, including fully isolated environments:
* **With Binaries**: Packages now include all necessary binaries within the exported .zip file, enabling offline and on-premise usage where public URLs may not be accessible.
* **Without Binaries**: Retains the existing metadata-only approach, referencing publicly accessible binaries to keep export packages lightweight.
***
## Bug fixes 🐞
* Change Document and Notification Plugin REST endpoint: Updated to use substring search for consistency with other endpoints.
* \[Audit] Incorrect sent event: Resolved an issue where the Notification and Document templates audit recorded incorrect sent events.
* \[Audit] Wrong subject identifier: Fixed a bug where the template's data model event used the wrong subject identifier when deleting the last entry.
***
## Additional information
For deployment guidelines, refer to:
# Deployment guidelines v4.5.7
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.7-january-2025/deployment-guidelines-v4.5.7
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

## Component versions
| Component | 4.5.7 | 4.5.6 | 4.5.5 | 4.5.4 | 4.5.3 | 4.5.1 | 4.5.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **7.6.3** | 7.6.0 | 7.6.0 | 7.4.12 | 7.4.3 | 7.4.1 | 7.3.5 | 6.1.6 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **6.6.6** | 6.4.5 | 6.4.4 | 6.4.2 | 6.2.7 | 6.2.2 | 6.1.11 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.54.0** | 5.45.3 | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.54.0** | 5.45.3 | 5.41.3 | - | - | - | - | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.54.0** | 5.45.3 | 5.41.3 | - | - | - | - | - | - | | | | | | | | | | | | | | | | |
| **@flowx/ui-sdk** | **5.54.0** | - | - | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-ui-toolkit** | **5.54.0** | 5.45.3 | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | **5.54.0** | - | - | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.54.0** | 5.45.3 | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.54.0** | 5.45.3 | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.54.0** | - | - | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.54.0** | 5.45.3 | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.54.0** | 5.45.3 | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **4.4.0** | 4.3.3 | 4.3.2 | 4.2.6 | 4.2.1 | 4.1.10 | 4.1.6 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **4.0.5** | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **4.0.5** | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **5.2.0** | 5.1.5 | 5.1.3 | 5.1.3 | 5.1.1 | 5.0.4 | 5.0.4 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **5.3.0** | 5.2.3 | 5.2.1 | 5.2.0 | 5.1.1 | 5.0.4 | 5.0.4 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 4.1.3 | 4.1.3 | 4.1.3 | 4.1.3 | 4.1.3 | 4.1.3 | 4.1.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | **6.0.24** | 6.0.14 | 6.0.13 | 6.0.13 | 6.0.9 | 6.0.5 | 6.0.1 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | 3.1.2 | 3.1.2 | 3.1.2 | 3.1.2 | 3.1.2 | 3.1.2 | 3.1.2 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | 5.1.1 | 5.1.1 | 5.1.1 | 5.1.1 | 5.0.3 | 5.0.3 | 5.0.3 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **1.9.1** | 1.7.3 | 1.7.3 | 1.7.0 | 1.6.0 | 1.4.3 | 1.3.9 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **1.16.3** | 1.14.2 | 1.14.1 | 1.11.0 | 1.7.1 | 1.4.6 | 1.3.7 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **1.5.3** | 1.5.1 | 1.5.0 | 1.5.0 | 1.5.0 | 1.3.6 | 1.3.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.2 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 4.0.7 | 4.0.7 | 4.0.7 | 4.0.0 | 4.0.0 | 4.0.0 | 4.0.0 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
Note: The same container image and Helm chart are used for **Application Manager** and **Runtime Manager**.
## AI Agents
| Component | 4.5.7 | 4.5.6 | 4.5.5 | 4.5.4 | 4.5.3 | 4.5.1 | 4.5.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | --------- | ----- | ------ | ------ | ------ | ----- | ----- | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.9.6** | 1.8.1 | 1.8.0 | 1.7.5 | 1.3.4 | 1.0.6 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.6.4** | 1.6.0 | 1.5.0 | 1.4.2 | 1.0.5 | 1.0.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.9.3** | 1.8.3 | 1.8.3 | 1.6.2 | 1.3.6 | 1.2.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.2.4** | 1.1.0 | 1.0.32 | 1.0.29 | 1.0.20 | 1.0.4 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.5.2** | 1.2.0 | 1.2.0 | 1.1.3 | 1.0.10 | 1.0.7 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.5.7 | Keycloak | 22.x |
| 4.5.7 | Kafka | 3.2.x |
| 4.5.7 | PostgreSQL | 16.2.x |
| 4.5.7 | MongoDB | 7.0.x |
| 4.5.7 | Redis | 7.2.x |
| 4.5.7 | Elasticsearch | 7.17.x |
| 4.5.7 | OracleDB | 19.23.0.0.0 |
| 4.5.7 | Angular (Web SDK) | 18.x |
| 4.5.7 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
**Update default application**: If you have already updated to **v4.5.0** or **v4.5.1**, ensure that you create at least one new version of the default\_application(where all the process definitions from previous versions are migrated). This step verifies that your default application remains up to date with the latest changes:
1. Open the default\_application in the UI.
2. Check for a new version (either draft or committed).
3. Ensure that there is a new version compared to the committed version that was automatically created during the migration from Release 4.5.0.
4. Save or commit a new version if necessary.
This step ensures your application configurations are aligned with the latest migration requirements.
# FlowX.AI 4.5.7 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.7-january-2025/v4.5.7-january-2025
## **What's new?** 🆕
### New runtime manager service account
As of **FlowX.AI 4.5.7**, we have introduced a **new runtime manager service account** in Keycloak. This account is required for several key operations including:
1. **Export/Import of builds and application versions**
2. **Managing scheduled events when transitioning from one build to another**
3. **Performing requests from the application manager or runtime manager to other resource services**
If you encounter errors during export/import of builds or application versions, verify that the `flowx-runtime-manager-sa` service account exists in Keycloak and has the correct **service account roles** assigned. This same service account is leveraged across multiple modules to ensure secure and seamless communication with Keycloak.
For configuration details, check the following docs section:
## Additional information
For deployment guidelines, refer to:
# Deployment guidelines v4.6.0
Source: https://docs.flowx.ai/release-notes/v4.x/v4.6.x/v4.6.0-january-2025/deployment-guidelines-v4.6.0
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

After upgrading to the 4.6.0 FlowX.AI release, you cannot import old process definitions or resources into the new platform from older versions .
## Component versions
| Component | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **8.0.2** | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **7.2.3** | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.64.5** | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.64.5** | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.64.5** | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **5.64.5** | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.64.5** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.64.5** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.64.5** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.64.5** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.64.5** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.1.2** | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **5.0.0** | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **5.0.2** | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **6.0.3** | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **6.0.3** | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | **4.1.3** | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | **7.0.3** | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **4.0.0** | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **6.0.0** | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | **0.1.12** | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | **4.0.0** | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.0.1** | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.0.18** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **2.0.18** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **2.0.2** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | **4.0.3** | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **4.0.9** | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
## AI Agents
| Component | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ---------- | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.9.10** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.6.9** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.10.3** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.2.24** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.5.5** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.6.0 | Keycloak | 22.x |
| 4.6.0 | Kafka | 3.2.x |
| 4.6.0 | PostgreSQL | 16.2.x |
| 4.6.0 | MongoDB | 7.0.x |
| 4.6.0 | Redis | 7.2.x |
| 4.6.0 | Elasticsearch | 7.17.x |
| 4.6.0 | Oracle Database | 21C/ 21-XE |
| 4.6.0 | Angular (Web SDK) | 19.x |
| 4.6.0 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
## New microservices - setup guides
## New access rights and roles
## Updated access rights and roles
Added new roles for **manage-views**.
## New service accounts
# Deployment changes for v4.6.0
Source: https://docs.flowx.ai/release-notes/v4.x/v4.6.x/v4.6.0-january-2025/migrating-from-v4.1.x-to-v4.6.0/migrating-from-v4.1.x
This document outlines the configuration and infrastructure changes introduced from v4.1.x to v4.6.0 for deploying the FlowX.AI platform.
## CMS Setup
### MongoDB configuration
In version 4.6.0, the CMS setup includes a more comprehensive MongoDB configuration, especially for runtime data handling:
* **Runtime MongoDB Instance**: A dedicated MongoDB instance for managing runtime data.
* **New Environment Variables**:
* `RUNTIME_DB_USERNAME`: Username for runtime MongoDB access.
* `SPRING_DATA_MONGODB_RUNTIME_URI`: Connection URI for the runtime MongoDB instance.
* `SPRING_DATA_MONGODB_STORAGE`: Specifies storage type for Azure environments (`mongodb` or `cosmosdb`). Default is `mongodb`.
* **Transaction Settings for Mongock Library**:
* `MONGOCK_TRANSACTIONENABLED`: Controls MongoDB transaction support with Mongock, defaulting to `false` due to compatibility concerns with MongoDB 5.
### Private storage configuration
Private CMS to securely store uploaded documents and AI-generated documents, ensuring they are accessible only via authenticated endpoints. This CMS will support AI services and workflows while maintaining strict access controls.
Private CMS ensures secure file storage by keeping documents hidden from the Media Library and accessible only through authenticated endpoints with access token permissions. Files can be retrieved using tags (e.g., ai\_document, ref:UUID\_doc) and are excluded from project builds as they aren't needed at runtime.
* `APPLICATION_FILE_STORAGE_S3_PRIVATE_SERVER_URL`: This environment variable specifies the URL of the S3 server used for private file storage.
* `APPLICATION_FILE_STORAGE_S3_PRIVATE_BUCKET_NAME`: This environment variable specifies the name of the S3 bucket dedicated to private file storage.
* `APPLICATION_FILE_STORAGE_S3_PRIVATE_CREATE_BUCKET`: This environment variable indicates whether the private S3 bucket should be created if it does not already exist. It can be set to true or false.
* `APPLICATION_FILE_STORAGE_S3_PRIVATE_ACCESS_KEY`: This environment variable holds the access key used to authenticate to the S3 server for private file storage.
* `APPLICATION_FILE_STORAGE_S3_PRIVATE_SECRET_KEY`: This environment variable holds the secret key used to authenticate to the S3 server for private file storage.
***
## Admin setup
### MongoDB configuration
Version 4.6.0 introduces a new MongoDB setup in the Admin service for managing data model information:
* **New MongoDB Data Model Configuration**:
* **Environment Variables**:
* `SPRING_DATA_MONGODB_URI`: URI for connecting to the MongoDB data model instance.
* `DB_USERNAME`: Set to `data-model` for data model access.
* `SPRING_DATA_MONGODB_STORAGE`: Specifies storage type for Azure environments (`mongodb` or `cosmosdb`).
***
## Engine setup
### MongoDB configuration
The Engine configuration now includes additional setup for a runtime MongoDB instance to manage runtime builds:
* **Runtime MongoDB for Engine**:
* **New Environment Variables**:
* `SPRING_DATA_MONGODB_RUNTIME_URI`: URI for connecting to the runtime MongoDB.
* `DB_USERNAME`: Set to `app-runtime` for runtime data access.
# Configuration and migration guide
Source: https://docs.flowx.ai/release-notes/v4.x/v4.6.x/v4.6.0-january-2025/migrating-from-v4.1.x-to-v4.6.0/process-configuration
This guide outlines changes in process and UI configuration from v4.1.x to 4.6.0 version.
## Projects
The **Projects** feature in FlowX AI v4.6.0 is a new structure that organizes all dependencies and resources required for a project into a single deployable view. This enhancement simplifies configuration, deployment, and maintenance by layering projects on top of processes, offering a centralized workspace that encapsulates everything needed for project execution.

Several key configuration changes impact how resources and dependencies are managed, deployed, and maintained. This guide provides a breakdown of the configuration changes, automatic migration processes, and manual steps required to ensure a smooth transition.

***
### Consolidated resource management
* **Change**: All resources that were previously managed individually within processes are now grouped within Projects. This includes content management elements, integrations, themes, task configurations, and permissions.
* **Impact**: Resources like **enumerations**, **substitution tags**, and **generic parameters** are now managed within Projects, allowing centralized configuration and version control.
* **Migration**: All process-related resources will be migrated automatically into a **default project**, ensuring continuity of functionality in the new framework. After migration, you should verify that all critical resources are correctly configured within this default project.
### Enhanced version control and dependency management
* **Impact**: Projects support **dependency management** through **Libraries** and enforce version-controlled resources. Setting up a project now requires careful dependency management and versioning to prevent unintended updates.
* **Benefit**: Allows for modular, reusable resources and stable deployments across projects, reducing resource duplication and enhancing project compatibility.
### Migration checklist
To ensure a smooth transition, complete the following steps:
1. **Verify Process Migration**: Confirm that all existing process definitions have been correctly migrated into the default project.
2. **Set Configuration Parameter Overrides**: Post-deployment, adjust environment-specific Configuration Parameters in the default project.
3. **Update Task Views**: Replace the global "All Tasks" feature with project-specific Views in each project.
4. **Transfer Processes and Dependencies Manually**: If moving a process from the default project to another project, manually transfer associated resources and re-check dependencies.
***
## Generic parameters migration
* **Overview**: In version 4.6.0, global generic parameters (from versions prior to 4.6.0) have been migrated to project-level as Configuration Parameters, consolidating parameter management within specific projects for improved organization and control.

* **Migration**: All generic parameters will be automatically migrated to Configuration Parameters section under a default project.
* **Business Rules Unaffected**: There is no impact on existing business rules; they will continue to function as before without requiring updates.
* **Process Export Considerations**: If you export a process from one project to another, ensure that you also transfer the associated configuration parameters. This step is crucial to maintain process functionality and consistency across projects.
* **Important Note**: Only values of generic parameters associated with the specific environment, or where `env = null` (displayed as "all" in the interface in versions prior to 4.6.0), will be migrated. You must ensure that you have correctly set the values for generic parameters, paying attention to environment values (which are case-sensitive), and export these generic parameters before migration to avoid any potential data loss.

* **Post-Deployment Step**: After the first deployment to an upper environment, you will need to create configuration parameter overrides with the specific values required for that environment. This ensures that all environment-specific configurations are accurately maintained and applied across different deployment stages.
To set configuration parameter overrides, navigate to **Your App -> Runtime -> Configuration Parameters Overrides**.

***
## Source systems migration
* **Change**: Source systems have not been migrated automatically and need to be manually recreated.
* **New Location**: In v4.6.0, source systems have been moved under Integration Designer.
* Manual Migration Required:
1. Navigate to Integration Designer.
2. Recreate each source system manually with the same code as in the original configuration.
3. Ensure the "Enable enumeration value mapping" checkbox is enabled.
* **Impact**: Failure to manually migrate source systems may result in broken integrations and missing data mappings.
**v4.6.0**:

**\< v.4.6.0**:

## Task management
* "All Tasks" as a View: The global "All Tasks" feature is no longer standalone and will now function as a View in a project.
**v4.6.0:**

**v4.1.x:**

***
## General
Before starting the migration, complete the following steps:
1. **Merge All Feature Branches**: Ensure all feature branches for processes are merged into the latest version on the main branch.
2. **Remove Unnecessary Resources**: Delete any test processes or resources that are no longer needed.
3. **Export Generic Parameters**: Export generic parameters as a backup to ensure they migrate accurately to project-specific Configuration Parameters.
### Migration steps
During migration, resources will be transferred into a single **default project** with one committed version.
* **Process Definitions**: Only the last committed process version on the main branch will migrate. If no committed version exists, the latest WIP version will be used.
* **Enumerations, Substitution Tags, and Task Manager**: These resources will be migrated to the default project.
* **Generic Parameters**: Migrated as **Configuration Parameters** within the default project, covering only values where `env = null` or that match the platform’s environment setting.
* **Languages**: Language settings (available languages and default) will be moved to project settings. Languages remain globally available.
### Resources excluded from migration
Some resources will remain globally available or are deprecated:
* **Themes**
* **Fonts**
* **Global Media Library** (for media used in themes)
* **Out of Office (Task Manager)**
* **Integration Management** (will not be available in v4.6.0)
***
## Datepicker Migration
In version 4.6.0, significant updates have been introduced to the **Datepicker** component to ensure compatibility with ISO 8601 date formats and enhanced handling of date attributes within the **Data Model**. This migration affects both newly created and existing processes.
### Key changes
1. **Introduction of Date Types**:
* **Standard Date**: Stores and displays date values in ISO 8601 format, respecting the project's locale and timezone settings.
* **Legacy Date**: Retains previous formatting to ensure compatibility with existing business rules and processes.
2. **Properties Updates**:
* The **Datepicker** now supports dependent properties such as `minDate`, `maxDate`, and `defaultValue`. These properties:
* Follow the formatting rules of the selected date type (Standard or Legacy).
* Ensure that dynamic date values pulled from the **Data Model** are displayed correctly.
3. **Backward Compatibility**:
* **Existing Processes**: All migrated processes with legacy Datepicker components will default to `Legacy Date` type. This preserves the original formatting and ensures no disruption in business rules or workflows.
* **New Processes**: Newly created processes will default to `Standard Date` type, saving values in ISO 8601 format.
***
### Migration process
1. **Legacy Datepickers**:
* Automatically flagged during migration.
* Continue to work with existing business rules.
* Require manual review for future updates to transition to the **Standard Date** format.
2. **Business Rules Updates**:
* Legacy Datepickers may require manual adjustments if associated business rules reference hardcoded date formats.
* Ensure that any dynamic dates used in business rules are compatible with the ISO 8601 standard.
3. **Standard Datepickers**:
* All new Datepicker components save date values directly in ISO 8601 format.
* Fully compatible with updated **Data Model** attributes, allowing seamless integration with external systems, adaptors, and reporting plugins.
### Considerations
* **Default Values**:
* For **Standard Datepickers**, the `defaultValue` must be in ISO 8601 format.
* Dynamic defaults can also be set using **Data Model** attributes or process data.
* **Data Model Integration**:
* All external and internal date attributes, including those used by adaptors or business rules, must be explicitly defined in the **Data Model**.
* **UI Designer Overrides**:
* Overrides can be applied to display dates differently for specific UI elements, ensuring flexibility for localized formatting.
### Recommendations for transition
* **Existing Processes**:
* Leave Datepicker components in `Legacy` mode unless business rules and workflows are updated to support ISO 8601.
* **New Processes**:
* Use `Standard Date` to ensure future compatibility and alignment with ISO 8601 formatting.
* **Documentation**:
* Review and update all timer expressions, adaptors, and external data feeds to use ISO 8601 format for consistency.
***
## Updates to expression evaluation
**What Changed:**
* A fix was implemented in the web expression evaluator regarding how string values are handled during process value replacement.
* Previously, when evaluating dynamic and computed expressions, string variables required manual insertion of double quotes (`""`) because the system did not automatically add them.
* With the recent fix, the system now **automatically adds the necessary quotes** for string replacements.
**Impact:**
* **Existing Expressions:** If your current dynamic or computed expressions include manually added quotes around string values, these might now result in redundant quotes or incorrect string formatting.
* **Behavioral Shift:** The automatic quote addition alters how string values are processed, which might affect outputs if the expressions were structured with the expectation of manual quotes.
**Action Required:**
1. **Review Your Expressions:** Check any dynamic and computed expressions in your processes that currently include manual double quotes around string values.
2. **Modify as Needed:** Remove unnecessary double quotes where the system now handles them automatically to prevent duplicate quoting or formatting issues.
***
## Export/import enumerations (CSV)
In the transition from version 4.1.x to 4.6.0, the following columns have been removed from the enum CSV export format:
* description.application
* description.draft
* contentValue.childContentDescription.application
* contentValue.childContentDescription.draft
* contentValue.childContentDescription.type
Existing CSV export/import processes should be updated to remove references to these columns to ensure compatibility with the 4.6.0 release.
***
## Post-migration recommendations
For complex projects with multiple use cases, **do not use the default project for ongoing development or production builds**. Instead:
1. **Create Branches within the Default Project**: Organize and streamline resources by creating branches. This enables a lightweight build focused on production.
2. **Split the Default Project into Smaller Projects**: Use the import/export feature to separate the default project into individual projects by use case.
* **Note**: When importing processes into a new project, resource references may need to be manually reconfigured.
***
# Renderer SDKs
Source: https://docs.flowx.ai/release-notes/v4.x/v4.6.x/v4.6.0-january-2025/migrating-from-v4.1.x-to-v4.6.0/renderers
This guide assists in migrating from FlowX v4.1.x to v4.6.0.
## Android SDK migration guide
### Initialization config changes
A new configuration parameter named `locale` was added in order to improve formatting the dates, numbers and currencies.
When the SDK initialization happens through the `FlowxSdkApi.getInstance().init(...)` method, the argument must be included inside the `config: SdkConfig` parameter value:
```kotlin theme={"system"}
FlowxSdkApi.getInstance().init(
...
config = SdkConfig(
baseUrl = "URL to FlowX backend",
imageBaseUrl = "URL to FlowX CMS Media Library",
enginePath = "some_path",
language = "en",
locale = Locale.getDefault(), // e.g. Locale("en", "US"), Locale("fr", "CA")
validators = mapOf("exact_25_in_length" to { it.length == 25 }),
enableLog = false,
),
...
)
```
### Changes when starting a Flowx process
Two new parameters were added:
| Name | Description | Type | Requirement |
| ---------------- | -------------------------------------------------------------------------------------- | --------------- | -------------------------------- |
| `projectId` | The id of the project containing the process to be started | `String` | Mandatory |
| `onProcessEnded` | Callback function where you can do additional processing when the started process ends | `(() -> Unit)?` | Optional. It defaults to `null`. |
```kotlin theme={"system"}
fun startProcess(
projectId: String,
processName: String,
params: JSONObject = JSONObject(),
isModal: Boolean = false,
onProcessEnded: (() -> Unit)? = null,
closeModalFunc: ((processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
### Changes when resuming a Flowx process
One new parameter was added:
| Name | Description | Type | Requirement |
| ---------------- | ---------------------------------------------------------------------------------------- | --------------- | -------------------------------- |
| `onProcessEnded` | Callback function where you can do additional processing when the continued process ends | `(() -> Unit)?` | Optional. It defaults to `null`. |
```kotlin theme={"system"}
fun continueProcess(
processUuid: String,
isModal: Boolean = false,
onProcessEnded: (() -> Unit)? = null,
closeModalFunc: ((processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
### Changes regarding the implementation of Custom Components
The support for classical **[Android View](https://developer.android.com/reference/android/view/View)** system has been dropped.
A Custom Component can now be implemented only by using the **[Compose](https://developer.android.com/compose)** UI system.
This means that the `CustomViewComponent` is now ignored in the internals of the SDK and has been marked as `@Deprecated`, in order to be completely removed in the next release.
There is no immediate need to update any of the existing components.
### Public API changes
The `changeLanguage` method has been updated and renamed to `changeLocaleSettings`, in order to accommodate the newly added `locale` config parameter:
```kotlin theme={"system"}
fun changeLocaleSettings(locale: Locale, language: String)
```
### Library dependencies updates
* **[Kotlin](https://kotlinlang.org/)**: 1.9.22 **↗** **1.9.24**
* **[Compose BOM](https://developer.android.com/jetpack/compose/bom/bom-mapping)**: 2024.02.00 **↗** **2024.06.00**
* **[Compose Compiler](https://developer.android.com/jetpack/androidx/releases/compose-compiler)**: 1.5.9 **↗** **1.5.14**
* **[Gson](https://github.com/google/gson)**: 2.10.1 **↗** **2.11.0**
***
## iOS SDK migration guide
### Initialization config changes
A new configuration parameter, named `locale` was added in order to improve formatting the dates, numbers and currencies.
The locale needs to be set on the `FXConfig.sharedInstance.configure` method
```swift theme={"system"}
FXConfig.sharedInstance.configure { (config) in
config.locale = "en-US"
...
}
```
### Changes when starting a process
Two new parameters were added on the 3 available start process methods:
| Name | Description | Type | Requirement |
| ---------------- | -------------------------------------------------------------------------------------- | --------------- | ------------------------------- |
| `projectId` | The uuid string of the project containing the process to be started | `String` | Mandatory |
| `onProcessEnded` | Callback function where you can do additional processing when the started process ends | `(() -> Void)?` | Optional. It defaults to `nil`. |
```swift theme={"system"}
func startProcess(projectId: String,
name: String,
params: [String : Any]?,
isModal: Bool = false,
showLoader: Bool = false,
completion: ((UIViewController?) -> Void)?,
onProcessEnded: (() -> Void)? = nil)
```
### Changes when resuming a Flowx process
One new parameter was added on the 3 available continue process methods:
| Name | Description | Type | Requirement |
| ---------------- | -------------------------------------------------------------------------------------- | --------------- | ------------------------------- |
| `onProcessEnded` | Callback function where you can do additional processing when the started process ends | `(() -> Void)?` | Optional. It defaults to `nil`. |
```swift theme={"system"}
func continueExistingProcess(uuid: String,
name: String,
isModal: Bool = false,
completion: ((UIViewController?) -> Void)? = nil,
onProcessEnded: (() -> Void)? = nil)
```
### Updated FXDataSource protocol
A new method has been added to the `FXDataSource` protocol. Update conformance to protocol by adding the implementation of the new func.
```swift theme={"system"}
func newProcessStarted(processInstanceUuid: String) {
}
```
### Public API changes
The `changeLanguage` method has been updated and renamed to `changeLocaleSettings`, in order to accommodate the newly added `locale` config parameter:
```swift theme={"system"}
func changeLocaleSettings(locale: String?, language: String?)
```
***
## Angular SDK migration guide
### Upgrading to the new SDK libraries
The Angular SDK node packages have been updated and will use the latest versions Angular (version 19), thus all container apps that want to use the new SDKs should first update the Angular version of the container apps.
In the following we cover the migration guide for a container app from Angular v17 to v19 and the new SDKs.
* remove `material-moment-adapter` unless its not used in custom components (usually together with material datepicker) and also the `moment` package (unless used elsewhere in the project )
```bash theme={"system"}
npm uninstall @angular/material-moment-adapter
npm uninstall moment
```
* remove old FlowX SDK libraries:
```bash theme={"system"}
npm uninstall @flowx/ui-sdk @flowx/ui-theme @flowx/ui-toolkit
```
* in `angular.json` remove references to old stylesheets:
```bash theme={"system"}
"./node_modules/@flowx/ui-sdk/src/assets/scss/style.scss"
"./node_modules/paperflow-web-components/src/assets/scss"
"./node_modules/@flowx/ui-sdk/src/assets/scss"
```
* remove old FlowX SDKs explicit dependencies. Please check before removing that packages are not used in the container app or custom components.
```bash theme={"system"}
npm uninstall date-fns event-source-polyfill inputmask ng2-pdfjs-viewer vanillajs-datepicker @ngneat/input-mask deepmerge-ts marked-mangle
```
* remove deprecated `Angular Flex` library (the new sdks don't use it anymore and the package has been deprecated by the Angular team) unless it is not used in container app or custom components
```bash theme={"system"}
npm uninstall @angular/flex-layout
```
* Make sure to have the Angular CLI installed at version 18 (check with `ng --version`)
```bash theme={"system"}
npm install -g @angular/cli@18
```
* Run the Angular update for version 18
```bash theme={"system"}
ng update @angular/core@18 @angular/cli@18
```
* Update Angular CDK or Angular Material
```bash theme={"system"}
ng update @angular/cdk@18
```
or, if the container app uses Angular Material, run:
```bash theme={"system"}
ng update @angular/material@18
```
* Optionally, if your project uses other angular packages (ex. `NgRx`) please run migrations to v18 for each of them before proceeding. You can find details on the libraries documentation pages.
* Angular has changed the default build path in the `dist` folder, it now uses a `browser` folder for the build output. In order to place the output of the build command directly in the `dist/[APP_NAME]` folder, add the following change in `angular.json`:
```json theme={"system"}
{
...
"architect": {
...
"build": {
...
"options": {
...
"outputPath": {
"base": "dist/flowx-demo-app",
"browser": "" <-- add this line
},
}
}
}
}
```
* Make sure to have the Angular CLI installed at version 19 (check with `ng --version`)
```bash theme={"system"}
npm install -g @angular/cli@19
```
* Run the Angular update for version 19
```bash theme={"system"}
ng update @angular/core@19 @angular/cli@19
```
* Update Angular CDK or Angular Material
```bash theme={"system"}
ng update @angular/cdk@19
```
or, if the container app uses Angular material, run:
```bash theme={"system"}
ng update @angular/material@19
```
* Optionally, if your project uses other Angular packages (ex. `NgRx`) please run migrations to v19 for each of them before proceeding. You can find details on the libraries documentation pages.
* Also, it is recommended that you update the `target` and `module` settings in the `tsconfig.json` file to the new version, although be advised that this might require additional changes in the codebase due to new compilation errors that might arise.
```json theme={"system"}
{
...
"compilerOptions": {
...
"target": "ES2022",
"module": "ES2022"
}
}
```
**Adding overrides for libraries that have a dependency on Angular version \< 19**
For some libraries, the required angular version might not be up to date or compatible with the new Angular version. In this case, you can add an override in the `package.json` file to force the library to use the new Angular version.
* For example, the `ng2-pdfjs-viewer` library has a dependency on Angular version 18 and will not work with the installed Angular version 19. To force the library to use the new Angular version, add the following override in the `package.json` file:
```json theme={"system"}
{
...
"overrides": {
"ng2-pdfjs-viewer": {
"@angular/common": "^19.0.0",
"@angular/core": "^19.0.0",
"ng-packagr": "^19.0.0"
}
}
}
```
**Install new packages**:
**ACTION REQUIRED**: Update to the latest version 4.6 to ensure optimal performance and compatibility.
```bash theme={"system"}
npm install @flowx/core-sdk@5.63.0 @flowx/core-theme@5.63.0 @flowx/angular-sdk@5.63.0 @flowx/angular-theme@5.63.0 @flowx/angular-ui-toolkit@5.62.1
```
* Install a type dependency for the SSE library:
```bash theme={"system"}
npm install --save-dev @types/event-source-polyfill
```
* run through all the migration steps in the [New SDK Api changes](#new-sdk-api-changes) section below.
Each migration requires a 'clean' repository state. Make sure to commit all changes before starting the next migration step.
After each Angular update it is recommended you restart your editor or TS Server, to use the new TS version since some import errors might appear.
### New SDK API changes
#### Renderer SDK component usage
In the Angular SDK, the `` component has two new parameters have been introduced: `projectInfo` and `locale`. These additions help support localization and project-specific configurations.
| Name | Description | Type | Requirement |
| ------------- | ----------------------------------------------------------------------------------------------- | --------------------- | ----------- |
| `projectInfo` | Object containing an `projectId` key, which identifies the project of the process to be started | `{projectId: string}` | Mandatory |
| `locale` | Provides region-specific settings for localization. | `string` | Mandatory |
Add the definitions for these properties in the class file of the component that uses the process renderer component:
```typescript theme={"system"}
projectInfo = { projectId: 'your-project-id' },
locale = 'en-US',
```
Use these parameters in the template as inputs for the `` component:
```html theme={"system"}
```
#### API changes
Process Renderer:
| Category | Old Approach | New Approach |
| -------------------- | --------------------------------- | ------------------------------------ |
| **Process Renderer** | `FlxProcessModule.forRoot({...})` | `FlxProcessModule.withConfig({...})` |
#### Import path updates
| Category | Old Approach | New Approach |
| -------------------------- | --------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| **Import Paths** | `@flowx/ui-sdk` | `@flowx/angular-sdk` (or, in some cases `@flowx/core-sdk`) |
| | `@flowx/ui-theme` | `@flowx/angular-theme` |
| | `@flowx/ui-toolkit` | `@flowx/angular-ui-toolkit` |
| **Process Module** | `import {FlxProcessModule} from '@flowx/ui-sdk';` | `import {FlxProcessModule} from @flowx/angular-sdk` |
| **Localization Module** | `import {FlxLocalizationModule} from '@flowx/ui-sdk';` Include in module imports | `import {FlxLocalizePipe} from '@flowx/angular-sdk';` Remove from module imports |
| **Task Management** | `import {FlxTaskManagementModule} from '@flowx/ui-sdk';` | `import {FlxTasksManagementComponent} from '@flowx/angular-sdk';` |
| **Client Store Interface** | `import {ClientStoreInterface} from '@flowx/ui-sdk';` | `import {ClientStoreInterface} from '@flowx/core-sdk';` |
You can also remove the `FlxLocalizationModule` from any `imports` arrays in modules, and import the `FlxLocalizePipe` instead
### Icon module update
The `withExtraIconSet` method has been replaced with `provideExtraIconSet`, which should now be used in the providers array.
```typescript theme={"system"}
@NgModule({
imports: [
IconModule, // Import the IconModule
],
providers: [
// Use provideExtraIconSet to add your custom icon set
provideExtraIconSet({
customIcon1: 'path/to/custom-icon1.svg',
customIcon2: 'path/to/custom-icon2.svg',
// Add more icons as needed
})
]
})
export class AppModule {}
```
### Custom Interceptors
The new FlowX SDKs do not depend on Angular's `HttpClient` to make API calls, so existing interceptors must be adapted to a new format, for Request Interceptos (eg. custom headers) and Response Interceptors (eg. error handling)
For an overview of implementation details, please refer to the respective sections of the renderer documentation for the new API changes.
# FlowX.AI 4.6.0 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.6.x/v4.6.0-january-2025/v4.6.0-january-2025
Welcome, FlowX fam! The 4.6.0 update is here, and it’s packed with features designed to save you time, boost efficiency, and maybe even make you chuckle. Let’s dive into the details, feature by glorious feature. 🎉
## **What's new?** 🆕
### Projects: Order out of chaos
The new Project concept introduces a streamlined approach to managing and deploying complex projects within FlowX. By grouping all related resources—such as processes, enumerations, integrations, and assets—into a single, organized workspace, projects provide a cohesive view for efficient development and deployment.

💼 **Key Benefits**:
* **Unified Workspace**: Group related processes, integrations, assets, and configurations into one tidy space.
* **Version Control**: Manage multiple builds and versions effortlessly. Rollbacks? No sweat.
* **Resource Sharing**: Reuse processes and configurations across projects like a boss.
**Why you’ll love it**: It’s like going from a messy desk to an organized digital office.
🎥 **Quick Demo**: (Who needs text when you have visuals?)
For more details, check out this section
#### 🛠 Config vs Build Mode
**Config Mode**: Tinker, tweak, and perfect.
* Config mode is the environment where you set up, adjust, and manage your project's resources, processes, and configurations. It's the workspace where you fine-tune every aspect of the project before it's ready for deployment. Think of it as the design phase, where the focus is on setup, organization, and preparation.
**Build Mode**: Lock it, load it, deploy it.
* Build mode is the stage where the configurations you've set up are packaged into a deployable form. This is the runtime-ready version of your project, containing everything needed for it to function in a production environment. A build includes a snapshot of the project’s state at a given point, ensuring stability and predictability when deployed.
For more details, check out this section
For more details, check out this section
***
### Integration Designer: Connect like a pro
It’s like a dating app for your systems: drag, drop, connect, and let the workflows flow.

API integration just got easier! Integration Designer simplifies connecting FlowX with external systems using REST APIs.
✨ **The magic of it**:
* **Drag-and-Drop Interface**: Map data, define workflows, and configure endpoints like a breeze.
* **Flexible Authorization**: Use Service Tokens, Bearer tokens, or go authentication-free.
* **Error Management**: Built-in tools ensure your integrations don’t ghost you.
**Fun Fact**: Integration Designer doesn’t just test APIs (we love you, [Postman](https://www.postman.com/)❤️). It automates workflows, saving you tons of time.
For more details, check out this section
***
### Merge Conflicts 2.0: Merge without the drama
Merging branches? We've overhauled the process to make it faster, smarter, and far less painful.

🧩 **What’s New**:
* **Advanced Conflict Detection**: Pinpoint issues by resource type (Processes, Enumerations, Media, etc.).

* **Resource-Level Resolution**: Resolve conflicts directly in the UI with:
* JSON comparisons (color-coded for clarity!).
* Navigation tools to jump between differences.
* Progress tracking for reviewed items.


Handle unresolved conflicts with the **Merge Anyway** option, which provides flexibility while maintaining control over outcomes:
**Pro Tip**: Use the “Merge Anyway” option if you need to override unresolved conflicts (but use it wisely!).
* A confirmation modal explains how unresolved conflicts will be handled (e.g., prioritizing source branch changes).
* Allows merging to continue even when some conflicts remain unresolved.

***
### AI Agents: Smart, adaptable, always ready to help
FlowX AI Agents bring automation to your fingertips, powered by a flexible, LLM-agnostic core.
🤖 **Why It’s Cool**:
* Works with both open-source and private language models.
* Secure, on-premise deployments available.
* Automates business processes and interactions.
🎥 Check out a quick demo:
Stay tuned for more.
***
### Localization and Internationalization
FlowX is now more global-friendly with enhanced localization features.
Enhanced formatting options for dates, times, numbers, and currencies with support for various international standards including short, medium, long, full, and custom formats.
Support for currency formatting with options to display values using ISO codes or symbols, adapting to user-selected locales and regional preferences.
Comprehensive settings for pluralization, capitalization, alignment, and sorting that adapt to regional requirements, helping cater to a diverse global user base.
New options in the UI Designer to override general settings for text, messages, links, and form elements based on locale and region.
Static and dynamically generated legal documents can now be customized based on regional and locale settings, improving compliance and communication with local audiences.
For more details, check out this section
***
### Data Model 2.0: Data handling, but make it fashion
In this release, we've introduced Data Model 2.0, a major upgrade designed to simplify and enhance data handling. Key improvements include the introduction of reusable objects, a visual representation of complex data structures, and dynamic data binding, all aimed at creating a more reliable and intuitive experience. The new model ensures references are automatically updated when changes are made, streamlining data management across the platform.
**Highlights**:
* **New Root Element**: Provides a structural basis without impacting business logic, ensuring a clear and organized data structure.
* **Enhanced Data Binding**: Expanded to more areas, with dynamic updates based on changes in the data model.
* **Localization**: Added handling mechanism for locale-specific formatting, ensuring accurate data representation.
For more details, check out this section
***
### Task management 2.0
We've enhanced Task Management capabilities, making it easier to create, track, and manage tasks efficiently. The updated Task Management features include customizable views and advanced filtering and sorting options for task data. Additionally, users can now implement both low-code and full-code solutions for a tailored Task Management experience, ensuring maximum flexibility for different business needs.

For more details, check out this section
***
### UI Designer
#### Grid layout
We are excited to introduce the Grid Layout feature in this release, enhancing the flexibility and usability of the UI Designer for creating structured and responsive layouts. With the new Grid Layout, users can organize form elements, tables, and other components using a multi-column and row system, allowing for more complex, bidirectional designs compared to the previous flex-based layout.

#### Table
The Table component is a simple and flexible way to display data in web applications. It lets you customize columns, add pagination, sort and filter data, and apply your own styling. You can resize columns, scroll through data, and even add actions like editing or deleting rows directly in the table. It’s easy to set up, with default columns and rows generated automatically based on your data.

For more details, check out this section
#### FlowX.AI UI Designer new navigator
We are thrilled to introduce the new and improved **UI Designer Navigator**, a major update designed to streamline your UI design process.
The UI layer panel has been redesigned for a more intuitive experience, making it easier to manage and navigate through your design elements.
Dragging and dropping components in the preview is now smoother and more precise, allowing for faster and easier creation of UIs.
You can now change the root component from a form group to a container or vice versa, offering greater flexibility when copying nodes or resolving configuration problems.
It is now simpler to identify where you are placing a component within the hierarchy, thanks to the enhanced drag/reorder functionality in the right panel.
#### Conditional formatting for UI elements
Dynamically update styling and properties of UI elements based on conditions, reducing the need for multiple prototypes.

Conditional styling is available for **text**, **link**, and **container** UI elements based on specific conditions.
#### Hide expressions enhancements
Expanded hide expressions functionality to include:
* Cards
* Collection prototypes and children
* Table cell children (e.g., texts, images, buttons, links)
#### UI actions
* Added a new UI action **Start new project instance**
* Removed the **Start Process Inherit** UI action type.
#### UI action form updates
* Introduced **Functional** and **UX sections** for all action types, with a checkbox for **Add Analytics Name** in the UX section.
* Simplified custom and exclude key management.

***
### Start new project instance action
We’ve introduced the Start New Project Instance node action, enabling users to initiate a completely new process from within an ongoing one. This functionality is perfect for scenarios where isolated use cases are managed across different projects or environments.

***
### Custom components validation
You are able to validate and retrieve data from a generated screen, including data from a custom form section. Additionally, you’ll have the ability to trigger and manage data directly within that section. This will be a major benefit for clients who have chosen to create custom components for the entire screen (for example, a form that isn’t supported natively by the platform).
***
### Autocomputed data to send
In previous platform versions, when creating your UI screens and working with data, you had to ensure that all the data stored in your process keys was saved in the process instance. This required adding an extra parameter called "Data to send" to the "Save Data" node action.
**Older versions** vs **v4.6.0**:
Now, with the autocompute feature, this step is no longer necessary, as the data is automatically saved and sent on your process instance.
You no longer need to add "Save Data" node actions, but make sure to include "Forms to Validate" on the UI Actions. This helps ensure that data is submitted correctly and automatically activates any added validators where they exist.

However, you still have the option to customize which keys are included or excluded as needed.

***
### **Scripting UX Improvements**: *Write code like a wizard*
* **Autocomplete**: Get tailored suggestions based on your data model.
* **New Editors**: JSON and hide/disable expressions editors now include examples, syntax help, and better visual feedback.

***
### React & Angular SDKs
Dev friends, we heard you. FlowX now integrates smoothly into your React and Angular apps. It’s like peanut butter and jelly, but make it code.
#### React SDK
With the 4.6.0 release, we're excited to announce the launch of the FlowX React SDK! This new SDK empowers developers to seamlessly integrate FlowX.AI capabilities into React applications, making it easier than ever to build highly interactive, responsive, and dynamic user experiences.
To get started, simply install the FlowX React SDK via npm and check our documentation for examples and best practices!
#### New Angular SDK
We're excited to announce new releases for FlowX packages to support web applications:
* `@flowx/core-sdk`
* `@flowx/angular-sdk`
* `@flowx/angular-theme`
* `@flowx/angular-ui-toolkit`
* `@flowx/core-theme`
We recommend upgrading to the **latest** versions of all @flowx packages to take full advantage of these new features and improvements. Check the deployment guidelines for version details.
***
### Analytics integration for Container Apps
Container apps now support tracking "Screen Displayed" and "Action Executed" events, configurable in the UI Designer to improve insights into user interactions.
**UI Designer updates**
* **Analytics Screen Name:** Configurable under Root UI components (Cards and Containers) to enable tracking in analytics platforms like Google Analytics.
"Screen Displayed" events support user task-based reporting, such as when a user task screen is shown.

The configured values are stored in `flowxProps.analytics`, making them accessible for integration with analytics tools.
* **Action Analytics:** Tracks user actions (e.g., button clicks) with tags set directly in the UI Action Form.
Added analytics configuration in the **UX Section** for all UI action types.

Values are saved in `params.analytics` via the PATCH `/actions` request.
**Renderers updates**
Renderers now expose a public API for triggering analytics events:
* **Screen Events:** Triggered on user task display, using `flowxProps.analytics`.
* **Action Events:** Triggered on action execution, using `params.analytics`.
Dynamic values such as process store keys and replace tags are supported for more contextual tracking.
***
### Plugin updates
**Notifications** and **Documents** plugins have been integrated as **project resources**.
***
### Scheduled Processes: Timer management reimagined
We've completely redesigned how you manage timer-triggered processes. Before 4.6.0, timer activation was managed through a quick actions menu in process definition headers; now it's handled via dedicated UI section in the Runtime tab under Scheduled Processes.

🕒 Key Improvements:
* **Centralized Timer Management:** All process timers are now visible and manageable in one dedicated location
* **Persistent Settings:** Timer configurations persist across build exports/imports
* **Environment Control:** Activate or deactivate timers without redeploying your application
For more details, check out this section
## Bug fixes 🐞
### Rendering
* **Default Value Initialization for UI Elements**: Resolved an issue where certain UI elements were initialized with incorrect default values.
* **Improved Security for Hidden Fields**: Fixed a vulnerability where hidden fields could be accessed through browser developer tools.
* **Form Validation Reset on UI Dismissal**: Addressed an issue where form validation errors persisted after the UI was closed.
* **Keybinding Issues on Windows**: Fixed a bug where pressing specific keys triggered unintended operations in the designer.
* **Input Field Validation for Number Type**: Corrected the validation logic for number input fields to ensure consistent behavior.
* **Improved Datepicker Popup Positioning**: Resolved an issue where the datepicker popup overlapped the associated input field.
* **Manual Date Entry in Datepicker**: Fixed an issue where manually entering a date after selecting one from the datepicker caused errors.
* **Enhanced Update Mechanism for Custom Components**: Improved the reliability of updates for custom components to reflect changes consistently.
## Known issues 😢
We’re aware of a few quirks during merge conflicts and are working to fix them. Here’s a quick rundown:
* After a merge, sequences without a connection to an end node may appear on the canvas in cases of conflicts related to deleted nodes in one of the versions. This may occur because the merge mechanism does not detect that a sequence needs to be deleted if, in the final version, the node remains deleted.
* Navigation areas – After a merge, inconsistencies in the navigation areas hierarchy calculated during merging may result in navigation areas being hidden in the final merged version.
* No merge conflict detected if a user task node is deleted in the source branch and its UI is modified in the destination branch.
* Nodes may end up having two different outgoing sequences in certain scenarios: When a node is not connected to another node, and both the source and target branches define different sequences to different nodes, the merged version may contain both sequences. In particular, this may cause inconsistencies for boundary nodes, which cannot have multiple outgoing sequences.
* Gateway nodes may lose some of their configurations during merging when conflicts arise.
* Conflicts arising from moving nodes to different swimlanes in both the source and target branches are not detected correctly and result in a merge error.
* **Duplicate content values can be created during merging**: Merging branches with enumeration updates can result in duplicate content values or child enums with the same code. This occurs when identical names are added to the same enum in different branches, bypassing backend validation. Instead of flagging a conflict, the merge proceeds, creating duplicate entries. This issue disrupts the expected uniqueness constraint for enumeration values.
* **Enum content values might not save correctly in some cases**: In specific scenarios involving transformations of content values into child enums across branches, content values added in one branch may not appear after merging. Despite accepting changes from the branch where the content value was added, the merged version omits it, leading to incomplete or inconsistent enumeration data.
* **New substitution tags with the same name on different branches aren’t flagged**: Merging branches that include new substitution tags with identical names on different branches does not trigger a conflict. Instead, both tags are retained, resulting in duplicate substitution tags with the same name but different values. This issue bypasses expected conflict detection and can lead to inconsistencies in substitution tag usage.
* **Adding values to deleted data model keys does not raise conflicts**: When values are added to a data model key in one branch and the same key is deleted in another, merging does not generate a conflict. Instead, the added values from the first branch are silently lost in the merged version. This issue bypasses expected conflict detection, leading to data loss and inconsistencies in the resulting data model.
* Branches with media library assets sometimes fail to merge into the main branch: Merging branches with media library assets can result in a 500 Internal Server Error when changes to the same asset occur across multiple branches. This issue typically arises when one branch is merged into another, and then the combined branch is merged into the main branch. The failure occurs due to null parameter handling during the merge process, preventing the merge from completing successfully.
* Branches with notification and document templates fail to merge into the main branch
* After a successful merge, the merged version is not selected in the versioning modal.
* Some entries in the merge conflicts tree may show numbers instead of specific identifiers (e.g. forms);
* **Unnecessary scrollbars appear in the merge modal for single items**: The merge conflict modal displays unnecessary scrollbars when only a single item is present in the list. This occurs in scenarios where media library assets with long keys are involved, creating a layout issue that affects the user interface. While functionality is not impacted, this visual inconsistency can reduce the overall user experience during conflict resolution.
* **Fields like `originalCreationTimestamp` and `flowxUuid` are incorrectly flagged as conflicts**: The merge conflict modal displays unnecessary scrollbars when only a single item is present in the list. This occurs in scenarios where media library assets with long keys are involved, creating a layout issue that affects the user interface. While functionality is not impacted, this visual inconsistency can reduce the overall user experience during conflict resolution.
## Changes 🔧
* **Web Renderer Caching:** Improved resource caching with browser mechanisms keyed to build IDs.
* **Process Designer:** Enhanced drag-and-drop functionality for node placement.
***
## Additional information
For deployment guidelines and further details, refer to:
Migrating from v4.1.x:
# Deployment guidelines v4.6.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.6.x/v4.6.1-february-2025/deployment-guidelines-v4.6.1
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

After upgrading to the 4.6.1 FlowX.AI release, you cannot import old process definitions or resources from versions older than 4.6.0.
## Component versions
| Component | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **8.1.1** | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **7.2.6** | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.69.3** | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.69.3** | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.69.3** | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **5.69.3** | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.69.3** | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.69.3** | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.69.3** | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.69.3** | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.69.3** | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.2.2** | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 4.1.3 | 4.1.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.0.4** | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.0.25** | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | **4.0.4** | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **4.0.11** | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
Note: The same container image and Helm chart are used for **Application Manager** and **Runtime Manager**.
## AI Agents
| Component | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ---------- | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.9.16** | 1.9.10 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.6.15** | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.10.6** | 1.10.3 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.2.27** | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.6.5** | 1.5.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.6.1 | Keycloak | 22.x |
| 4.6.1 | Kafka | 3.2.x |
| 4.6.1 | PostgreSQL | 16.2.x |
| 4.6.1 | MongoDB | 7.0.x |
| 4.6.1 | Redis | 7.2.x |
| 4.6.1 | Elasticsearch | 7.17.x |
| 4.6.1 | Oracle Database | 21C/ 21-XE |
| 4.6.1 | Angular (Web SDK) | 19.x |
| 4.6.1 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
# Migrating from previous versions to v4.6.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.6.x/v4.6.1-february-2025/migrating-from-v4.1.x-to-v4.6.1
If you're upgrading from a v4.6.0 version, make sure to first review the migration guide for v4.6.0 release documentation to capture all the significant changes and also the deployment guidelines:
If you're moving from v4.1.x to v4.6.1, don’t forget to check the relevant migration guides for each version to ensure nothing is missed:
Do not also forget to check all the deployment guidelines in between releases to do not miss important configurations or changes:
# FlowX.AI 4.6.1 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.6.x/v4.6.1-february-2025/v4.6.1-february-2025
FlowX.AI 4.6.1 is here with important fixes and improvements to keep things running smoothly. No new features this time—just focused updates to improve stability, fix bugs, and enhance overall performance. Simple, clean, and efficient.
## **What's new?** 🆕
### Rendering
**Form Elements** improvements:
* **Default Value Handling**: Defaults are applied only when no existing value is found, and set upon first display (with specific exceptions).
* **Data Consistency**: Form elements now save data in standardized formats based on type for improved reliability.
* **Smart Defaults**: Clear fallback behaviors for elements like switches, sliders, and checkboxes when no value is present.
* **Synchronized Inputs**: Linked form elements (e.g., input + slider) stay in sync with automatic value adjustments within set limits.
* **Dynamic Dependencies**: Form elements can dynamically adjust based on related components’ values for greater flexibility.
### Merge conflicts
* Improvement: merged version is now selected after a successful merge in versioning modal.
## Bug fixes 🐞
### Merge conflicts
* Fixed an issue that caused conflicts involving notification and document templates to fail.
* Fixed an issue where merges failed when a deleted configuration parameter was updated on a branch.
* Fixed an issue that resulted in duplicate substitution tag keys appearing in the merged version.
* Fixed an issue where merges failed due to the same dependency being added to both the source and target branches.
* Fixed issues related to workflow conflicts.
### Rendering
* Fixed an issue where documents from the media library were not loading correctly when added as a file preview in a user task.
### Integration Designer
* Fixed issue causing a 400 error when adding an enum mapper to the body tab due to incorrect data validation.
* Fixed issue where the last attribute in the objects table was not visible at higher zoom levels due to UI rendering constraints.
## Known issues 😢
We’re aware of a few quirks during merge conflicts and are working to fix them. Here’s a quick rundown:
* After a merge, sequences without a connection to an end node may appear on the canvas in cases of conflicts related to deleted nodes in one of the versions. This may occur because the merge mechanism does not detect that a sequence needs to be deleted if, in the final version, the node remains deleted.
* Navigation areas – After a merge, inconsistencies in the navigation areas hierarchy calculated during merging may result in navigation areas being hidden in the final merged version.
* No merge conflict detected if a user task node is deleted in the source branch and its UI is modified in the destination branch.
* Nodes may end up having two different outgoing sequences in certain scenarios: When a node is not connected to another node, and both the source and target branches define different sequences to different nodes, the merged version may contain both sequences. In particular, this may cause inconsistencies for boundary nodes, which cannot have multiple outgoing sequences.
* Gateway nodes may lose some of their configurations during merging when conflicts arise.
* Conflicts arising from moving nodes to different swimlanes in both the source and target branches are not detected correctly and result in a merge error.
* **Duplicate content values can be created during merging**: Merging branches with enumeration updates can result in duplicate content values or child enums with the same code. This occurs when identical names are added to the same enum in different branches, bypassing backend validation. Instead of flagging a conflict, the merge proceeds, creating duplicate entries. This issue disrupts the expected uniqueness constraint for enumeration values.
* **Enum content values might not save correctly in some cases**: In specific scenarios involving transformations of content values into child enums across branches, content values added in one branch may not appear after merging. Despite accepting changes from the branch where the content value was added, the merged version omits it, leading to incomplete or inconsistent enumeration data.
* **Adding values to deleted data model keys does not raise conflicts**: When values are added to a data model key in one branch and the same key is deleted in another, merging does not generate a conflict. Instead, the added values from the first branch are silently lost in the merged version. This issue bypasses expected conflict detection, leading to data loss and inconsistencies in the resulting data model.
* Branches with media library assets sometimes fail to merge into the main branch: Merging branches with media library assets can result in a 500 Internal Server Error when changes to the same asset occur across multiple branches. This issue typically arises when one branch is merged into another, and then the combined branch is merged into the main branch. The failure occurs due to null parameter handling during the merge process, preventing the merge from completing successfully.
* After a successful merge, the merged version is not selected in the versioning modal.
* Some entries in the merge conflicts tree may show numbers instead of specific identifiers (e.g. forms);
* **Unnecessary scrollbars appear in the merge modal for single items**: The merge conflict modal displays unnecessary scrollbars when only a single item is present in the list. This occurs in scenarios where media library assets with long keys are involved, creating a layout issue that affects the user interface. While functionality is not impacted, this visual inconsistency can reduce the overall user experience during conflict resolution.
* **Fields like `originalCreationTimestamp` and `flowxUuid` are incorrectly flagged as conflicts**: The merge conflict modal displays unnecessary scrollbars when only a single item is present in the list. This occurs in scenarios where media library assets with long keys are involved, creating a layout issue that affects the user interface. While functionality is not impacted, this visual inconsistency can reduce the overall user experience during conflict resolution.
## Additional information
For deployment guidelines and further details, refer to:
Migrating from v4.6.0:
# Deployment guidelines v4.7.0
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.0-february-2025/deployment-guidelines-v4.7.0
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

After upgrading to the 4.7.0 FlowX.AI release, you cannot import old process definitions or resources from versions older than 4.6.0.
In version 4.7, the import-export functionality for application-version is no longer backward compatible.
* Zip files exported from version 4.7 cannot be imported into earlier FlowX versions.
* Similarly, zip files from earlier versions cannot be imported into 4.7.
Note: Zip files for builds and specific resources remain unaffected.
## Component versions
| Component | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **8.3.1** | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **7.5.1** | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.80.6** | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.80.6** | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.80.6** | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **5.80.6** | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.80.6** | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.80.6** | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.80.6** | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.80.6** | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.80.6** | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.2.11** | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **5.0.2** | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **5.0.5** | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **6.1.0** | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **6.3.1** | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **task-management-plugin** | **7.2.2** | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **4.0.4** | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **6.0.4** | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | **4.0.3** | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.3.2** | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.6.0** | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **2.6.0** | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **2.1.0** | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | **4.0.5** | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **4.0.12** | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
## AI Agents
| Component | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ----------- | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.9.21** | 1.9.16 | 1.9.10 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.7.2** | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.10.13** | 1.10.6 | 1.10.3 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.2.31** | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.7.0** | 1.6.5 | 1.5.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Recommended Supported Version |
| ---------------- | -------------------- | ----------------------------- |
| 4.7.0 | Keycloak | 22.x, 26.x |
| 4.7.0 | Kafka | 3.2.x |
| 4.7.0 | PostgreSQL | 16.2.x |
| 4.7.0 | Oracle Database | 21c, 23ai |
| 4.7.0 | MongoDB | 7.0.x |
| 4.7.0 | Redis | 7.2.x |
| 4.7.0 | Elasticsearch | 7.17.x |
| 4.7.0 | Angular (Web SDK) | 19.x |
| 4.7.0 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
### Deprecation notice
Starting FlowX 5.0, the following versions of 3rd Party Dependencies will no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.9
* Redis versions older than 7.4
# Migrating from previous versions to v4.7.0
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.0-february-2025/migrating-from-v4.1.x-to-v4.7.0
If you're upgrading from a v4.6.x version, make sure to first review the migration guide for v4.6 release documentation to capture all the significant changes and also the deployment guidelines:
If you're moving from v4.1.x to v4.7.0, don’t forget to check the relevant migration guides for each version to ensure nothing is missed:
Do not also forget to check all the deployment guidelines in between releases to do not miss important configurations or changes:
# FlowX.AI 4.7.0 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.0-february-2025/v4.7.0-february-2025
FlowX.AI 4.7.0 is here to keep your projects vibing, your merges drama-free, and your configs under control—because struggling with your platform is *so* last season. 😎🔥
## What's new? 🆕
✅ Copy resources across projects\
✅ Duplicate resources (in the same project/library)\
✅ Resources usage tracking\
✅ Smarter merge conflict detection & resolution\
✅ Libraries can now define configuration parameters\
✅ Dynamic Kafka topics using configuration parameters
## Projects
### Copy resources across projects
Moving resources between projects is now **fast and seamless**. The new **Copy to Another Project** feature ensures all dependencies stay intact, eliminating the hassle of manual adjustments.
1️⃣ **Select a destination** – Choose the target project or library.\
2️⃣ **Pick a branch (if applicable)** – For WIP versions, select the target branch.\
3️⃣ **Review dependencies** – The system displays referenced resources and validates dependencies.\
4️⃣ **Resolve identifier conflicts** – If an identifier already exists in the destination, you'll be prompted to either:
* **Keep both** (create a duplicate)
* **Replace** (overwrite the existing resource)
* **Use destination** (retain the existing resource without copying)
* **No broken references** – Everything stays connected.
* **Auto-add missing dependencies** – No manual setup required.
* **Works with WIP & committed versions (only from committed to WIP)** – Flexibility for your workflow.

Check this section for more details.
***
### Duplicate resources
The **Duplicate Resource** feature lets users create a copy of an existing resource within the same project or library version, streamlining workflows and ensuring quick reusability.
You can duplicate the following resources:
* **Processes**
* **Enumerations**
* **Media files (including Global media library files)**
* **Notification templates**
* **Document templates**
* **Views**
* **Duplicate options** are available from each resource’s three-dot menu (table row & secondary navigation).
* When selected, a **"Duplicate" modal** opens with a prefilled name: *Copy of \[Resource Name]* (which can be edited).
* **Cancel** to discard changes or **Duplicate** to create an exact copy in the same project/library version.
* **Success confirmation:** The system navigates to the newly created resource and displays a success message.
* **Error handling:** If a resource with the same name/key exists, users will be prompted to rename it before proceeding.
💡 **Use cases:**
* Quickly iterate on existing resources.
* Reduce redundant manual setup.
* Maintain consistency within projects.
* Easily clone complex configurations for testing and modifications.
Check this section for more details.
***
### Track where your resources are used
Monitoring your resources has never been simpler and more efficient. Stay on top of where and how they’re being used.


Track where a process is referenced, with a clear **Usage Overview modal** that dynamically updates when references change.
See where enumerations are used across **UI, Data Models, Systems, and Workflows** before making changes.
Identify **which UI elements reference media assets** so you don’t accidentally break designs.
📌 **Before deleting a resource, a confirmation modal lists all affected references. No more surprises!**
***
### Configuration parameters overrides
🔹 **Libraries can now define configuration parameters** to help test processes or workflows that use those parameters.
🔹 However, **libraries do not support overrides**.
* **Overrides for library config parameters must be done within a project** where the library is added as a dependency.
* **Overrides cannot be added in libraries directly.**
💡 **What this means:**
* Libraries provide **default values** for configuration parameters.
* Projects using those libraries **can override these values** as needed.
* This ensures **clear separation between library defaults and project-specific configurations** while maintaining flexibility.
✨ **Overrides take precedence** over library values—so you stay in control.
***
### Merge conflict enhancements
Merge conflicts are never fun, but at least now they’re **easier to handle**.
🚨 Prevents merging if identical resource identifiers exist in both branches (e.g., same name, key, or code).
🖥️ Resize the merge conflict tree for better visibility and navigation.
📢 A new conflict detection system for parent changes/deletions in both branches.
***
## SDK changes
### Expose Enumerations API in Angular SDK
Developers can now dynamically retrieve enumerations via the Angular SDK, making it easier to use enums in custom components like dropdowns.
How it Works?
A new method in the Angular SDK allows direct access to enumerations, reducing manual imports and improving flexibility.
**Usage**
The `getEnumeration()` function returns key-value pairs that can be used in components that need enumeration data:
```typescript theme={"system"}
getEnumeration(enumName: string): { value: string; label: string }[]
```
* `enumName` (string) – The name of the enumeration to retrieve (e.g., 'UserRoles', 'cities')
* Returns: An array of objects containing value-label pairs representing the requested enumeration
The enumeration service works seamlessly with Angular's resource API for reactive state management:
```typescript theme={"system"}
import { Component, effect, model, resource } from '@angular/core';
import { getEnumeration } from '@flowx/angular-sdk';
@Component({
selector: 'app-dynamic-enum-select',
template: `
`
})
export class DynamicEnumSelectComponent {
// Create a signal to track the currently selected enum
enumName = model('UserRoles');
// Use resource API to reactively load enumerations when enumName changes
options = resource({
request: this.enumName,
loader: ({ request: enumName }) => getEnumeration(enumName),
});
constructor() {
effect(() => {
if (this.options.isLoading()) {
console.log(`Loading enumeration: ${this.enumName()}`);
} else {
console.log(`Loaded enumeration: ${this.enumName()}`, this.options.value());
}
});
}
}
```
***
## **Bug fixes** 🐞
✔️ Improved **merge conflict detection and resolution**\
✔️ Fixed **UI rendering issues**
***
## Changes
### Dynamic Kafka topics
FlowX 4.7.0 introduces **Dynamic Kafka Topics**, enabling more flexible and configurable messaging across processes.
🔹 **What’s new?**
* Use **Configuration Parameters** to dynamically assign Kafka topics in **Kafka Send** and **Kafka Receive** actions.
* Concatenate predefined parameters with process variables for **on-the-fly topic selection**.
* Reduce hardcoded values and **simplify environment-specific configurations**.
💡 **Why it matters:**
* Makes **Kafka integrations more scalable** across different deployments.
* Supports **multi-topic messaging** for different use cases without manual updates.
* Ensures better **reusability and maintainability** in process configurations.
📌 Check the [Kafka Send Action](../../4.7.x/docs/building-blocks/actions/kafka-send-action#dynamic-kafka-topics) section for setup details.
***
### Export/import compatibility
In version 4.7, the import-export functionality for application-version is no longer backward compatible.
* Zip files exported from version 4.7 cannot be imported into earlier FlowX versions.
* Similarly, zip files from earlier versions cannot be imported into 4.7.
Zip files for builds and specific resources remain unaffected.
***
## **Additional information**
📌 [Deployment Guidelines v4.7.0](./deployment-guidelines-v4.7.0)\
📌 [Migration Guide (from v4.6.0)](./migrating-from-v4.1.x-to-v4.7.0)
# Deployment guidelines v4.7.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.1-march-2025/deployment-guidelines-v4.7.1
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

After upgrading to the 4.7.1 FlowX.AI release, you cannot import old process definitions or resources from versions older than 4.7.1.
## Component versions
| Component | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **8.5.1** | 8.3.1 | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **7.7.6** | 7.5.1 | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.83.8** | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.83.8** | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.83.8** | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **5.83.8** | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.83.8** | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.83.8** | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.83.8** | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.83.8** | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.83.8** | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.3.3** | 5.2.11 | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **5.0.4** | 5.0.2 | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **5.0.7** | 5.0.5 | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **6.1.3** | 6.1.0 | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **6.3.4** | 6.3.1 | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **task-management-plugin** | **7.2.6** | 7.2.2 | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **4.0.6** | 4.0.4 | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **6.0.6** | 6.0.4 | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | **4.0.5** | 4.0.3 | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.3.9** | 2.3.2 | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.9.4** | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **2.9.4** | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **2.2.2** | 2.1.0 | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | **4.0.7** | 4.0.5 | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **4.0.13** | 4.0.12 | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
## AI Agents
| Component | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ----------- | ------- | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.9.27** | 1.9.21 | 1.9.16 | 1.9.10 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.8.2** | 1.7.2 | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.10.17** | 1.10.13 | 1.10.6 | 1.10.3 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.2.35** | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.7.4** | 1.7.0 | 1.6.5 | 1.5.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Recommended Supported Version |
| ---------------- | -------------------- | ----------------------------- |
| 4.7.1 | Keycloak | 22.x, 26.x |
| 4.7.1 | Kafka | 3.2.x |
| 4.7.1 | PostgreSQL | 16.2.x |
| 4.7.1 | Oracle Database | 21c, 23ai |
| 4.7.1 | MongoDB | 7.0.x |
| 4.7.1 | Redis | 7.2.x |
| 4.7.1 | Elasticsearch | 7.17.x |
| 4.7.1 | Angular (Web SDK) | 19.x |
| 4.7.1 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
### Deprecation notice
Starting FlowX 5.0, the following versions of 3rd Party Dependencies will no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.9
* Redis versions older than 7.4
# Migrating from previous versions to v4.7.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.1-march-2025/migrating-from-v4.1.x-to-v4.7.1
If you're upgrading from a v4.7.0 version, make sure to first review the deployment guidelines for v4.7.0 release documentation to capture all the significant changes and also the deployment guidelines:
If you're upgrading from a v4.6.x version, make sure to first review the migration guide for v4.6 release documentation to capture all the significant changes and also the deployment guidelines:
If you're moving from v4.1.x to v4.7.0, don’t forget to check the relevant migration guides for each version to ensure nothing is missed:
Do not also forget to check all the deployment guidelines in between releases to do not miss important configurations or changes:
# FlowX.AI 4.7.1 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.1-march-2025/v4.7.1-march-2025
FlowX.AI 4.7.1 brings enhanced resource navigation, better error detection, and workflow improvements to make your development journey even smoother! 🚀
## What's new? 🆕
✅ Enhanced resource usage tracking with direct navigation\
✅ Upgraded JavaScript support to ECMAScript 15 (2024) in Business Rules\
✅ Added Python 3 support with 3x performance improvement\
✅ Major performance enhancements for both design time and runtime\
✅ Security enhancements for runtime endpoints
## Projects
### Enhanced resource usage navigation
We've significantly improved how you navigate between resources and their references with direct navigation capabilities. Now you can easily jump from the usage tracking panel to the exact location where a resource is referenced.
1️⃣ **Access resource usage** – View where a resource is being used through the usage panel.\
2️⃣ **One-click navigation** – Use the new redirect button to jump directly to the referenced location.\
3️⃣ **Missing resource detection** – Easily identify and fix missing resource references with clear indicators.
* **Faster troubleshooting** – Directly navigate to problem areas without manual searching.
* **Improved productivity** – Less time spent hunting down references means more time building.
* **Better error prevention** – Quickly spot and fix missing resources before they cause issues.
***
## Enhanced scripting capabilities
### ECMAScript 15 (2024) support for Business Rules
FlowX.AI 4.7.1 brings the latest JavaScript features to your business rules with an upgrade to ECMAScript 15 (2024).
* Access to the latest JavaScript language features
* Modern syntax for cleaner, more maintainable rules
* Enhanced tooling and IDE support
* Write more concise and expressive business rules
* Leverage modern JavaScript patterns and best practices
* Improved developer experience with better IDE integration
**Important Configuration Note:** Nashorn engine remains the default runtime. To enable GraalJS support with its performance improvements, you must set the feature toggle `FLOWX_SCRIPTENGINE_USEGRAALVM` to `true` in the [**Process Engine configuration**](/4.7.x/setup-guides/flowx-engine-setup-guide/engine-setup) and in the **AI Developer** (if used) agent configuration. If this configuration variable is missing or set to `false`, Nashorn will be used.
### Python 3 support for Business Rules
We've upgraded our Python scripting capabilities to Python 3, delivering significant performance improvements while maintaining compatibility.
Python scripts now run at least 3 times faster than with Python 2.7.
Take advantage of Python 3's improved syntax, libraries, and security features.
**Important Configuration Note:** Python 2.7 remains the default runtime. To enable Python 3 support with its performance improvements, you must set the feature toggle `FLOWX_SCRIPTENGINE_USEGRAALVM` to `true` in the [**Process Engine configuration**](/4.7.x/setup-guides/flowx-engine-setup-guide/engine-setup) and in the **AI Developer** (if used) agent configuration. If this configuration variable is missing or set to `false`, Python 2.7 will be used.
More details about the scripting capabilities can be found in the [Supported scripting languages](../../4.7.x/docs/building-blocks/supported-scripts) section.
***
## Performance improvements 🚀
We've made significant performance enhancements throughout the platform to make your development and runtime experience smoother and faster.
### Design time improvements
For large processes, you'll notice dramatic improvements:
| Operation | Improvement |
| ----------------- | -------------- |
| Cloning a process | **5x faster** |
| Opening a process | **70x faster** |
### Runtime enhancements
Platform average response time has been **reduced by 20%** in our comprehensive benchmark\*.
\*The benchmark simulates a typical business process with a combination of user and service tasks. It includes rules that automate decision-making, as well as events for time-sensitive actions and communication. The process also covers various system functions, ensuring the platform can efficiently manage complex workflows with both individual and parallel tasks.
***
## Security enhancements 🔒
We've significantly improved platform security by implementing proper endpoint access controls and separation between internal and public-facing APIs.
Runtime execution proxy vulnerability addressed with comprehensive endpoint updates.
Better separation between design-time and runtime endpoints with proper access controls.
### Endpoint security updates
We've implemented a comprehensive security update for runtime endpoints to prevent potential proxy vulnerabilities:
* Redesigned API structure to separate internal (`runtime-internal`) from external-facing (`runtime`) endpoints
* Migrated design-time operations to use `runtime-internal` endpoints for enhanced security
* Moved specific management operations to dedicated `build-mgmt` endpoints
* Updated all API clients to use the new secure endpoints
**Important:** Make sure to update to the corresponding version of the [**`flowx-admin`**](./deployment-guidelines-v4.7.1#component-versions) to benefit from these security enhancements.
### Enhanced resource caching in Angular SDK
The Angular SDK now includes an improved caching mechanism for CMS resources, optimizing loading times and performance. The cache parameter on the `flx-process-renderer` component allows developers to control caching behavior in different environments.
Find details on controlling CMS resource caching during development and production.
## **Bug fixes** 🐞
* Fixed various minor issues to improve overall stability
* Resolved some UI inconsistencies
* Addresses performance optimizations
* Fixed general usability issues
***
## **Additional information**
📌 [Deployment Guidelines v4.7.1](./deployment-guidelines-v4.7.1)\
📌 [Migration Guide (from v4.7.0)](./migrating-from-v4.7.0-to-v4.7.1)\
📌 [Supported scripting languages](../../4.7.x/docs/building-blocks/supported-scripts)
# Deployment guidelines v4.7.2
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.2-march-2025/deployment-guidelines-v4.7.2
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

After upgrading to the 4.7.2 FlowX.AI release, you cannot import old process definitions or resources from versions older than 4.7.2.
## Component versions
| Component | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **8.9.0** | 8.5.1 | 8.3.1 | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **7.8.5** | 7.7.6 | 7.5.1 | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.84.5** | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.84.5** | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.84.5** | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **5.84.5** | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.84.5** | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.84.5** | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.84.5** | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.84.5** | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.84.5** | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.4.8** | 5.3.3 | 5.2.11 | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **5.0.10** | 5.0.4 | 5.0.2 | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **5.0.16** | 5.0.7 | 5.0.5 | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **6.1.12** | 6.1.3 | 6.1.0 | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **6.3.13** | 6.3.4 | 6.3.1 | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **task-management-plugin** | **7.2.14** | 7.2.6 | 7.2.2 | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **4.0.13** | 4.0.6 | 4.0.4 | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **6.0.14** | 6.0.6 | 6.0.4 | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | **0.2.0** | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | **4.0.12** | 4.0.5 | 4.0.3 | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.3.16** | 2.3.9 | 2.3.2 | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.10.9** | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **2.10.9** | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **2.2.9** | 2.2.2 | 2.1.0 | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | 4.0.7 | 4.0.7 | 4.0.5 | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 4.0.13 | 4.0.13 | 4.0.12 | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
## AI Agents
| Component | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ----------- | ------- | ------- | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.9.35** | 1.9.27 | 1.9.21 | 1.9.16 | 1.9.10 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.8.9** | 1.8.2 | 1.7.2 | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.10.24** | 1.10.17 | 1.10.13 | 1.10.6 | 1.10.3 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.4.1** | 1.2.35 | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.7.9** | 1.7.4 | 1.7.0 | 1.6.5 | 1.5.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Recommended Supported Version |
| ---------------- | -------------------- | ----------------------------- |
| 4.7.2 | Keycloak | 22.x, 26.x |
| 4.7.2 | Kafka | 3.2.x |
| 4.7.2 | PostgreSQL | 16.2.x |
| 4.7.2 | Oracle Database | 21c, 23ai |
| 4.7.2 | MongoDB | 7.0.x |
| 4.7.2 | Redis | 7.2.x |
| 4.7.2 | Elasticsearch | 7.17.x |
| 4.7.2 | Angular (Web SDK) | 19.x |
| 4.7.2 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
### Deprecation notice
Starting FlowX 5.0, the following versions of 3rd Party Dependencies will no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.9
* Redis versions older than 7.4
## Additional configuration
Added new environment variable on Process Engine:
### Message routing configuration
| Environment variable | Description | Default value |
| -------------------------- | --------------------------------------------------------------------- | ------------------- |
| `KAFKA_DEFAULT_FX_CONTEXT` | Default context value for message routing when no context is provided | `""` (empty string) |
When `KAFKA_DEFAULT_FX_CONTEXT` is set and an event is received on Kafka without an fxContext header, the system will automatically apply the default context value to the message.
# Migrating from previous versions to v4.7.2
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.2-march-2025/migrating-from-v4.1.x-to-v4.7.2
If you're upgrading from a v4.7.0 version, make sure to first review the deployment guidelines for v4.7.0 and v4.7.1 release documentation to capture all the significant changes and also the deployment guidelines:
If you're upgrading from a v4.6.x version, make sure to first review the migration guide for v4.6 release documentation to capture all the significant changes and also the deployment guidelines:
If you're moving from v4.1.x to v4.7.0, don’t forget to check the relevant migration guides for each version to ensure nothing is missed:
Do not also forget to check all the deployment guidelines in between releases to do not miss important configurations or changes:
# FlowX.AI 4.7.2 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.2-march-2025/v4.7.2-march-2025
FlowX.AI 4.7.2 delivers improved merge conflict handling with retry capabilities, deprecates DMN business rules, and fixes issues with subprocess handling, media file imports, and OCR functionality to enhance your development workflow! 🚀
## **What's new? 🆕**
✅ Improved merge conflict handling with retry functionality\
✅ Enhanced error messages during failed merges\
✅ Streamlined workflow for resolving merge conflicts
## Merge conflicts
### Improved error messages when merge fails
We've enhanced the merge conflict resolution experience with more informative error messages and a new retry functionality:
* When a merge fails, users can now see a "Retry merge" button on the Merge failed modal
* Clicking this button allows users to attempt the merge again without losing previous work
The system now handles two distinct scenarios:
**1. When conflicts exist:**
* The system opens the Merge conflicts panel with the previous state of the merge before the failed attempt
* This preserves all your conflict resolution work so you can fix the specific issues that caused the failure

**2. When no conflicts exist:**
* The system automatically retries the merge operation
* This streamlines the workflow when the merge failure was due to temporary issues rather than actual conflicts

## Process engine
### Deprecated DMN rules
In version 4.7.2, we've deprecated the [\[**DMN (Decision Model and Notation)**\]](../../4.7.x/docs/building-blocks/actions/business-rule-action/dmn-business-rule-action) business rule actions. This change affects how business rules are configured on task/user task nodes in business processes.
**What's changing:**
* DMN is no longer available as a language option when configuring business rule actions
**What's next:**
For guidance on using alternative business rule languages, please refer to our [supported scripting languages](../../4.7.x/docs/building-blocks/supported-scripts) documentation.
## **Bug fixes** 🐞
* Resolved export/import issues with media library files, particularly for applications migrated from earlier versions
* Fixed an issue where parallel multi-instance Call Activity would incorrectly trigger a subprocess when using an empty array list as a variable
* Fixed a display issue where not all subprocesses were visible in the subprocess list on smaller screens
* Fixed a bug where message events couldn't be caught when placed directly after an uninterrupting timer event
* Resolved "Unsupported Media Type" errors when importing application versions with media file binaries
* Fixed an issue where color palette changes in Theme settings couldn't be saved at 100% browser resolution on smaller screens
* Fixed a issue where OCR plugin failed due to missing correlation headers
***
## **Additional information**
📌 [Deployment Guidelines v4.7.2](./deployment-guidelines-v4.7.2)\
📌 [Migration Guide (from v4.7.0)](./migrating-from-v4.7.0-to-v4.7.2)\
📌 [Supported scripting languages](../../4.7.x/docs/building-blocks/supported-scripts)
# Deployment guidelines v4.7.3
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.3-april-2025/deployment-guidelines-v4.7.3
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

After upgrading to the 4.7.3 FlowX.AI release, you cannot import old process definitions or resources from versions older than 4.7.3.
## Component versions
| Component | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **8.13.0** | 8.9.0 | 8.5.1 | 8.3.1 | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **7.8.13** | 7.8.5 | 7.7.6 | 7.5.1 | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.91.2** | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.91.2** | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.91.2** | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **5.91.2** | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.91.2** | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.91.2** | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.91.2** | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.91.2** | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.91.2** | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.4.12** | 5.4.8 | 5.3.3 | 5.2.11 | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **5.0.11** | 5.0.10 | 5.0.4 | 5.0.2 | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **5.0.17** | 5.0.16 | 5.0.7 | 5.0.5 | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **6.1.13** | 6.1.12 | 6.1.3 | 6.1.0 | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **6.3.16** | 6.3.13 | 6.3.4 | 6.3.1 | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **task-management-plugin** | **7.2.15** | 7.2.14 | 7.2.6 | 7.2.2 | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **4.0.14** | 4.0.13 | 4.0.6 | 4.0.4 | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **6.0.15** | 6.0.14 | 6.0.6 | 6.0.4 | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.2.0 | 0.2.0 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | **4.0.14** | 4.0.12 | 4.0.5 | 4.0.3 | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.6.0** | 2.3.16 | 2.3.9 | 2.3.2 | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.14.0** | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **2.14.0** | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **2.2.11** | 2.2.9 | 2.2.2 | 2.1.0 | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | **4.0.14** | 4.0.7 | 4.0.7 | 4.0.5 | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **4.0.15** | 4.0.13 | 4.0.13 | 4.0.12 | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
## AI Agents
| Component | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ----------- | ------- | ------- | ------- | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.9.37** | 1.9.35 | 1.9.27 | 1.9.21 | 1.9.16 | 1.9.10 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.8.12** | 1.8.9 | 1.8.2 | 1.7.2 | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.10.26** | 1.10.24 | 1.10.17 | 1.10.13 | 1.10.6 | 1.10.3 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.4.3** | 1.4.1 | 1.2.35 | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.7.11** | 1.7.9 | 1.7.4 | 1.7.0 | 1.6.5 | 1.5.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Recommended Supported Version |
| ---------------- | -------------------- | ----------------------------- |
| 4.7.3 | Keycloak | 22.x, 26.x |
| 4.7.3 | Kafka | 3.2.x |
| 4.7.3 | PostgreSQL | 16.2.x |
| 4.7.3 | Oracle Database | 21c, 23ai |
| 4.7.3 | MongoDB | 7.0.x |
| 4.7.3 | Redis | 7.2.x |
| 4.7.3 | Elasticsearch | 7.17.x |
| 4.7.3 | Angular (Web SDK) | 19.x |
| 4.7.3 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
### Deprecation notice
Starting FlowX 5.0, the following versions of 3rd Party Dependencies will no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.9
* Redis versions older than 7.4
# Migrating from previous versions to v4.7.3
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.3-april-2025/migrating-from-v4.1.x-to-v4.7.3
If you're upgrading from a v4.7.0 version, make sure to first review the deployment guidelines for v4.7.x release documentation to capture all the significant changes and also the deployment guidelines:
If you're upgrading from a v4.6.x version, make sure to first review the migration guide for v4.6 release documentation to capture all the significant changes and also the deployment guidelines:
If you're moving from v4.1.x to v4.7.0, don’t forget to check the relevant migration guides for each version to ensure nothing is missed:
Do not also forget to check all the deployment guidelines in between releases to do not miss important configurations or changes:
# FlowX.AI 4.7.3 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.3-april-2025/v4.7.3-april-2025
FlowX.AI 4.7.3 enhances workflow conflict resolution, adds configurable enumeration ordering, and fixes data streams, UI templates, and application export/import issues to improve your development experience! 🚀
## **What's new? 🆕**
✅ Enhanced workflow conflict resolution with improved visibility\
✅ Added ability to configure order attributes on enumerations\
✅ Upgraded conflict management interface for better user experience
## Merge conflicts - workflow improvements
### Enhanced workflow conflict resolution
We've significantly improved how [**workflow**](../../4.7.x/docs/platform-deep-dive/integrations/integration-designer#workflows) conflicts are handled in this release:
* Upgraded to a new version (v2) of the workflow conflict resolution interface
* Now only showing workflow entities that have actual conflicts, making it easier to identify and address issues
* Streamlined the conflict resolution process for a more efficient workflow

**Important note about sequence conflicts:**
When resolving conflicts related to sequences, if you select one of the conflicting sequences, nodes that are no longer connected may remain "orphaned" on the canvas in the merged version. This design decision was made to prevent accidental node deletion. If these orphaned nodes are no longer needed, they can be manually removed in subsequent versions.
## Configurable enumeration ordering
You can now configure the **Order** attribute on enumerations, giving you greater control over how enumeration values are displayed in dropdown lists:
* Set specific order values for each enumeration entry
* Control the presentation sequence in UI components
* Improve user experience by arranging options in logical or prioritized order

**Limitation:** When changing the order value for an enumeration entry, the system does not automatically update the order values of other entries. You'll need to manually adjust the order values of other entries in the interface.
## **Bug fixes** 🐞
* Fixed an issue where workflow nodes could have two output sequences
* Resolved a problem with enumerations displaying in the wrong order in dropdown lists
* Fixed an authentication issue where users would receive 401 unauthorized errors when executing actions after token refresh
* Fixed a UI behavior issue where slider actions configured with "onChange" were incorrectly triggered when entering a screen instead of only when modified
* Fixed an issue with identical advancing IDs occurring in multi-pod deployments due to missing hostname command in GraalVM docker images
* Resolved an issue preventing media library migration from default application
* Fixed the "Go to reference" functionality from data model attributes that was not correctly redirecting to referenced elements
* Fixed an error during application export/import where "There already exists a tagged build for this project version" was preventing successful imports
* Restored support for multiple topics in Data Stream Topics feature, which was previously only listening to the first topic in the list
* Fixed a 500 error that occurred when attempting to create child actions on certain nodes
* Fixed a critical issue where UI templates would disappear when creating a new version of an application after performing undo operations on pasted templates
* Fixed a bug where updates to the subprocess in a Start subprocess action weren't being saved properly
* Fixed an issue with the "Send email" button remaining disabled in the Test notification template feature after correcting validation errors
* Fixed an error that occurred when trying to export document templates containing null values in templateMap
* Fixed a display issue where Tokens, Workflows, and Subprocesses information wasn't showing in process instances after migration from 4.7.1 to 4.7.2
* Fixed a UI issue where business rule code wasn't displayed when testing business rules in committed versions
***
## **Additional information**
📌 [Deployment Guidelines v4.7.3](./deployment-guidelines-v4.7.3)\
📌 [Migration Guide (from v4.1.x)](./migrating-from-v4.1.x-to-v4.7.3)
# Deployment guidelines v4.7.4
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.4-may-2025/deployment-guidelines-v4.7.4
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

After upgrading to the 4.7.4 FlowX.AI release, you cannot import old process definitions or resources from versions older than 4.7.4.
## Component versions
| Component | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **8.15.2** | 8.13.0 | 8.9.0 | 8.5.1 | 8.3.1 | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **7.9.2** | 7.8.13 | 7.8.5 | 7.7.6 | 7.5.1 | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.93.1** | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.93.1** | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.93.1** | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **5.93.1** | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.93.1** | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.93.1** | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.93.1** | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.93.1** | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.93.1** | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.4.16** | 5.4.12 | 5.4.8 | 5.3.3 | 5.2.11 | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **5.0.13** | 5.0.11 | 5.0.10 | 5.0.4 | 5.0.2 | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **5.0.19** | 5.0.17 | 5.0.16 | 5.0.7 | 5.0.5 | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **6.1.15** | 6.1.13 | 6.1.12 | 6.1.3 | 6.1.0 | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **6.3.18** | 6.3.16 | 6.3.13 | 6.3.4 | 6.3.1 | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **task-management-plugin** | **7.2.17** | 7.2.15 | 7.2.14 | 7.2.6 | 7.2.2 | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **4.0.16** | 4.0.14 | 4.0.13 | 4.0.6 | 4.0.4 | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **6.0.17** | 6.0.15 | 6.0.14 | 6.0.6 | 6.0.4 | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.2.0 | 0.2.0 | 0.2.0 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | **4.0.16** | 4.0.14 | 4.0.12 | 4.0.5 | 4.0.3 | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.7.2** | 2.6.0 | 2.3.16 | 2.3.9 | 2.3.2 | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.15.6** | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **2.15.6** | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **2.3.2** | 2.2.11 | 2.2.9 | 2.2.2 | 2.1.0 | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | **4.0.19** | 4.0.14 | 4.0.7 | 4.0.7 | 4.0.5 | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **4.0.23** | 4.0.15 | 4.0.13 | 4.0.13 | 4.0.12 | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
## AI Agents
| Component | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ----------- | ------- | ------- | ------- | ------- | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.9.39** | 1.9.37 | 1.9.35 | 1.9.27 | 1.9.21 | 1.9.16 | 1.9.10 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.8.17** | 1.8.12 | 1.8.9 | 1.8.2 | 1.7.2 | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.10.28** | 1.10.26 | 1.10.24 | 1.10.17 | 1.10.13 | 1.10.6 | 1.10.3 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.4.5** | 1.4.3 | 1.4.1 | 1.2.35 | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.7.13** | 1.7.11 | 1.7.9 | 1.7.4 | 1.7.0 | 1.6.5 | 1.5.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Recommended Supported Version |
| ---------------- | -------------------- | ----------------------------- |
| 4.7.4 | Keycloak | 22.x, 26.x |
| 4.7.4 | Kafka | 3.2.x |
| 4.7.4 | PostgreSQL | 16.2.x |
| 4.7.4 | Oracle Database | 21c, 23ai |
| 4.7.4 | MongoDB | 7.0.x |
| 4.7.4 | Redis | 7.2.x |
| 4.7.4 | Elasticsearch | 7.17.x |
| 4.7.4 | Angular (Web SDK) | 19.x |
| 4.7.4 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
### Deprecation notice
Starting FlowX 5.0, the following versions of 3rd Party Dependencies will no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.9
* Redis versions older than 7.4
## **Additional information**
* Added new environment variable `OPTIMISTIC_LOCKING_RETRIES` to control the number of times the engine will retry indexing when it encounters concurrent-update errors specifically on key identifiers during their update after an action.
Elasticsearch indexing configuration:
# Migrating from previous versions to v4.7.4
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.4-may-2025/migrating-from-v4.1.x-to-v4.7.4
If you're upgrading from a v4.7.0 version, make sure to first review the deployment guidelines for v4.7.x release documentation to capture all the significant changes and also the deployment guidelines:
If you're upgrading from a v4.6.x version, make sure to first review the migration guide for v4.6 release documentation to capture all the significant changes and also the deployment guidelines:
If you're moving from v4.1.x to v4.7.0, don’t forget to check the relevant migration guides for each version to ensure nothing is missed:
Do not also forget to check all the deployment guidelines in between releases to do not miss important configurations or changes:
# FlowX.AI 4.7.4 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.4-may-2025/v4.7.4-may-2025
FlowX.AI 4.7.4 enhances system stability with Spring Boot updates and resolves critical issues across build exports, reporting, SDK functionality, and cross-platform consistency to deliver a more reliable development experience! 🚀
## **What's new? 🆕**
✅ Platform enhancements\
✅ Added retry mechanism for ES indexing to handle key‑identifier errors\
✅ Fixed critical build export timeout issues\
✅ Improved reporting data representation\
✅ Enhanced cross-platform consistency
### Platform Enhancements ⚙️
* Enhanced system stability
* Latest security patches
* Improved performance
### Elasticsearch indexing - configurable retry mechanism
* `OPTIMISTIC_LOCKING_RETRIES`: Number of times the engine will retry indexing when it encounters concurrent-update errors specifically on key identifiers during their update after an action.
### Data-sync run status monitoring
* Added the ability to view the run status of data-sync jobs directly in the platform interface
* Monitor the execution status of all data-sync jobs from the Jobs dashboard
* Quickly identify failed jobs for faster troubleshooting

## **Bug fixes** 🐞
* **Build export timeouts**: Resolved intermittent timeout failures on projects with dependency libraries; exports now consistently complete or retry correctly.
* **Build creation on merge without conflicts**: Fixed an issue where merging one branch into another without conflicts—and switching the active policy—did not trigger a new build, forcing users to manually create a version; now, merges automatically update build resources and create the new version so merged changes appear at runtime.
* **Project version import stashing conflict**: Resolved an error where importing a branched project version across environments would inadvertently stash other versions—restoring successful import, fixing the GET history API response, and ensuring the Project versions history modal renders correctly.
* **CosmosDB workflows**: Fixed an issue preventing the workflow instances list from loading in the Integration Designer when using CosmosDB.
* **Reporting arrays**: Corrected array formatting in the `reporting_data` table (process-engine schema).
* **CMS permissions**: Restored backward compatibility for FlowX SDK v4.7+ by removing the unintended `media_library_read` requirement for processes containing images (behavior now matches v4.1).
* **onChange action behavior**: Standardized onChange/onBlur across web, Android, and iOS so users cannot continue typing after token advancement unless explicitly allowed.
* **React SDK ternary expressions**: Fixed an “Invalid Expression” error in SDK v5.86.1—ternary expressions in computed values (e.g. `return ${var1} ? "Onboarded" : (${var2} ? "Non-eligible" : "Ready for Onboarding");`) now parse correctly as they did in v5.62.1.
* **Elasticsearch indexing**: Fixed an issue where the engine was not retrying to index process instances when it encountered concurrent-update errors on key identifiers.
* **iOS SSE token refresh**: Fixed an issue in iOS SDK where Server-Sent Events connections would occasionally use expired JWT tokens instead of refreshed ones, causing 401 errors and process hangs in production environments.
***
## **Additional information**
📌 [Deployment Guidelines v4.7.4](./deployment-guidelines-v4.7.4)\
📌 [Migration Guide (from v4.1.x)](./migrating-from-v4.1.x-to-v4.7.4)
# Deployment guidelines v4.7.5
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.5-june-2025/deployment-guidelines-v4.7.5
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

After upgrading to the 4.7.5 FlowX.AI release, you cannot import old process definitions or resources from versions older than 4.7.5.
## Component versions
| Component | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ----- |
| **process-engine** | **8.17.0** | 8.15.2 | 8.13.0 | 8.9.0 | 8.5.1 | 8.3.1 | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **7.12.2** | 7.9.2 | 7.8.13 | 7.8.5 | 7.7.6 | 7.5.1 | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.95.1** | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.95.1** | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.95.1** | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **5.95.1** | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.95.1** | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.95.1** | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.95.1** | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.95.1** | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.95.1** | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.5.1** | 5.4.16 | 5.4.12 | 5.4.8 | 5.3.3 | 5.2.11 | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **5.1.1** | 5.0.13 | 5.0.11 | 5.0.10 | 5.0.4 | 5.0.2 | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **5.1.1** | 5.0.19 | 5.0.17 | 5.0.16 | 5.0.7 | 5.0.5 | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **6.2.1** | 6.1.15 | 6.1.13 | 6.1.12 | 6.1.3 | 6.1.0 | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **6.4.1** | 6.3.18 | 6.3.16 | 6.3.13 | 6.3.4 | 6.3.1 | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **task-management-plugin** | **7.3.1** | 7.2.17 | 7.2.15 | 7.2.14 | 7.2.6 | 7.2.2 | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **4.1.1** | 4.0.16 | 4.0.14 | 4.0.13 | 4.0.6 | 4.0.4 | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **6.1.1** | 6.0.17 | 6.0.15 | 6.0.14 | 6.0.6 | 6.0.4 | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **advancing-controller** | **4.1.1** | 4.0.16 | 4.0.14 | 4.0.12 | 4.0.5 | 4.0.3 | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.9.0** | 2.7.2 | 2.6.0 | 2.3.16 | 2.3.9 | 2.3.2 | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.17.2** | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **2.17.2** | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **2.4.1** | 2.3.2 | 2.2.11 | 2.2.9 | 2.2.2 | 2.1.0 | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | **4.0.21** | 4.0.19 | 4.0.14 | 4.0.7 | 4.0.7 | 4.0.5 | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **4.0.24** | 4.0.23 | 4.0.15 | 4.0.13 | 4.0.13 | 4.0.12 | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Plugins
| Component | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| -------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ----- | ------ | ------ | ------ | ------ |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **reporting-plugin** | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
## AI Agents
| Component | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ---------- | ------- | ------- | ------- | ------- | ------- | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | 1.9.39 | 1.9.39 | 1.9.37 | 1.9.35 | 1.9.27 | 1.9.21 | 1.9.16 | 1.9.10 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.8.18** | 1.8.17 | 1.8.12 | 1.8.9 | 1.8.2 | 1.7.2 | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | 1.10.28 | 1.10.28 | 1.10.26 | 1.10.24 | 1.10.17 | 1.10.13 | 1.10.6 | 1.10.3 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | 1.4.5 | 1.4.5 | 1.4.3 | 1.4.1 | 1.2.35 | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | 1.7.13 | 1.7.13 | 1.7.11 | 1.7.9 | 1.7.4 | 1.7.0 | 1.6.5 | 1.5.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Supported Versions |
| ---------------- | -------------------- | ------------------ |
| 4.7.5 | Keycloak | 22, 26+ |
| 4.7.5 | Kafka | 3.2 - 3.9 |
| 4.7.5 | PostgreSQL | 16 - 17 |
| 4.7.5 | Oracle Database | 21c, 23ai |
| 4.7.5 | MongoDB | 7 - 8 |
| 4.7.5 | Redis | 7.2 - 8.0 |
| 4.7.5 | Elasticsearch | 7 - 9 |
| 4.7.5 | Angular (Web SDK) | 19.x |
| 4.7.5 | React (Web SDK) | 18.x |
**New in 4.7.5: Support for more 3rd Party Dependencies**
FlowX.AI 4.7.5 introduces support for more versions of third-party dependencies:
* All versions are officially supported throughout the entire LTS lifetime
* Upgrades can be performed during the LTS lifetime to prepare for the minimum requirements of the next FlowX.AI major release
FlowX.AI supports all versions within the specified ranges of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest stable versions within each supported range.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Starting FlowX 5.0, the following versions of 3rd Party Dependencies will no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.9
* Redis versions older than 7.4
# Migrating from previous versions to v4.7.5
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.5-june-2025/migrating-from-v4.1.x-to-v4.7.5
If you're upgrading from a \< v4.7.5 version, make sure to first review the deployment guidelines for v4.7.x release documentation to capture all the significant changes and also the deployment guidelines:
If you're upgrading from a v4.6.x version, make sure to first review the migration guide for v4.6 release documentation to capture all the significant changes and also the deployment guidelines:
If you're moving from v4.1.x to v4.7.0, don’t forget to check the relevant migration guides for each version to ensure nothing is missed:
Do not also forget to check all the deployment guidelines in between releases to do not miss important configurations or changes:
# FlowX.AI 4.7.5 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.5-june-2025/v4.7.5-june-2025
FlowX.AI 4.7.5 enhances system stability with introducing support for more 3rd party dependency and introduces High Availability improvements with Redis Sentinel mode support to deliver a more reliable and scalable development experience! 🚀
## **What's new? 🆕**
✅ **Platform enhancements**\
✅ **Analytics enhancements**
### Platform enhancements ⚙️
**Extended Third-Party Dependency Support** - Introducing support for more versions of third-party dependencies:
* All versions are officially supported throughout the entire LTS lifetime
* Upgrades can be performed during the LTS lifetime to prepare for the minimum requirements of the next FlowX.AI major releases for critical infrastructure components, ensuring all supported versions are officially maintained throughout the entire LTS lifetime. This enables organizations to perform gradual dependency upgrades during the LTS period, preparing infrastructure to meet the minimum requirements for the next FlowX.AI major release while maintaining full platform support and stability.
### Analytics enhancements ⚙️
* Improved analytics events with enriched metadata for action events across all platforms (Web, iOS, Android). Action events now include screen context, component type identification, and component labels, providing deeper insights into user interactions and enabling more granular analytics tracking for better user experience optimization.
More details:
### Runtime Manager deployment changes
**Prior to 4.7.5:** Runtime Manager was deployed using `application-manager` chart/image with manual `SPRING_APPLICATION_NAME`: "runtime-manager" configuration.
Starting with 4.7.5: Runtime Manager has its own dedicated chart and image with proper defaults.
Migration Required
* Switch to new chart: Use runtime-manager chart instead of application-manager
* Verify image: Ensure image name is runtime-manager (default in new chart)
* Remove override: `SPRING_APPLICATION_NAME`: "runtime-manager" can be removed (optional)
You may need to delete the existing runtime-manager deployment before upgrading due to Kubernetes label changes that cause `kubectl apply` to fail.
## **Bug fixes** 🐞
* **Fixed Task Manager loading issue with data type changes** - Resolved critical issue where Task Manager would fail to load and throw `NullPointerException` when process variables were changed from date to string data types, even after updating the data model and clearing cache
* **Fixed All Tasks view missing on build import** - Resolved issue where importing builds from one environment to another would fail to create the All Tasks view, when accessing the Task Manager area
* **Fixed unassign operation causing runtime errors** - Resolved 500 Internal Server Error when accessing process data after performing unassign operations via Kafka messages, where null ownerDetails would cause `NullPointerException` during JSON serialization
* **Fixed CMS-Core export failures with AWS S3 buckets** - Resolved issue where CMS-Core would add double slashes in S3 object paths when creating exports, causing 404 NoSuchKey errors with AWS S3 (while working correctly with MinIO). Fixed path construction to ensure compatibility with both AWS S3 and MinIO storage backends
* **Fixed active policy version resolution** - Resolved issue where importing application versions to environments with existing WIP versions would incorrectly activate the stashed WIP version instead of the imported committed version, causing graph display failures and incorrect active policy settings
***
## **Additional information**
📌 [Deployment Guidelines v4.7.5](./deployment-guidelines-v4.7.5)\
📌 [Migration Guide (from v4.1.x)](./migrating-from-v4.1.x-to-v4.7.5)
# Deployment guidelines v4.7.6
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.6-july-2025/deployment-guidelines-v4.7.6
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

**Important Upgrade Notice**
Upgrading to FlowX.AI 4.7.6 will permanently prevent you from importing process definitions and resources created in versions 4.7.5 and earlier. Ensure all necessary data is backed up and compatible before upgrading.
## Component versions
| Component | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **8.21.1** | 8.17.0 | 8.15.2 | 8.13.0 | 8.9.0 | 8.5.1 | 8.3.1 | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **7.15.2** | 7.12.2 | 7.9.2 | 7.8.13 | 7.8.5 | 7.7.6 | 7.5.1 | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.96.1** | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.96.1** | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.96.1** | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **5.96.1** | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.96.1** | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.96.1** | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.96.1** | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.96.1** | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.96.1** | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.8.2** | 5.5.1 | 5.4.16 | 5.4.12 | 5.4.8 | 5.3.3 | 5.2.11 | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **5.4.0** | 5.1.1 | 5.0.13 | 5.0.11 | 5.0.10 | 5.0.4 | 5.0.2 | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **5.4.0** | 5.1.1 | 5.0.19 | 5.0.17 | 5.0.16 | 5.0.7 | 5.0.5 | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **6.5.0** | 6.2.1 | 6.1.15 | 6.1.13 | 6.1.12 | 6.1.3 | 6.1.0 | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **6.7.0** | 6.4.1 | 6.3.18 | 6.3.16 | 6.3.13 | 6.3.4 | 6.3.1 | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **task-management-plugin** | **7.6.0** | 7.3.1 | 7.2.17 | 7.2.15 | 7.2.14 | 7.2.6 | 7.2.2 | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **4.4.0** | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.13 | 4.0.6 | 4.0.4 | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **6.5.0** | 6.1.1 | 6.0.17 | 6.0.15 | 6.0.14 | 6.0.6 | 6.0.4 | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | **4.4.0** | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.12 | 4.0.5 | 4.0.3 | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.13.0** | 2.9.0 | 2.7.2 | 2.6.0 | 2.3.16 | 2.3.9 | 2.3.2 | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.20.2** | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **2.20.2** | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **2.7.1** | 2.4.1 | 2.3.2 | 2.2.11 | 2.2.9 | 2.2.2 | 2.1.0 | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | **4.0.29** | 4.0.21 | 4.0.19 | 4.0.14 | 4.0.7 | 4.0.7 | 4.0.5 | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 4.0.24 | 4.0.24 | 4.0.23 | 4.0.15 | 4.0.13 | 4.0.13 | 4.0.12 | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
## AI Agents
| Component | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ---------- | ------- | ------- | ------- | ------- | ------- | ------- | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | 1.9.39 | 1.9.39 | 1.9.39 | 1.9.37 | 1.9.35 | 1.9.27 | 1.9.21 | 1.9.16 | 1.9.10 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.8.19** | 1.8.18 | 1.8.17 | 1.8.12 | 1.8.9 | 1.8.2 | 1.7.2 | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | 1.10.28 | 1.10.28 | 1.10.28 | 1.10.26 | 1.10.24 | 1.10.17 | 1.10.13 | 1.10.6 | 1.10.3 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | 1.4.5 | 1.4.5 | 1.4.5 | 1.4.3 | 1.4.1 | 1.2.35 | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | 1.7.13 | 1.7.13 | 1.7.13 | 1.7.11 | 1.7.9 | 1.7.4 | 1.7.0 | 1.6.5 | 1.5.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Supported Versions |
| ---------------- | -------------------- | ------------------ |
| 4.7.6 | Keycloak | 22, 26+ |
| 4.7.6 | Kafka | 3.2 - 3.9 |
| 4.7.6 | PostgreSQL | 16 - 17 |
| 4.7.6 | OracleDB | 21c, 23ai |
| 4.7.6 | MongoDB | 7 - 8 |
| 4.7.6 | Redis | 7.2 - 8.0 |
| 4.7.6 | Elasticsearch | 7 - 9 |
| 4.7.6 | Angular (Web SDK) | 19.x |
| 4.7.6 | React (Web SDK) | 18.x |
FlowX.AI supports all versions within the specified ranges of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest stable versions within each supported range.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Starting FlowX 5.0, the following versions of 3rd Party Dependencies will no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.9
* Redis versions older than 7.4
* Elasticsearch older than 8
### Configuration Parameters
Starting with FlowX.AI 4.7.6, Configuration Parameters can use values from Environment Variables, Kubernetes Config Maps, and Kubernetes Secrets, as configured in the deployment.
# Migrating from previous versions to v4.7.6
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.6-july-2025/migrating-from-v4.1.x-to-v4.7.6
If you're upgrading from a \< v4.7.6 version, make sure to first review the deployment guidelines for v4.7.x release documentation to capture all the significant changes and also the deployment guidelines:
If you're upgrading from a v4.6.x version, make sure to first review the migration guide for v4.6 release documentation to capture all the significant changes and also the deployment guidelines:
If you're moving from v4.1.x to v4.7.0, don’t forget to check the relevant migration guides for each version to ensure nothing is missed:
Do not also forget to check all the deployment guidelines in between releases to do not miss important configurations or changes:
# FlowX.AI 4.7.6 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.6-july-2025/v4.7.6-july-2025
This release includes significant improvements to logging configuration and resolves some issues across the Designer, Process Engine, and Integration Designer components.
## **What's new? 🆕**
Changed logging verbosity to reduce clutter & log sizes, increasing visibility for more relevant log messages.
Now Configuration Parameters can use values from Environment Variables, Kubernetes Config Maps, and Kubernetes Secrets, as configured in the deployment. Check the [**Deployment Guidelines**](./deployment-guidelines-v4.7.6#configuration-parameters) for more details.
Improved runtime performance by better distributing the execution of nodes across all components.
Improved the speed of listing process instances by 4-6x on environments with a lot of process executions.
This feature allows you to dynamically adjust logging levels without requiring a service restart, providing more flexibility in managing log output.
The previously used `CONFIG_PROFILE` environment variable is no longer required as the default configs have been aligned with the recommended profiles.
## **Bug fixes** 🐞
Fixed task view list row content display issue where table rows were overlapping and text was not vertically centered in the latest Chrome browser version (138). The task view now properly displays centered content without text cutoff.
Fixed JSON parsing error when sending JSON result to REST body. Resolved issue where JSON objects generated in script tasks were causing "Unexpected character" errors when used in REST endpoint body parameters with \${variable} syntax.
Fixed media file export errors during branch merges. Resolved issue where merging multiple branches created from the same main version would fail with "400 Bad Request" errors for media files after the first successful merge, even when no merge conflicts were present.
Fixed rollback issue during version submission errors. Resolved problem where processes were incorrectly marked as deleted in the database when submit version operations failed with 500 errors, preventing proper rollback and causing subsequent 404 "Process not found" errors.
Fixed missing resources during copy to another project/library operation. Resolved issue where forms with validation in UserTask nodes were not being copied when copying processes between projects or libraries.
Fixed issue where specific branches derived from main version would experience resource corruption, including missing process definitions (404 errors), missing Integration Designer resources, and commit failures.
Fixed parallel multi-instance designer visual bug and database errors. Resolved issue where call activity nodes with parallel multi-instance enabled created duplicate "inputKey" and "outputKey" entries, causing visual bugs (missing collection key fields) and database update errors during node modifications.
Fixed Kafka message distribution across partitions. Resolved issue where Kafka messages were distributed as batches across partitions, causing increased usage of a limited number of partitions, instead of following the round-robin distribution per message strategy.
***
## **Additional information**
Step-by-step deployment instructions and configuration details for this release.
Complete guide for migrating from version 4.1.x to 4.7.6 with breaking changes and migration steps.
# Deployment guidelines v4.7.7
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.7-august-2025/deployment-guidelines-v4.7.7
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

**Important Upgrade Notice**
Upgrading to FlowX.AI 4.7.7 will permanently prevent you from importing process definitions and resources created in versions 4.7.6 and earlier. Ensure all necessary data is backed up and compatible before upgrading.
## Component versions
| Component | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| -------------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ----- |
| **process-engine** | **8.22.3** | 8.21.1 | 8.17.0 | 8.15.2 | 8.13.0 | 8.9.0 | 8.5.1 | 8.3.1 | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **7.16.3** | 7.15.2 | 7.12.2 | 7.9.2 | 7.8.13 | 7.8.5 | 7.7.6 | 7.5.1 | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.97.1** | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.9.2** | 5.8.2 | 5.5.1 | 5.4.16 | 5.4.12 | 5.4.8 | 5.3.3 | 5.2.11 | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **5.5.2** | 5.4.0 | 5.1.1 | 5.0.13 | 5.0.11 | 5.0.10 | 5.0.4 | 5.0.2 | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **5.5.2** | 5.4.0 | 5.1.1 | 5.0.19 | 5.0.17 | 5.0.16 | 5.0.7 | 5.0.5 | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **6.6.2** | 6.5.0 | 6.2.1 | 6.1.15 | 6.1.13 | 6.1.12 | 6.1.3 | 6.1.0 | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **6.8.2** | 6.7.0 | 6.4.1 | 6.3.18 | 6.3.16 | 6.3.13 | 6.3.4 | 6.3.1 | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **task-management-plugin** | **7.7.2** | 7.6.0 | 7.3.1 | 7.2.17 | 7.2.15 | 7.2.14 | 7.2.6 | 7.2.2 | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **4.5.2** | 4.4.0 | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.13 | 4.0.6 | 4.0.4 | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **6.6.2** | 6.5.0 | 6.1.1 | 6.0.17 | 6.0.15 | 6.0.14 | 6.0.6 | 6.0.4 | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **advancing-controller** | **4.5.2** | 4.4.0 | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.12 | 4.0.5 | 4.0.3 | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.14.2** | 2.13.0 | 2.9.0 | 2.7.2 | 2.6.0 | 2.3.16 | 2.3.9 | 2.3.2 | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.21.2** | 2.20.2 | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **2.21.2** | 2.20.2 | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **2.8.1** | 2.7.1 | 2.4.1 | 2.3.2 | 2.2.11 | 2.2.9 | 2.2.2 | 2.1.0 | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Renderers
| Component | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | --------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ----- |
| **@flowx/angular-sdk** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **iOS renderer** | 4.0.29 | 4.0.29 | 4.0.21 | 4.0.19 | 4.0.14 | 4.0.7 | 4.0.7 | 4.0.5 | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 4.0.29 | 4.0.24 | 4.0.24 | 4.0.23 | 4.0.15 | 4.0.13 | 4.0.13 | 4.0.12 | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Plugins
| Component | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| -------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ----- | ------ | ------ | ------ | ------ |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **reporting-plugin** | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
## AI Agents
| Component | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ----------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.9.40** | 1.9.39 | 1.9.39 | 1.9.39 | 1.9.37 | 1.9.35 | 1.9.27 | 1.9.21 | 1.9.16 | 1.9.10 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.8.21** | 1.8.19 | 1.8.18 | 1.8.17 | 1.8.12 | 1.8.9 | 1.8.2 | 1.7.2 | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.10.29** | 1.10.28 | 1.10.28 | 1.10.28 | 1.10.26 | 1.10.24 | 1.10.17 | 1.10.13 | 1.10.6 | 1.10.3 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.4.6** | 1.4.5 | 1.4.5 | 1.4.5 | 1.4.3 | 1.4.1 | 1.2.35 | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.7.14** | 1.7.13 | 1.7.13 | 1.7.13 | 1.7.11 | 1.7.9 | 1.7.4 | 1.7.0 | 1.6.5 | 1.5.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.4.6** | 1.4.5 | 1.4.5 | 1.4.5 | 1.4.3 | 1.4.1 | 1.2.35 | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Supported Versions |
| ---------------- | -------------------- | ------------------ |
| 4.7.7 | Keycloak | 22, 26+ |
| 4.7.7 | Kafka | 3.2 - 3.9 |
| 4.7.7 | PostgreSQL | 16 - 17 |
| 4.7.7 | OracleDB | 19c, 21c, 23ai |
| 4.7.7 | MongoDB | 7 - 8 |
| 4.7.7 | Redis | 7.2 - 8.0 |
| 4.7.7 | Elasticsearch | 7 - 9 |
| 4.7.7 | Angular (Web SDK) | 19.x |
| 4.7.7 | React (Web SDK) | 18.x |
FlowX.AI supports all versions within the specified ranges of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest stable versions within each supported range.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Starting FlowX 5.0, the following versions of 3rd Party Dependencies will no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.9
* Redis versions older than 7.4
* Elasticsearch older than 8
# FlowX.AI 4.7.7 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.7-august-2025/v4.7.7-august-2025
Latest features, improvements, and bug fixes in our newest release
## What's new?
✅ Improved robustness on auto-scaling process-engine and on Kafka node failures\
✅ Improvements on how configuration parameters can now be retrieved from Kubernetes secrets and ConfigMaps\
✅ Vulnerability fixes
## Configuration parameters
Improved configuration parameters retrieval from Kubernetes secrets and ConfigMaps. More details here:
## Bug fixes
Fixed JSON payload size limit issue causing "403 payload too large" errors when starting processes. More details [**here**](../../4.7.x/docs/flowx-designer/managing-a-project-flow/starting-a-process#starting-a-process-via-user-interface).
If one Kafka node fails, platform health check fails. This is now fixed.
Fixed theming issue where Card component styling was not properly applied when switched to accordion mode.
Fixed loader persistence issue where loaders initiated by "show loader" actions in subprocess UserTasks would continue displaying after subprocess completion.
Fixed merge conflict error occurring when copying and pasting embed nodes in processes.
Fixed process execution recovery issue where REST API-triggered service tasks would hang indefinitely if the handling engine replica failed mid-execution.
Fixed merge conflict error occurring when creating child branches from working commits to bypass broken WIP versions.
# Deployment guidelines v4.7.8
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.8-september-2025/deployment-guidelines-v4.7.8
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

**Important Upgrade Notice**
Upgrading to FlowX.AI 4.7.8 will permanently prevent you from importing process definitions and resources created in versions 4.7.7 and earlier. Ensure all necessary data is backed up and compatible before upgrading.
## Component versions
| Component | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| -------------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ----- |
| **process-engine** | **8.23.2** | 8.22.3 | 8.21.1 | 8.17.0 | 8.15.2 | 8.13.0 | 8.9.0 | 8.5.1 | 8.3.1 | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **7.17.3** | 7.16.3 | 7.15.2 | 7.12.2 | 7.9.2 | 7.8.13 | 7.8.5 | 7.7.6 | 7.5.1 | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.98.0** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.10.3** | 5.9.2 | 5.8.2 | 5.5.1 | 5.4.16 | 5.4.12 | 5.4.8 | 5.3.3 | 5.2.11 | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **5.6.2** | 5.5.2 | 5.4.0 | 5.1.1 | 5.0.13 | 5.0.11 | 5.0.10 | 5.0.4 | 5.0.2 | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **5.6.2** | 5.5.2 | 5.4.0 | 5.1.1 | 5.0.19 | 5.0.17 | 5.0.16 | 5.0.7 | 5.0.5 | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **6.7.2** | 6.6.2 | 6.5.0 | 6.2.1 | 6.1.15 | 6.1.13 | 6.1.12 | 6.1.3 | 6.1.0 | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **6.9.2** | 6.8.2 | 6.7.0 | 6.4.1 | 6.3.18 | 6.3.16 | 6.3.13 | 6.3.4 | 6.3.1 | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **task-management-plugin** | **7.8.2** | 7.7.2 | 7.6.0 | 7.3.1 | 7.2.17 | 7.2.15 | 7.2.14 | 7.2.6 | 7.2.2 | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **4.6.2** | 4.5.2 | 4.4.0 | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.13 | 4.0.6 | 4.0.4 | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **6.7.2** | 6.6.2 | 6.5.0 | 6.1.1 | 6.0.17 | 6.0.15 | 6.0.14 | 6.0.6 | 6.0.4 | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **advancing-controller** | **4.6.2** | 4.5.2 | 4.4.0 | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.12 | 4.0.5 | 4.0.3 | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.15.3** | 2.14.2 | 2.13.0 | 2.9.0 | 2.7.2 | 2.6.0 | 2.3.16 | 2.3.9 | 2.3.2 | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.22.3** | 2.21.2 | 2.20.2 | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **2.22.3** | 2.21.2 | 2.20.2 | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **2.9.2** | 2.8.1 | 2.7.1 | 2.4.1 | 2.3.2 | 2.2.11 | 2.2.9 | 2.2.2 | 2.1.0 | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Renderers
| Component | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | --------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ----- |
| **@flowx/angular-sdk** | **5.98.0** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.98.0** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **5.98.0** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.98.0** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.98.0** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.98.0** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.98.0** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.98.0** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **iOS renderer** | 4.0.29 | 4.0.29 | 4.0.29 | 4.0.21 | 4.0.19 | 4.0.14 | 4.0.7 | 4.0.7 | 4.0.5 | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 4.0.29 | 4.0.29 | 4.0.24 | 4.0.24 | 4.0.23 | 4.0.15 | 4.0.13 | 4.0.13 | 4.0.12 | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Plugins
| Component | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| -------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ----- | ------ | ------ | ------ | ------ |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **reporting-plugin** | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
## AI Agents
| Component | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ---------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | 1.9.40 | 1.9.40 | 1.9.39 | 1.9.39 | 1.9.39 | 1.9.37 | 1.9.35 | 1.9.27 | 1.9.21 | 1.9.16 | 1.9.10 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.8.22** | 1.8.21 | 1.8.19 | 1.8.18 | 1.8.17 | 1.8.12 | 1.8.9 | 1.8.2 | 1.7.2 | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | 1.10.29 | 1.10.29 | 1.10.28 | 1.10.28 | 1.10.28 | 1.10.26 | 1.10.24 | 1.10.17 | 1.10.13 | 1.10.6 | 1.10.3 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | 1.4.6 | 1.4.6 | 1.4.5 | 1.4.5 | 1.4.5 | 1.4.3 | 1.4.1 | 1.2.35 | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | 1.7.14 | 1.7.14 | 1.7.13 | 1.7.13 | 1.7.13 | 1.7.11 | 1.7.9 | 1.7.4 | 1.7.0 | 1.6.5 | 1.5.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Supported Versions |
| ---------------- | -------------------- | ------------------ |
| 4.7.8 | Keycloak | 22, 26+ |
| 4.7.8 | Kafka | 3.2 - 3.9 |
| 4.7.8 | PostgreSQL | 16 - 17 |
| 4.7.8 | OracleDB | 19c, 21c, 23ai |
| 4.7.8 | MongoDB | 7 - 8 |
| 4.7.8 | Redis | 7.2 - 8.0 |
| 4.7.8 | Elasticsearch | 7 - 9 |
| 4.7.8 | Angular (Web SDK) | 19.x |
| 4.7.8 | React (Web SDK) | 18.x |
FlowX.AI supports all versions within the specified ranges of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest stable versions within each supported range.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Starting FlowX 5.0, the following versions of 3rd Party Dependencies will no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.9
* Redis versions older than 7.4
* Elasticsearch older than 8
# FlowX.AI 4.7.8 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.8-september-2025/v4.7.8-september-2025
Latest features, improvements, and bug fixes in our newest release
## What's new?
✅ Vulnerability fixes\
✅ Support for [**Substitution Tags**](../../../../5.1/docs/platform-deep-dive/core-extensions/content-management/substitution-tags) in [**Table**](../../../../4.7.x/docs/building-blocks/ui-designer/ui-component-types/table) column title
### Support for Substitution Tags in Table column title
Now you can use [**Substitution Tags**](../../../../5.1/docs/platform-deep-dive/core-extensions/content-management/substitution-tags) in [**Table**](../../../../4.7.x/docs/building-blocks/ui-designer/ui-component-types/table) column title.
## Bug fixes
Resolved an issue where, in certain situations, the expanded state of cards was not calculated correctly. This prevented users from expanding cards as expected.
Fixed localization issue where document preview component texts remained in English regardless of the selected language setting.
Fixed compatibility issue with Keycloak 26.3 where the Groups tab would remain in loading state indefinitely due to new "description" field in group representations.
Fixed import failure when PDF media files were exported with null `thumbnailStoragePath` values, preventing successful deployment of build or app versions to fresh environments.
Enhanced error logging detail when Runtime Manager proxy requests fail, providing better root cause information for debugging infrastructure issues like DNS problems or service unavailability.
Fixed performance issue where workflow IF node processing time increased from 3-5 seconds to 15-20 seconds on the first execution after Integration Designer pod restart.
Fixed issue where the active step was incorrectly computed when the token is reset.
# Deployment guidelines v4.7.9
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.9-october-2025/deployment-guidelines-v4.7.9
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

## Component versions
| Component | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| -------------------------- | ----------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ------ | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ----- |
| **process-engine** | **8.24.1** | 8.23.3 | 8.23.2 | 8.22.3 | 8.21.1 | 8.17.0 | 8.15.2 | 8.13.0 | 8.9.0 | 8.5.1 | 8.3.1 | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **7.18.4** | 7.17.3 | 7.16.3 | 7.15.2 | 7.12.2 | 7.9.2 | 7.8.13 | 7.8.5 | 7.7.6 | 7.5.1 | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.101.1** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.11.1** | 5.10.3 | 5.9.2 | 5.8.2 | 5.5.1 | 5.4.16 | 5.4.12 | 5.4.8 | 5.3.3 | 5.2.11 | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **5.7.1** | 5.6.2 | 5.5.2 | 5.4.0 | 5.1.1 | 5.0.13 | 5.0.11 | 5.0.10 | 5.0.4 | 5.0.2 | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **5.7.1** | 5.6.2 | 5.5.2 | 5.4.0 | 5.1.1 | 5.0.19 | 5.0.17 | 5.0.16 | 5.0.7 | 5.0.5 | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **6.8.1** | 6.7.2 | 6.6.2 | 6.5.0 | 6.2.1 | 6.1.15 | 6.1.13 | 6.1.12 | 6.1.3 | 6.1.0 | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **6.10.1** | 6.9.2 | 6.8.2 | 6.7.0 | 6.4.1 | 6.3.18 | 6.3.16 | 6.3.13 | 6.3.4 | 6.3.1 | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **task-management-plugin** | **7.9.2** | 7.8.2 | 7.7.2 | 7.6.0 | 7.3.1 | 7.2.17 | 7.2.15 | 7.2.14 | 7.2.6 | 7.2.2 | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **4.7.1** | 4.6.2 | 4.5.2 | 4.4.0 | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.13 | 4.0.6 | 4.0.4 | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **6.8.1** | 6.7.2 | 6.6.2 | 6.5.0 | 6.1.1 | 6.0.17 | 6.0.15 | 6.0.14 | 6.0.6 | 6.0.4 | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **advancing-controller** | **4.7.1** | 4.6.2 | 4.5.2 | 4.4.0 | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.12 | 4.0.5 | 4.0.3 | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.16.1** | 2.15.3 | 2.14.2 | 2.13.0 | 2.9.0 | 2.7.2 | 2.6.0 | 2.3.16 | 2.3.9 | 2.3.2 | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.23.1** | 2.22.3 | 2.21.2 | 2.20.2 | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **2.23.1** | 2.22.3 | 2.21.2 | 2.20.2 | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **2.10.2** | 2.9.2 | 2.8.1 | 2.7.1 | 2.4.1 | 2.3.2 | 2.2.11 | 2.2.9 | 2.2.2 | 2.1.0 | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Renderers
| Component | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ----------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | --------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ----- |
| **@flowx/angular-sdk** | **5.101.1** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.101.1** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **5.101.1** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.101.1** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.101.1** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.101.1** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.101.1** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.101.1** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **iOS renderer** | **4.0.30** | 4.0.29 | 4.0.29 | 4.0.29 | 4.0.21 | 4.0.19 | 4.0.14 | 4.0.7 | 4.0.7 | 4.0.5 | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **4.0.26** | 4.0.25 | 4.0.25 | 4.0.25 | 4.0.25 | 4.0.23 | 4.0.15 | 4.0.13 | 4.0.13 | 4.0.12 | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Plugins
| Component | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| -------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ----- | ------ | ------ | ------ | ------ |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **reporting-plugin** | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
## AI Agents
| Component | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ---------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | 1.9.40 | 1.9.40 | 1.9.40 | 1.9.39 | 1.9.39 | 1.9.39 | 1.9.37 | 1.9.35 | 1.9.27 | 1.9.21 | 1.9.16 | 1.9.10 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.8.23** | 1.8.22 | 1.8.21 | 1.8.19 | 1.8.18 | 1.8.17 | 1.8.12 | 1.8.9 | 1.8.2 | 1.7.2 | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | 1.10.29 | 1.10.29 | 1.10.29 | 1.10.28 | 1.10.28 | 1.10.28 | 1.10.26 | 1.10.24 | 1.10.17 | 1.10.13 | 1.10.6 | 1.10.3 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | 1.4.6 | 1.4.6 | 1.4.6 | 1.4.5 | 1.4.5 | 1.4.5 | 1.4.3 | 1.4.1 | 1.2.35 | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | 1.7.14 | 1.7.14 | 1.7.14 | 1.7.13 | 1.7.13 | 1.7.13 | 1.7.11 | 1.7.9 | 1.7.4 | 1.7.0 | 1.6.5 | 1.5.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Supported Versions |
| ---------------- | -------------------- | ------------------ |
| 4.7.9 | Keycloak | 22, 26+ |
| 4.7.9 | Kafka | 3.2 - 3.9 |
| 4.7.9 | PostgreSQL | 16 - 17 |
| 4.7.9 | OracleDB | 19c, 21c, 23ai |
| 4.7.9 | MongoDB | 7 - 8 |
| 4.7.9 | Redis | 7.2 - 8.0 |
| 4.7.9 | Elasticsearch | 7 - 9 |
| 4.7.9 | Angular (Web SDK) | 19.x |
| 4.7.9 | React (Web SDK) | 18.x |
FlowX.AI supports all versions within the specified ranges of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest stable versions within each supported range.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Starting FlowX 5.0, the following versions of 3rd Party Dependencies will no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.9
* Redis versions older than 7.4
* Elasticsearch older than 8
# FlowX.AI 4.7.9 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.9-october-2025/v4.7.9-october-2025
Latest features, improvements, and bug fixes in our newest release
## What's new?
✅ Vulnerability fixes and security improvements\
✅ Support for dynamic keys in [**Link component**](../../../../4.7.x/docs/building-blocks/ui-designer/ui-component-types/typography#link) URL property across all platforms\
✅ Added property on View for enabling or disabling row selection in tasks table
### Support for dynamic keys in Link component URL property
You can now use dynamic keys in the Link component's URL property across all platforms (Web, iOS, and Android). This enhancement allows you to dynamically construct URLs using process data, enabling more flexible navigation patterns in your applications.

### Task Manager rowSelection property on view
A new "Enable row selection" property has been added to Task Manager views, enabling you to control row selection behavior in task tables.

## Bug fixes
Fixed an issue where merging branches that contain multiple past merge commits would fail with an error. The merge conflict resolution now properly handles complex merge histories when adding values to enumerations or making other configuration changes.
Resolved an issue where the CMS enumerations Kafka endpoint only returned content from the local project and not from library dependencies. The endpoint now correctly retrieves enumeration content from both the current project and all dependency libraries.
Fixed localization issue in Task Manager where table content wasn't respecting the current language setting. Task Manager tables now properly use the selected language for all displayed content.
Resolved an issue where setting a modal's height to "fixed" would not apply correctly in Angular and React renderers. Fixed height configuration now works as expected for modal components.
Fixed styling issue where fixed-height containers incorrectly used `overflow-y: scroll` instead of `overflow-y: auto`. Containers now only show scrollbars when content exceeds the container height.
# Deployment guidelines v5.0.0
Source: https://docs.flowx.ai/release-notes/v5.x/v5.0.0-july-2025/deployment-guidelines-v5.0
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

## Component versions
| Component | 5.0.0 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| -------------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ----- |
| **process-engine** | **9.29.2** | 8.23.2 | 8.22.3 | 8.21.1 | 8.17.0 | 8.15.2 | 8.13.0 | 8.9.0 | 8.5.1 | 8.3.1 | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **9.25.2** | 7.17.3 | 7.16.3 | 7.15.2 | 7.12.2 | 7.9.2 | 7.8.13 | 7.8.5 | 7.7.6 | 7.5.1 | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **9.69.0** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **9.21.2** | 5.10.3 | 5.9.2 | 5.8.2 | 5.5.1 | 5.4.16 | 5.4.12 | 5.4.8 | 5.3.3 | 5.2.11 | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **9.12.0** | 5.6.2 | 5.5.2 | 5.4.0 | 5.1.1 | 5.0.13 | 5.0.11 | 5.0.10 | 5.0.4 | 5.0.2 | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **9.12.0** | 5.6.2 | 5.5.2 | 5.4.0 | 5.1.1 | 5.0.19 | 5.0.17 | 5.0.16 | 5.0.7 | 5.0.5 | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **9.14.2** | 6.7.2 | 6.6.2 | 6.5.0 | 6.2.1 | 6.1.15 | 6.1.13 | 6.1.12 | 6.1.3 | 6.1.0 | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **9.17.2** | 6.9.2 | 6.8.2 | 6.7.0 | 6.4.1 | 6.3.18 | 6.3.16 | 6.3.13 | 6.3.4 | 6.3.1 | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **task-management-plugin** | **9.14.2** | 7.8.2 | 7.7.2 | 7.6.0 | 7.3.1 | 7.2.17 | 7.2.15 | 7.2.14 | 7.2.6 | 7.2.2 | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **9.12.1** | 4.6.2 | 4.5.2 | 4.4.0 | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.13 | 4.0.6 | 4.0.4 | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **9.15.2** | 6.7.2 | 6.6.2 | 6.5.0 | 6.1.1 | 6.0.17 | 6.0.15 | 6.0.14 | 6.0.6 | 6.0.4 | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **advancing-controller** | **9.11.0** | 4.6.2 | 4.6.2 | 4.4.0 | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.12 | 4.0.5 | 4.0.3 | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **9.26.2** | 2.15.3 | 2.14.2 | 2.13.0 | 2.9.0 | 2.7.2 | 2.6.0 | 2.3.16 | 2.3.9 | 2.3.2 | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **9.27.3** | 2.22.3 | 2.21.2 | 2.20.2 | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **9.27.3** | 2.22.3 | 2.21.2 | 2.20.2 | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **9.11.0** | 2.9.2 | 2.8.1 | 2.7.1 | 2.4.1 | 2.3.2 | 2.2.11 | 2.2.9 | 2.2.2 | 2.1.0 | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **authorization-system** | **9.14.2** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **nosql-db-runner** | **9.11.0** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | |
### Embedded components
| Component | 5.0.0 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------- | ---------- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **SpiceDB** | **1.42.1** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **DGraph** | **25.0.0** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
### Renderers
| Component | 5.0.0 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | --------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ----- |
| **@flowx/angular-sdk** | **9.69.0** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **9.69.0** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **9.69.0** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **9.69.0** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **9.69.0** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **9.69.0** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **9.69.0** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **9.69.0** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **iOS renderer** | **9.0.0** | 4.0.29 | 4.0.29 | 4.0.29 | 4.0.21 | 4.0.19 | 4.0.14 | 4.0.7 | 4.0.7 | 4.0.5 | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **9.0.0** | 4.0.29 | 4.0.29 | 4.0.24 | 4.0.24 | 4.0.23 | 4.0.15 | 4.0.13 | 4.0.13 | 4.0.12 | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Plugins
| Component | 5.0.0 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| -------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ----- | ------ | ------ | ------ | ------ |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **reporting-plugin** | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
## AI Platform
| Component | 5.0.0 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | ------ | ----- | ------ | ------ | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-assistant** | **9.2.3** | 1.8.22 | 1.8.21 | 1.8.19 | 1.8.18 | 1.8.17 | 1.8.12 | 1.8.9 | 1.8.2 | 1.7.2 | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **9.0.12** | 1.4.6 | 1.4.6 | 1.4.5 | 1.4.5 | 1.4.5 | 1.4.3 | 1.4.1 | 1.2.35 | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **9.0.1** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **connected-graph** | **9.0.1** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **knowledge-graph** | **9.0.1** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **agents** | **9.0.1** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **conversations** | **9.0.1** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **models** | **9.0.1** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **tenants** | **9.0.1** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **planner** | **9.0.1** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **ai-designer** | **9.0.1** | - | | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **ai-analyst** | **9.0.1** | - | | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Supported Versions |
| ---------------- | -------------------- | ------------------ |
| 5.0.0 | Keycloak | 26+ |
| 5.0.0 | Kafka | 3.8 - 3.9 |
| 5.0.0 | PostgreSQL | 16 - 17 |
| 5.0.0 | Oracle Database | 21c, 23ai |
| 5.0.0 | MongoDB | 7 - 8 |
| 5.0.0 | Redis | 7.4 - 8.0 |
| 5.0.0 | Elasticsearch | 8 - 9 |
| 5.0.0 | Angular (Web SDK) | 19.x |
| 5.0.0 | React (Web SDK) | 18.x |
Starting FlowX 5.0, the following versions of 3rd Party Dependencies will no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.8
* Redis versions older than 7.4
# Post-deployment configuration
Source: https://docs.flowx.ai/release-notes/v5.x/v5.0.0-july-2025/migrating-from-v4.7.x-to-5.0/configuration-and-migration
This section contains the steps in order that we recommend for post-deployment configuration of FlowX.AI.
## Redis cache clearing
**Cache Clearing**:
* FlowX.AI 5.0 removes process definition versioning. Cache must be cleared to remove legacy cached classes.
* When you start the runtime-manager on version 5.x, the library-to-library migration runs automatically. You must clear the cache after this step because a new field is added to the build mongo document, which is required for various operations.
### Endpoint
`POST {{baseUrlAdmin}}/api/internal/cache/clear`
### Body:
```json theme={"system"}
{
"cacheNames": [
"flowx:core:cache"
]
}
```
## Authentication & authorization
### Add users to default workspace
**Process**:
1. **User Re-login**: Existing configurators must log into FlowX.AI Designer once to create user references in FlowX.AI database
2. **Workspace Assignment**: Organization admin assigns users to the default workspace to reestablish access to existing assets and resources
**Access Restoration**: Without workspace assignment, existing users will lose access to previously available resources and projects.
This step ensures business continuity by maintaining user access to existing FlowX.AI assets in the new workspace-based architecture.
### Role mapping guide
FlowX.AI 4.7.x roles stored in Keycloak are not automatically migrated. Manual role assignment is required.
**FlowX.AI 4.7.x** → **FlowX.AI 5.0**
* `FLOWX_ADMIN` → `workspace_admin`
* `FLOWX_CONFIGURATOR` → `workspace_user` or `project_editor`
* `FLOWX_UI_DESIGNER` → `theme_editor`
* `FLOWX_VIEWER` → `project_viewer`
* Custom Keycloak roles → Manual review required
**Important Changes**
* Roles are now workspace-scoped
* More granular permission structure
* Database-stored instead of token-based
* New role hierarchy requires review
### Migration process
Document all existing Keycloak roles and their assigned users before migration
Determine appropriate FlowX.AI 5.0 roles for each user based on their current access needs
Decide how to organize users into workspaces based on business requirements
Use the FlowX.AI 5.0 interface to assign appropriate roles to users in their respective workspaces
Test user access to ensure proper permissions are granted and restrictions are enforced
### For existing customers
The auth-system will automatically:
* Create default organization and workspace
* Import the admin user from Keycloak
* Assign organization admin privileges
* Set up default roles and groups
The data-sync service will:
* Migrate existing projects from app-manager database to CAS database
* Assign all existing resources to the default workspace
* Preserve all existing functionality
* Require temporary write access to CAS database
**Note**: This is the only exception to the exclusive write access rule.
***
## Header migration: Fx-BuildId to Fx-Build-App-Version-Id
### Background
The header `Fx-BuildId` has been renamed to `Fx-Build-App-Version-Id` to accurately reflect that it contains an application version identifier, not a build identifier.
### Migration strategy
During the transition period, both headers are supported:
* **New messages**: Include `Fx-Build-App-Version-Id` with the application version ID
* **Legacy support**: `Fx-BuildId` is still accepted for backward compatibility
* **Priority**: FlowX.AI platform reads `Fx-Build-App-Version-Id` first, then falls back to `Fx-BuildId` if not present
### Implementation guidelines
1. **New integrations**: Use `Fx-Build-App-Version-Id` header
2. **Existing integrations**: Will continue to work during migration period
3. **Client considerations**: Existing client instances may continue sending `Fx-BuildId` until they are updated
### Timeline considerations
Client applications with long-running instances may continue using the legacy `Fx-BuildId` header until those instances complete their processes and are updated to use the new header format.
# Update environment variables
Source: https://docs.flowx.ai/release-notes/v5.x/v5.0.0-july-2025/migrating-from-v4.7.x-to-5.0/environment-variables
Update environment variables for all existing FlowX.AI services
Update environment variable configurations for all existing FlowX.AI services to support version 5.1.0 compatibility.
## Audit core
Elasticsearch configuration migrates from `SPRING_ELASTICSEARCH_*` to `FLOWX_ELASTICSEARCH_*` namespace with enhanced index management.
### Variables to remove & replace
| Remove This Variable | Replace With | Old Default | New Default |
| ----------------------------------------------- | -------------------------------------------- | ------------ | ------------ |
| `SPRING_ELASTICSEARCH_INDEXSETTINGS_DATASTREAM` | `FLOWX_ELASTICSEARCH_INDEXSETTINGS_NAME` | `audit-logs` | `audit-logs` |
| `SPRING_ELASTICSEARCH_INDEXSETTINGS_SHARDS` | `FLOWX_ELASTICSEARCH_INDEXSETTINGS_SHARDS` | `2` | `2` |
| `SPRING_ELASTICSEARCH_INDEXSETTINGS_REPLICAS` | `FLOWX_ELASTICSEARCH_INDEXSETTINGS_REPLICAS` | `2` | `0` |
### New variables to add
| Variable | Default Value | Description |
| --------------------------------------- | ------------- | ---------------------------------- |
| `FLOWX_ELASTICSEARCH_INDEXROLLOVERDAYS` | `30` | 🆕 Automatic index rollover policy |
## Data Search
Simple migration with containerization support and namespace alignment.
### Variables to update
| Variable | Current Value | New Value | Reason |
| -------------------------------- | ---------------- | -------------------- | ------------------------ |
| `SPRING_ELASTICSEARCH_REST_URIS` | `localhost:9200` | `elasticsearch:9200` | Containerization support |
### Variables to replace
| Remove This | Add This | Default Value |
| ----------------------------------------- | ---------------------------------------- | ------------------ |
| `SPRING_ELASTICSEARCH_INDEXSETTINGS_NAME` | `FLOWX_ELASTICSEARCH_INDEXSETTINGS_NAME` | `process_instance` |
## Kafka Configuration
Consumer group naming standardized to kebab-case across all FlowX.AI services with new messaging features for enhanced functionality.
**Do not modify default consumer group names.** We strongly recommend against changing the default consumer group names as this operation can lead to misconfigurations. The application is designed to work and scale with the consumer groups as they are defined by default.
### Consumer group naming changes
**Admin (3 groups):**
| Old Group ID | New Group ID |
| ---------------------------------- | -------------------------------------- |
| `genericProcessingGroup` | `generic-processing-group` |
| `processSyncGroup` | `process-sync-group` |
| `adminResourcesUsagesRefreshGroup` | `admin-resources-usages-refresh-group` |
**Application Manager (15 groups):**
| Old Group ID | New Group ID |
| ----------------------------------- | ----------------------------------------- |
| `appResourceExportGroup` | `app-resource-export-group` |
| `appResourceImportGroup` | `app-resource-import-group` |
| `appResourceUsagesGroup` | `app-resource-usages-group` |
| `appResElemUsageValidationResp` | `app-resource-elem-usage-validation-resp` |
| `appResourceCopyGroup` | `app-resource-copy-group` |
| `appResourceSyncGroup` | `app-resource-sync-group` |
| `appResourceUpdatePropagationGroup` | `app-resource-update-propagation-group` |
| `appMergeItemGroup` | `app-merge-item-group` |
| `buildCreateGroup` | `build-create-group` |
| `buildUpdateGroup` | `build-update-group` |
| `buildResourceExportGroup` | `build-resource-export-group` |
| `buildResourceImportGroup` | `build-resource-import-group` |
| `buildRuntimeDataGroup` | `build-runtime-data-group` |
| `buildStartTimerEventsUpdatesGroup` | `build-start-timer-events-updates-group` |
| `processStartGroup` | `process-start-group` |
**CMS Core (1 group):**
| Old Group ID | New Group ID |
| ---------------------- | -------------------- |
| `cms-consumer-preview` | `cms-consumer-group` |
**Document Plugin (1 group):**
| Old Group ID | New Group ID |
| ----------------------------------------- | ----------------------------- |
| `kafka-svc-document-consumer-local-test2` | `kafka-svc-document-consumer` |
| | |
**Integration Designer (3 groups):**
| Old Group ID | New Group ID |
| ------------------------------------------- | ------------------------------------------------------ |
| `integrDesignerResourcesUsagesRefreshGroup` | `integration-designer-resources-usages-refresh-group` |
| `genericProcessingGroup` | `start-workflows-group` |
| `resElemUsageValidation` | `integration-designer-res-elem-usage-validation-group` |
**Notification Plugin (1 group):**
| Old Group ID | New Group ID |
| ------------------ | ------------------------------ |
| `notif123-preview` | `notification-plugin-consumer` |
**Process Engine (11 groups):**
| Old Group ID (all were `notif123-preview`) | New Group ID |
| ------------------------------------------ | -------------------------- |
| `notif123-preview` | `advance` |
| `notif123-preview` | `notify-parent` |
| `notif123-preview` | `adapters` |
| `notif123-preview` | `scheduler-run-action` |
| `notif123-preview` | `scheduler-advancing` |
| `notif123-preview` | `message-events` |
| `notif123-preview` | `process-start` |
| `notif123-preview` | `process-start-for-event` |
| `notif123-preview` | `process-expire` |
| `notif123-preview` | `process-operations` |
| `notif123-preview` | `process-batch-processing` |
### Application Manager specific features
#### New environment variables
| Variable | Default Value | Description |
| ---------------------------------------------------------------- | ------------- | ----------------------------------- |
| `FLOWX_RESOURCESUSAGES_REFRESHPRODUCER_REFRESHEXPIRATIONSECONDS` | `300` | 🆕 Refresh expiration timeout |
| `SERVER_MAXHTTPREQUESTHEADERSIZE` | `16KB` | 🆕 Maximum HTTP request header size |
#### New Kafka features
Consumer Group: `app-resource-update-propagation-group`\
Threads: 3\
Topic: `ai.flowx.{env}.application-version.resource.update.propagation.v1`
Consumer Group: `build-runtime-data-group`\
Threads: 2\
Topic: `ai.flowx.{env}.build.runtime-data.v1`
Topic: `ai.flowx.{env}.application-version.sync.business-rule.in.v1`\
Purpose: Business rule synchronization
Topic: `ai.flowx.{env}.application-version.sync.process.in.v1`\
Purpose: Enhanced process synchronization
Topic: `ai.flowx.{env}.application-version.sync.reusable-template.in.v1`\
Purpose: Reusable template synchronization
#### Kafka environment variables (optional overrides)
```bash New Topics theme={"system"}
# Resource Update Propagation
KAFKA_TOPIC_APPLICATION_RESOURCE_RESOURCEUPDATEPROPAGATION=ai.flowx.dev.application-version.resource.update.propagation.v1
# Build Runtime Data
KAFKA_TOPIC_BUILD_RUNTIMEDATA=ai.flowx.dev.build.runtime-data.v1
# Business Rule Sync
KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_OUT_BUSINESSRULE=ai.flowx.dev.application-version.sync.business-rule.in.v1
# Process Sync (restructured)
KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_OUT_PROCESS=ai.flowx.dev.application-version.sync.process.in.v1
# Reusable Templates sync
KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_OUT_REUSABLE_TEMPLATE=ai.flowx.dev.application-version.sync.reusable-template.in.v1
```
```bash Consumer Groups theme={"system"}
# New Consumer Groups
KAFKA_CONSUMER_GROUPID_APPLICATION_RESOURCE_UPDATEPROPAGATION=app-resource-update-propagation-group
KAFKA_CONSUMER_GROUPID_BUILD_RUNTIMEDATA=build-runtime-data-group
# Thread Configuration
KAFKA_CONSUMER_THREADS_APPLICATION_RESOURCE_UPDATEPROPAGATION=3
KAFKA_CONSUMER_THREADS_BUILD_RUNTIMEDATA=2
```
**Automatic Configuration**: Most deployments can rely on the built-in naming patterns without explicit environment variable overrides.
## Integration Designer
### Storage configuration
Added support for S3 storage for files in Integration Designer.
| Variable | Default Value | Description |
| ---------------------------------------------- | ------------------- | ------------------------ |
| `APPLICATION_FILESTORAGE_TYPE` | `s3` | 🆕 Storage type |
| `APPLICATION_FILESTORAGE_PARTITIONSTRATEGY` | `NONE` | 🆕 Partition strategy |
| `APPLICATION_FILESTORAGE_DELETIONSTRATEGY` | `delete` | 🆕 Deletion strategy |
| `APPLICATION_FILESTORAGE_S3_ENABLED` | `true` | 🆕 S3 enabled |
| `APPLICATION_FILESTORAGE_S3_SERVERURL` | `http://minio:9000` | 🆕 S3 server URL |
| `APPLICATION_FILESTORAGE_S3_ENCRYPTIONENABLED` | `false` | 🆕 S3 encryption enabled |
| `APPLICATION_FILESTORAGE_S3_ACCESSKEY` | `minio` | 🆕 S3 access key |
| `APPLICATION_FILESTORAGE_S3_SECRETKEY` | `minio123` | 🆕 S3 secret key |
| `APPLICATION_FILESTORAGE_S3_BUCKETPREFIX` | `workflows-bucket` | 🆕 S3 bucket prefix |
### Redis
Added caching when running a workflow.
| Variable | Default Value | Description |
| ------------------------------- | ---------------------------------------- | --------------------- |
| `SPRING_CACHE_TYPE` | `redis` | 🆕 Cache type |
| `SPRING_CACHE_REDIS_KEYPREFIX` | `flowx:core:cache:integration-designer:` | 🆕 Cache key prefix |
| `SPRING_CACHE_REDIS_TIMETOLIVE` | `5000000` | 🆕 Cache time to live |
| `SPRING_REDIS_HOST` | `redis-master` | 🆕 Redis host |
| `SPRING_REDIS_PORT` | `6379` | 🆕 Redis port |
| `SPRING_REDIS_PASSWORD` | `defaultpassword` | 🆕 Redis password |
| `SPRING_REDIS_TTL` | `5000000` | 🆕 Redis time to live |
| `SPRING_DATA_REDIS_HOST` | `spring.redis.host` | 🆕 Redis host |
## Java runtime configuration
FlowX.AI containers and services must rely exclusively on Java-standard environment variables for runtime tuning.
| Deprecated variables | Standard Replacement | Notes |
| -------------------------------- | -------------------- | ------------------------------------------------------------------ |
| `JAVA_OPTS`, `JAVA_TOOL_OPTIONS` | `JDK_JAVA_OPTIONS` | Ensures compatibility with Java 21 and simplifies container config |
Environment-specific memory configurations must now be defined using `JDK_JAVA_OPTIONS`. Avoid relying on `JAVA_OPTS`, `JAVA_TOOL_OPTIONS` or legacy Docker-level overrides — these are no longer processed explicitly.
## Config profiles
Config profiles are deprecated since 4.7.6 version.
Remove legacy `CONFIG_PROFILE` usage. Delete any `CONFIG_PROFILE` environment variable definitions from deployments. This variable is no longer referenced by FlowX.AI services.
# Install new services
Source: https://docs.flowx.ai/release-notes/v5.x/v5.0.0-july-2025/migrating-from-v4.7.x-to-5.0/install-services
Step-by-step installation guide for new FlowX.AI 5.0 services
FlowX.AI 5.0 introduces two new services:
1. **Authorization System (CAS)** - Centralized authorization and permission management
2. **NoSQL DB Runner** - The NoSQL DB Runner is a backend microservice that powers FlowX.AI Database functionality. It provides MongoDB and Azure Cosmos DB operations support for FlowX.AI Database collections and handles data persistence operations across FlowX.AI processes.
# Overview
Source: https://docs.flowx.ai/release-notes/v5.x/v5.0.0-july-2025/migrating-from-v4.7.x-to-5.0/migration-overview
Complete migration guide from FlowX.AI 4.7.x to 5.0 with prerequisites and step-by-step process
You can only upgrade from version 4.7.6 (or newer) to 5.0.0. If you’re on an earlier version, upgrade to the latest LTS version first.
## Success factors
Take care when following steps are mandatory and will prevent service startup if skipped:
1. **SpiceDB and DGraph** must be installed before any FlowX.AI services
DGraph is required only if you are using FlowX AI agents. If not, you can skip this step.
2. **Organization admin user** must be configured before authorization-system service deployment
3. **Service accounts** must have `SA_FLOWX` role assigned
4. **Data migration** must complete before service upgrades
## Migration process
Follow these steps in the exact order specified to ensure a successful migration:
### Data migration
Migrate existing Elasticsearch data to support the new workspace-based architecture.
### Installing new third parties
**New mandatory infrastructure components:**
* **SpiceDB** - Authorization and permission management backend
* **DGraph** - Graph-based data operations and relationships
### Upgrading existing third parties
Update existing infrastructure to the new supported versions:
* Kafka 3.8+, Redis 7.4+, Elasticsearch 8+, Keycloak 26+
### Organization admin user
Configure the organization admin user before deploying the authorization-system service.
### Service accounts
Assign `SA_FLOWX` role to all service accounts used by FlowX services.
See the details on prerequisites for migration
Deploy new FlowX.AI 5.0 services in the correct order to ensure proper startup and dependency validation.
**Required installation sequence:**
1. **Authorization System (CAS)** - Must be installed first to validate SpiceDB connection
2. **NoSQL DB Runner** - Backend service for [FlowX.AI Database](../../../5.0-tech-preview/docs/platform-deep-dive/integrations/flowx-database)
**Service Startup Dependency**: Authorization System will not start without proper SpiceDB installation and organization admin configuration.
Step-by-step installation with validation procedures
Installing Authorization System first allows you to validate all critical configurations before proceeding.
Update environment variable configurations for all existing FlowX.AI services to support version 5.0 compatibility.
**Configuration updates include:**
* New Kafka topics and consumer groups
* Updated Elasticsearch settings and index configurations
* Enhanced security and authorization parameters
* New service integration endpoints
Update environment variables for all existing FlowX.AI services
Upgrade all existing FlowX.AI services to version 5.0 after completing environment variable updates.
See the details on container apps (Renderers SDKs)
Perform the post deployment steps:
* Validate data-sync migrations
* Clear cache with endpoint
* Remove deprecated configuration roles (optional)
* Add users to default workspace
### Validate data-sync migrations
Verify that all data synchronization processes completed successfully and perform additional system checks.
### Clear cache with endpoint
**Required**: Clear Redis cache using the dedicated endpoint with organization admin token.
**Cache Clearing**:
* FlowX.AI 5.0 removes process definition versioning. Cache must be cleared to remove legacy cached classes.
* When you start the runtime-manager on version 5.x, the library-to-library migration runs automatically. You must clear the cache after this step because a new field is added to the build mongo document, which is required for various operations.
### Remove deprecated configuration roles (optional)
Clean up legacy roles from Keycloak or other authentication servers that are now managed by CAS.
### Add users to default workspace
**Process**:
1. **User Re-login**: Existing configurators must log into FlowX.AI Designer once to create user references in FlowX.AI database
2. **Workspace Assignment**: Organization admin assigns users to the default workspace to reestablish access to existing assets and resources
**Access Restoration**: Without workspace assignment, existing users will lose access to previously available resources and projects.
Complete post-deployment procedures and validation
# Prerequisites
Source: https://docs.flowx.ai/release-notes/v5.x/v5.0.0-july-2025/migrating-from-v4.7.x-to-5.0/prerequisites
This section contains the steps in order that we recommend for migrating data from FlowX v4.7.x to v5.0.0.
## Upgrading existing third parties
Update existing infrastructure to at least the new supported versions:
| Component | 4.7.6 | FlowX.AI 5.0 |
| ----------------- | --------- | ------------- |
| **Kafka** | 3.2 - 3.9 | **3.8 - 3.9** |
| **Redis** | 7.2 - 8.0 | **7.4 - 8.0** |
| **Elasticsearch** | 7 - 9 | **8 - 9** |
| **Keycloak** | 22,26+ | **26+** |
***
## Installing new third parties
FlowX.AI 5.0 requires two new infrastructure components that must be installed and properly configured before any FlowX.AI services can start.
* **SpiceDB** - Required for authorization management (Must be accessible by the authorization-system service)
* **DGraph** - Required for data relationships and graph operations. If you are not using FlowX AI agents (you don't have an AI deployment), you can skip this step.
***
## Elasticsearch workspace migration
**The primary goal of this Elasticsearch migration is to add the default workspace ID to all existing resources in your environment.** This ensures that all your current data (process instances, audit logs, etc.) will be properly associated with a workspace and remain accessible after the upgrade to FlowX 5.0.0.
Without this migration, existing data would not have workspace associations and could become inaccessible or invisible in workspace-scoped operations.
Elasticsearch index mappings must be updated before upgrading to FlowX.AI 5.0 to ensure workspace functionality works correctly.
### Prerequisites for migration
Before upgrading to FlowX.AI 5.0, you must update the mappings for all existing Elasticsearch indices to include the `workspaceId` field:
```json theme={"system"}
PUT /{indexName/indexPattern}/_mapping
{
"properties": {
"workspaceId": {
"type": "keyword"
}
}
}
```
This mapping update is required for:
* Process instances indices (you can find the indices in the `flowx-process-engine` setup guide at `FLOWX_INDEXING_PROCESSINSTANCE_INDEX_NAME` environment variable, if not set, the default is `process_instance`)
* Audit log indices (you can find the indices in the `audit-core` setup guide at `SPRING_ELASTICSEARCH_INDEX_SETTINGS_DATASTREAM` environment variable)
### Migration execution methods
You can execute these migration queries using:
* **Kibana Dev Tools**: Execute queries directly in the Kibana interface
* **Elasticsearch API**: Use direct API calls to perform migrations
### Migration timing
**Recommended approach**: Complete these Elasticsearch migrations **before** upgrading FlowX.AI microservices. Upgrading services first and then creating new workspaces will complicate the migration process.
### Process instances migration
Process instances indices require manual migration using Elasticsearch's `update_by_query` API to assign them to the default workspace:
#### Synchronous migration
```json theme={"system"}
POST /{indexName}/_update_by_query?slices=auto
{
"script": {
"source": "ctx._source.workspaceId = params.workspace_id;",
"lang": "painless",
"params": {
"workspace_id": "00000000-0000-0000-0000-000000000001"
}
},
"query": {
"bool": {
"must_not": {
"exists": {
"field": "workspaceId"
}
}
}
}
}
```
#### Asynchronous migration (for large datasets)
For large datasets, use asynchronous migration:
```json theme={"system"}
POST /{indexName}/_update_by_query?slices=auto&wait_for_completion=false
```
Monitor async tasks with:
```json theme={"system"}
GET /_tasks/{task_id}
```
### Audit logs migration
Audit logs follow the same migration process as process instances, using identical scripts and procedures to assign them to the default workspace:
```json theme={"system"}
POST /{audit_index_pattern}/_update_by_query?slices=auto
{
"script": {
"source": "ctx._source.workspaceId = params.workspace_id;",
"lang": "painless",
"params": {
"workspace_id": "00000000-0000-0000-0000-000000000001"
}
},
"query": {
"bool": {
"must_not": {
"exists": {
"field": "workspaceId"
}
}
}
}
}
```
### Performance optimization
* Use `slices=auto` for automatic parallelization based on primary shards
* For multiple indices, use patterns: `POST /my_pattern-*/_update_by_query?slices=auto`
* Batch processing with size parameter: `?size=1000`
* Monitor large operations using asynchronous execution
### Post-migration impact
**Without proper Elasticsearch migration, you will experience:**
* Some process instances may not appear in search results
* Data-search functionality may not return complete results
* Workspace-scoped queries will fail for unmigrated data
* **Existing resources will not be visible or accessible within the new workspace structure**
### Default workspace ID
The migration uses the default workspace ID: `00000000-0000-0000-0000-000000000001`
All existing resources (process instances, audit logs, etc.) will be moved to this default workspace, ensuring continuity of operations after the upgrade to FlowX.AI 5.0.0.
***
### Organization admin user
Configure the organization admin user before deploying the authorization-system service (that is mentioned in the [Install Services](./install-services) section).
Details on how to configure the organization admin user:
***
#### Pre-migration preparation
Required configuration for the authorization-system service:
* `SPRING_LIQUIBASE_PARAMETERS_CREATEDEFAULTWORKSPACE`= `true` (mandatory for migrations)
* `SPRING_LIQUIBASE_PARAMETERS_DEFAULTORGADMINUSERSUBJECTID`= `` (mandatory for migrations)
To get the subject-id of the admin user, you can extract it from the JWT token of the admin user.

Make sure the admin user is created in Keycloak before deploying the authorization-system service.
***
## Update service accounts
FlowX.AI 5.0 introduces new service account role requirements that must be configured before service deployment.
All service accounts used by FlowX.AI services must have the `SA_FLOWX` role assigned. Services will not authenticate properly without this role.
\--
## Additional Keycloak roles requirements for authorization-system service
Before deploying the `authorization-system` service, you must assign additional roles to its service account in Keycloak to enable user management operations.
**Required client roles for the service account:**
```json theme={"system"}
{
"clientRoles" : {
"realm-management" : [
"manage-users",
"query-users",
"view-users"
]
}
}
```
***
## Process instances migration
All active process instances will be migrated under default workspace.
For clients who need inactive process instances migrated, we’ll provide migration script which will be run post migration.
# Renderer SDKs
Source: https://docs.flowx.ai/release-notes/v5.x/v5.0.0-july-2025/migrating-from-v4.7.x-to-5.0/renderers
This guide assists in migrating from FlowX.AI v4.7.x to v5.0.
## Angular SDK migration guide
### Upgrading to the new SDK libraries
The Angular SDK node packages have been updated to support Workspaces, introduced in FlowX.AI v5.0. All container apps that want to use the new SDKs should update to the latest package versions and implement the required workspace configuration.
* Remove old FlowX.AI SDK libraries (if upgrading from earlier versions):
```bash theme={"system"}
npm uninstall @flowx/angular-sdk @flowx/core-sdk @flowx/core-theme @flowx/angular-theme @flowx/angular-ui-toolkit
```
* Install new FlowX.AI v5.0 packages:
```bash theme={"system"}
npm install \
@flowx/core-sdk@ \
@flowx/core-theme@ \
@flowx/angular-sdk@ \
@flowx/angular-theme@ \
@flowx/angular-ui-toolkit@ \
@angular/cdk@19 \
@types/event-source-polyfill
```
Replace `` with the correct version corresponding to your FlowX.AI v5.0 platform version. Check: **Release Notes → v5.0 → Deployment guidelines → Component versions**.
* Ensure your Angular version is compatible:
```bash theme={"system"}
npm install -g @angular/cli@19
```
* Verify system requirements:
* Node.js: v20.9.0 or higher
* npm: v10.1.0 or higher
* Angular: \~19
* Run through all the migration steps in the [New SDK API changes](#new-sdk-api-changes) section below.
### SDK API changes
In the Angular SDK, the `` component has a new mandatory parameter: `workspaceId`.
| Name | Description | Type | Requirement |
| ------------- | ---------------------------------------------------------------------------- | -------- | ----------- |
| `workspaceId` | **Workspace identifier** that contains the project and process to be started | `string` | Mandatory |
Add the definition for this property in your component:
```typescript theme={"system"}
export class AppComponent {
workspaceId = 'your-workspace-id';
// ... other existing properties
}
```
Use this parameter as input for the `` component:
```html theme={"system"}
>
```
### Task management component changes
The task management component now also requires workspace context:
```html theme={"system"}
>
```
***
## React SDK migration guide
### Upgrading to the new SDK libraries
The React SDK node packages have been updated to support Workspaces, introduced in FlowX.AI v5.0. All container apps that want to use the new SDKs should update to the latest package versions and implement the required workspace configuration.
* Remove old FlowX.AI SDK libraries:
```bash theme={"system"}
npm uninstall @flowx/react-sdk @flowx/core-sdk @flowx/core-theme @flowx/react-theme @flowx/react-ui-toolkit
```
* Install new FlowX.AI v5.0 packages:
```bash theme={"system"}
npm install \
react@18 \
react-dom@18 \
@flowx/core-sdk@ \
@flowx/core-theme@ \
@flowx/react-sdk@ \
@flowx/react-theme@ \
@flowx/react-ui-toolkit@ \
air-datepicker@3 \
axios \
ag-grid-react@32
```
Replace `` with the correct version corresponding to your FlowX.AI v5.0 platform version. Check: **Release Notes → v5.0 → Deployment guidelines → Component versions**.
* Ensure your React version is compatible:
```bash theme={"system"}
npm install react@~18 react-dom@~18
```
* Verify Node.js version compatibility:
* Node.js: v18.16.9 or higher
* npm: v10.8.0 or higher
* Run through all the migration steps in the [New SDK API changes](#new-sdk-api-changes) section below.
### New SDK API changes
In the React SDK, the `` component has a new mandatory parameter: `workspaceId`.
| Name | Description | Type | Requirement |
| ------------- | ---------------------------------------------------------------------------- | -------- | ----------- |
| `workspaceId` | **Workspace** identifier that contains the project and process to be started | `string` | Mandatory |
Add the definition for this property in your component:
```typescript theme={"system"}
const workspaceId = 'your-workspace-id';
```
Use this parameter as input for the `` component:
```tsx theme={"system"}
```
### Task management component changes
The task management component now also requires workspace context:
```tsx theme={"system"}
```
## Android SDK migration guide
### System requirements
System requirements:
* **minSdk = 26**
* **compileSdk = 35**
The SDK library was build using:
* **[Android Gradle Plugin](https://developer.android.com/build/releases/gradle-plugin) 8.11.0**
* **[Gradle](https://gradle.org/releases/) 8.14.2**
* **[Kotlin](https://kotlinlang.org/) 2.2.0**
### Library dependencies
Impactful dependencies:
* **[Android Core KTX](https://developer.android.com/kotlin/ktx#core) 1.16.0**
* **[Android Activity Compose](https://developer.android.com/jetpack/androidx/releases/activity) 1.10.1**
* **[Compose BOM](https://developer.android.com/jetpack/compose/bom/bom-mapping) 2025.06.01**
* **[Compose Navigation](https://developer.android.com/develop/ui/compose/navigation) 2.9.1**
* **[Android Lifecycle](https://developer.android.com/jetpack/androidx/releases/lifecycle) 2.9.1**
* **[Accompanist Permissions](https://google.github.io/accompanist/permissions/) 0.37.3**
* **[Kotlin Coroutines](https://kotlinlang.org/docs/coroutines-overview.html) 1.10.2**
* **[Android DataStore](https://developer.android.com/jetpack/androidx/releases/datastore) 1.1.7**
* **[Android Preference](https://developer.android.com/jetpack/androidx/releases/preference) 1.2.1**
* **[Android Security](https://developer.android.com/jetpack/androidx/releases/security) 1.1.0-beta01**
* **[OkHttp BOM](https://square.github.io/okhttp/) 4.12.0**
* **[Retrofit](https://square.github.io/retrofit/) 2.12.0**
* **[Moshi](https://github.com/square/moshi) 1.15.2**
* **[Coil BOM](https://coil-kt.github.io/coil/) 3.2.0**
* **[Android Core Library Desugaring](https://developer.android.com/studio/write/java8-support#library-desugaring) 2.1.5**
Other dependencies:
* **[Android Annotation](https://developer.android.com/jetpack/androidx/releases/annotation) 1.9.1**
* **[Google Protobuf](https://github.com/protocolbuffers/protobuf/tree/main/java#use-java-protocol-buffers-on-android) 4.31.1**
* **[Mozilla Rhino](https://github.com/mozilla/rhino) 1.8.0**
* **[JetBrains Markdown](https://github.com/JetBrains/markdown) 0.7.3**
* **[CommonMark](https://github.com/commonmark/commonmark-java) 0.25.0**
- **[Koin](https://insert-koin.io/)** dependency has been removed
- **[Gson](https://github.com/google/gson)** dependency has been removed
Some dependencies were removed, others got updated.
It is highly recommended that the container projects to be aligned with these versions in order to avoid any compatibility issues.
### New SDK Migration Guide
To successfully build and run your project with the updated SDK, please follow these sequential steps within your container project:
```kotlin [rootProject]/app/build.gradle.kts lines theme={"system"}
implementation("ai.flowx.android:android-sdk:4.0.25") // [!code --]
implementation("ai.flowx.android:sdk:9.0.0") // [!code ++]
```
```kotlin [rootProject]/app/build.gradle.kts lines theme={"system"}
android {
compileSdk = 34 // [!code --]
compileSdk = 35 // [!code ++]
}
```
```kotlin [rootProject]/app/build.gradle.kts theme={"system"}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8 // [!code --]
sourceCompatibility = JavaVersion.VERSION_17 // [!code ++]
targetCompatibility = JavaVersion.VERSION_1_8 // [!code --]
targetCompatibility = JavaVersion.VERSION_17 // [!code ++]
}
kotlinOptions { // [!code --]
jvmTarget = "1.8" // [!code --]
} // [!code --]
kotlin { // [!code ++]
compilerOptions { // [!code ++]
jvmTarget.set(JvmTarget.JVM_17) // [!code ++]
} // [!code ++]
} // [!code ++]
```
```kotlin [rootProject]/build.gradle.kts theme={"system"}
plugins {
id("com.android.application") version "M.m.p" apply false // where M.m.p < 8.10.0 // [!code --]
id("com.android.application") version "8.10.0" apply false // [!code ++]
}
```
```properties [root-project]/gradle/wrapper/gradle-wrapper.properties icon="ini" theme={"system"}
distributionUrl=https\://services.gradle.org/distributions/gradle-M.m.p-bin.zip # where M.m.p < 8.11.1 [!code --]
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip # [!code ++]
```
```kotlin [rootProject]/build.gradle.kts theme={"system"}
plugins {
id("org.jetbrains.kotlin.android") version "1.m.p" apply false // [!code --]
id("org.jetbrains.kotlin.android") version "2.2.0" apply false // [!code ++]
}
```
```kotlin [rootProject]/build.gradle.kts theme={"system"}
plugins {
id("org.jetbrains.kotlin.plugin.compose") version "2.2.0" apply false // [!code ++]
}
```
```kotlin [rootProject]/app/build.gradle.kts theme={"system"}
plugins {
id("org.jetbrains.kotlin.plugin.compose") // [!code ++]
}
```
```kotlin [rootProject]/app/build.gradle.kts theme={"system"}
android {
composeOptions { // [!code --]
kotlinCompilerExtensionVersion = "1.m.p" // [!code --]
} // [!code --]
}
```
It is recommended to use the same version as the one configured for the **Kotlin** pluginConsult the [Compose Compiler Migration Guide](https://kotlinlang.org/docs/compose-compiler-migration-guide.html)
```kotlin [rootProject]/app/build.gradle.kts theme={"system"}
android {
compileOptions { // [!code ++]
isCoreLibraryDesugaringEnabled = true // [!code ++]
} // [!code ++]
}
dependencies {
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5") // [!code ++]
}
```
```kotlin [rootProject]/app/src/main/[java|kotlin]/com/example/MyApp.kt theme={"system"}
import ai.flowx.android.sdk.main.FlowxOwner
class MyApp : Application(), FlowxOwner { // [!code ++]
override val flowx: Lazy = lazy { Flowx.getInstance() } // [!code ++]
}
```
As a result of this change, all calls to `FlowxSdkApi.getInstance()` must be replaced with `Flowx.getInstance()`.
```kotlin theme={"system"}
import ai.flowx.android.sdk.FlowxSdkApi // [!code --]
import ai.flowx.android.sdk.main.Flowx // [!code ++]
FlowxSdkApi.getInstance() // [!code --]
Flowx.getInstance() // [!code ++]
```
```kotlin theme={"system"}
import ai.flowx.android.sdk.process.model.SdkConfig // [!code --]
import ai.flowx.android.sdk.api.Config // [!code ++]
Flowx.getInstance().init(
context = applicationContext,
config = SdkConfig(...), // [!code --]
config = object : Config { ... }, // [!code ++]
)
```
The `config` parameter is no longer a `data class`. It is now an `interface`.
```kotlin theme={"system"}
data class SdkConfig(...) // [!code --]
interface Config { ... } // [!code ++]
```
When passing custom validators as a configuration parameter, the linter might show errors related to inferring the type of the `validators` property. To fix, use `Map Boolean>?` as a type.
```kotlin focus={5,9} theme={"system"}
FlowxSdkApi.getInstance().init( // [!code --]
Flowx.getInstance().init( // [!code ++]
context = applicationContext,
config = SdkConfig( // [!code --]
enableLog = true, // [!code --]
), // [!code --]
config = object : Config {
//...
override val logEnabled: Boolean get() = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE // [!code ++]
}, // [!code ++]
)
```
```kotlin focus={1,4,5} theme={"system"}
Flowx.getInstance().init(
context = applicationContext,
config = object : Config { ... },
accessTokenProvider = null, // null by default; can be set later, depending on the existing authentication logic // [!code --]
)
```
Authentication will now be managed by calling the `Flowx.getInstance().setAccessToken(accessToken: String?)` method with the appropriate argument
Refer to the following steps for detailed information about the authentication process migration
```kotlin theme={"system"}
import ai.flowx.android.sdk.ui.components.custom.CustomComponentsProvider // [!code --]
import ai.flowx.android.sdk.api.custom.components.CustomComponentsProvider // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderProvider // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeaderProvider // [!code ++]
```
```kotlin theme={"system"}
// if used explicitly
import ai.flowx.android.sdk.analytics.AnalyticsCollector // [!code --]
import ai.flowx.android.sdk.api.analytics.AnalyticsCollector // [!code ++]
import ai.flowx.android.sdk.analytics.Event // [!code --]
import ai.flowx.android.sdk.api.analytics.Event // [!code ++]
```
```kotlin theme={"system"}
import ai.flowx.android.sdk.NewProcessStartedHandler // [!code --]
import ai.flowx.android.sdk.api.NewProcessStartedHandler // [!code ++]
```
**Summary of changes:**
```kotlin diff v4.0.25..v9.0.0 focus={2,5,9,13,17,20,24,27,41-52,63} theme={"system"}
import ai.flowx.android.sdk.FlowxSdkApi // [!code --]
import ai.flowx.android.sdk.main.FlowxSdk // [!code ++]
import ai.flowx.android.sdk.process.model.SdkConfig // [!code --]
import ai.flowx.android.sdk.api.Config // [!code ++]
// if used explicitly
import ai.flowx.android.sdk.ui.components.custom.CustomComponentsProvider // [!code --]
import ai.flowx.android.sdk.api.custom.components.CustomComponentsProvider // [!code ++]
// if used explicitly
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderProvider // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeaderProvider // [!code ++]
// if used explicitly
import ai.flowx.android.sdk.analytics.AnalyticsCollector // [!code --]
import ai.flowx.android.sdk.api.analytics.AnalyticsCollector // [!code ++]
import ai.flowx.android.sdk.analytics.Event // [!code --]
import ai.flowx.android.sdk.api.analytics.Event // [!code ++]
// if used explicitly
import ai.flowx.android.sdk.NewProcessStartedHandler // [!code --]
import ai.flowx.android.sdk.api.NewProcessStartedHandler // [!code ++]
FlowxSdkApi.getInstance().init( // [!code --]
Flowx.getInstance().init( // [!code ++]
context = applicationContext,
config = SdkConfig( // [!code --]
baseUrl = "flowx base url", // [!code --]
enginePath = "flowx engine path", // [!code --]
imageBaseUrl = "flowx image base url", // [!code --]
language = "en", // [!code --]
locale = Locale.getDefault(), // [!code --]
validators = mapOf("cnp" to { it.length == 13 }), // a simplified example for custom validator, named "cnp", which checks only the length of the given data // [!code --]
customHeaders = mapOf("Custom-Header" to "custom header value"), // [!code --]
updateStateEnabled = true, // [!code --]
cacheDocuments = true, // [!code --]
enableLog = true, // [!code --]
), // [!code --]
config = object : Config { // [!code ++]
override val baseUrl: String = "flowx base url" // [!code ++]
override val enginePath: String = "flowx engine path" // [!code ++]
override val imageBaseUrl: String = "flowx image base url" // [!code ++]
override val language: String = "en" // defaults to "en" // [!code ++]
override val locale: Locale = Locale.getDefault() // defaults to Locale.getDefault() // [!code ++]
override val validators: Map Boolean>? = mapOf("cnp" to { it.length == 13 }) // a simplified example for custom validator, named "cnp", which checks only the length of the given data // defaults to null // [!code ++]
override val customHeaders: Map? = mapOf("Custom-Header" to "custom header value") // defaults to null // [!code ++]
override val updateStateEnabled: Boolean = true // defaults to true // [!code ++]
override val cacheDocuments: Boolean = true // defaults to true // [!code ++]
override val logEnabled: Boolean get() = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE // or whatever value fits your use case // [!code ++]
}, // [!code ++]
accessTokenProvider = null, // null by default; can be set later, depending on the existing authentication logic // [!code --]
customComponentsProvider = object : CustomComponentsProvider {...},
customStepperHeaderProvider = object : CustomStepperHeaderProvider { ... },
analyticsCollector = { event ->
when (event) {
is Event.Screen -> Log.i("Analytics", "Event.Screen(value = ${event.data.value})")
is Event.Action -> Log.i("Analytics", "Event.Action(value = ${event.data.value}, screen = ${event.data.screen}, component = ${event.data.component}, label = ${event.data.label})")
}
},
onNewProcessStarted = object : NewProcessStartedHandler.Delegate { ... }
)
```
The `setAccessTokenProvider` method on the SDK instance has been replaced with `setAccessToken`.
```kotlin theme={"system"}
import ai.flowx.android.sdk.FlowxSdkApi.Companion.AccessTokenProvider // [!code --]
fun setAccessTokenProvider(accessTokenProvider: AccessTokenProvider) // [!code --]
fun setAccessToken(accessToken: String?) // null or empty argument clears the token // [!code ++]
```
Consequently, all calls to `setAccessTokenProvider` must be replaced with calls to `setAccessToken`:
```kotlin theme={"system"}
FlowxSdkApi.getInstance().setAccessTokenProvider(accessTokenProvider = { "accessTokenValue" }) // [!code --]
Flowx.getInstance().setAccessToken("accessTokenValue") // [!code ++]
```
To be able to query for substitution tags or media library items in order to display them in the `CloseModalProcessConfirmAlert`, the `closeModalFunc` lambda passed as a parameter when starting (i.e. `Flowx.getInstance.startProcess(...)`) or continuing (i.e. `Flowx.getInstance.continueProcess(...)`) is now scoped to the `CloseModalProcessScope` interface, which allows that.
```kotlin theme={"system"}
interface CloseModalProcessScope {
public fun replaceSubstitutionTag(string: String): String
public fun getMediaResourceUrl(key: String): String?
}
```
This restricts the usage of previously unrestricted exposed functions to only within the context of the `CloseModalProcessScope` receiver (i.e. they can now be called only from inside a @Composable running in this scope).
Methods within the `CloseModalProcessScope` are now called through the actual scope itself, rather than relying on `Flowx.getInstance()`, since they are no longer visible on the SDK instance.
```kotlin theme={"system"}
import ai.flowx.android.sdk.api.CloseModalProcessScope
@Composable
private fun ProcessContent(
uiState: ProcessViewModel.UiState,
onProcessEnded: (() -> Unit)? = null,
onCloseProcessModalFunc: ((processName: String) -> Unit)? = null, // [!code --]
onCloseProcessModalFunc: (CloseModalProcessScope.(processName: String) -> Unit)? = null, // [!code ++]
) {
when {
!uiState.projectId.isNullOrBlank() && !uiState.processName.isNullOrBlank() -> {
Flowx.getInstance().startProcess(
projectId = uiState.projectId,
processName = uiState.processName,
isModal = true,
onProcessEnded = { onProcessEnded?.invoke() },
closeModalFunc = { processName -> onCloseProcessModalFunc?.invoke(processName) }, // [!code --]
closeModalFunc = { processName -> onCloseProcessModalFunc?.invoke(this, processName) }, // [!code ++]
).invoke()
}
!uiState.processUuid.isNullOrBlank() -> {
Flowx.getInstance().continueProcess(
processUuid = uiState.processUuid,
isModal = true,
onProcessEnded = { onProcessEnded?.invoke() },
closeModalFunc = { processName -> onCloseProcessModalFunc?.invoke(processName) }, // [!code --]
closeModalFunc = { processName -> onCloseProcessModalFunc?.invoke(this, processName) }, // [!code ++]
).invoke()
}
}
}
```
When using it, an approach could be this:
```kotlin ProcessActivity.kt theme={"system"}
setContent {
var closeModalProcessScope by remember { mutableStateOf(null) }
val showCloseModalProcessAlert = remember { mutableStateOf(false) }
ProcessContent(
...
onCloseProcessModalFunc = { processName ->
closeModalProcessScope = this
showCloseModalProcessAlert.value = true
},
)
closeModalProcessScope?.CloseModalProcessConfirmAlert(show = showCloseModalProcessAlert)
}
@Composable
private fun CloseModalProcessScope.CloseModalProcessConfirmAlert(show: MutableState) {
if (show.value) {
AlertDialog(
...
text = { Text(replaceSubstitutionTag("@@close_message")) } // `replaceSubstitutionTag` is now accessible through the `CloseModalProcessScope` scope
)
}
}
```
Update the related imports:
```kotlin theme={"system"}
import ai.flowx.android.sdk.ui.components.custom.CustomComponentsProvider // [!code --]
import ai.flowx.android.sdk.api.custom.components.CustomComponentsProvider // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.CustomComposable // [!code --]
import ai.flowx.android.sdk.api.custom.components.CustomComponent // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.CustomComposableComponent // [!code --]
import ai.flowx.android.sdk.ui.components.custom.CustomView // [!code --]
import ai.flowx.android.sdk.ui.components.custom.CustomViewComponent // [!code --]
import ai.flowx.android.sdk.ui.components.custom.CustomComponentAction // [!code --]
import ai.flowx.android.sdk.api.custom.components.CustomComponentAction // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.FxEnumerationItem // [!code --]
import ai.flowx.android.sdk.api.custom.components.FxEnumeration // [!code ++]
import ai.flowx.android.sdk.api.custom.components.CustomComponentScope // [!code ++]
```
The new class hierarchy structure is as follows:
```kotlin v4.0.25 theme={"system"}
interface CustomComponentsProvider {
fun provideCustomComposableComponent(): CustomComposableComponent?
@Deprecated(...) fun provideCustomViewComponent(): CustomViewComponent? = null
}
interface CustomComposableComponent {
fun provideCustomComposable(componentIdentifier: String): CustomComposable?
}
interface CustomComposable {
@Deprecated(...) val isDefined: Boolean
val composable: @Composable () -> Unit
fun populateUi(data: Any?)
fun populateUi(actions: Map)
fun validate(): Boolean = true
fun saveData(): JSONObject? = null
}
@Deprecated(...)
interface CustomViewComponent {
@Deprecated(...) fun provideCustomView(componentIdentifier: String): CustomView
}
@Deprecated(...)
interface CustomView {...}
```
```kotlin v9.0.0 theme={"system"}
interface CustomComponentsProvider {
fun provideCustomComponent(componentIdentifier: String): CustomComponent?
}
interface CustomComponent {
val composable: @Composable CustomComponentScope.() -> Unit
fun populateUi(data: Any?)
fun populateUi(actions: Map)
fun validate(): Boolean = true
fun saveData(): JSONObject? = null
}
```
The structural changes include:
* The `CustomComposable` class has been renamed to `CustomComponent`.
* All deprecated properties, methods, and interfaces have been removed. Support for the Android classical View system has been completely discontinued.
* The `provideCustomComposableComponent()` method within `CustomComponentsProvider` has been replaced with `fun provideCustomComponent(): CustomComponent?`.
* The `CustomComposableComponent` class has been removed.
* The provided @Composable function passed to the `composable` property of the `CustomComponent` interface can now only exist and be called within the context of a `CustomComponentScope` receiver.
```kotlin theme={"system"}
interface CustomComponent {
val composable: @Composable () -> Unit // [!code --]
val composable: @Composable CustomComponentScope.() -> Unit // [!code ++]
}
```
```kotlin theme={"system"}
interface CustomComponentScope {
fun executeAction(action: CustomComponentAction, params: JSONObject? = null)
fun replaceSubstitutionTag(string: String): String
fun getMediaResourceUrl(key: String): String?
suspend fun getEnumeration(name: String, parentName: String? = null): FxEnumeration?
}
```
This restricts the usage of previously unrestricted exposed functions to only within the context of the `CustomComponentScope` receiver (i.e., they can now be called only from within a custom component implementation).
Methods within the `CustomComponentScope` are now called through the actual scope itself, rather than relying on `Flowx.getInstance()`, since they are no longer visible on the SDK instance.
```kotlin theme={"system"}
Flowx.getInstance().executeAction(...) // [!code --]
flowxScope.executeAction(...) // [!code ++]
Flowx.getInstance().replaceSubstitutionTag(...) // [!code --]
flowxScope.replaceSubstitutionTag(...) // [!code ++]
Flowx.getInstance().getMediaResourceUrl(...) // [!code --]
flowxScope.getMediaResourceUrl(...) // [!code ++]
Flowx.getInstance().getEnumeration(...) // [!code --]
flowxScope.getEnumeration(...) // [!code ++]
```
Consequently, the following changes should be made to access the scope within the custom component ViewModel:
```kotlin MyCustomComponentViewModel.kt theme={"system"}
class MyCustomComponentViewModel() : ViewModel() {
private lateinit var flowxScope: CustomComponentScope
fun setFlowxScope(scope: CustomComponentScope) {
flowxScope = scope
}
fun executeSomeRealAction() {
actions["someRealAction"]?.let {
if (this@MyCustomComponentViewModel::flowxScope.isInitialized) {
flowxScope.executeAction(
action = it,
params = JSONObject() // e.g. JSONObject("{\"someParameter\": \"someValue\"}")
)
}
}
}
}
```
```kotlin MyCustomComponent.kt theme={"system"}
@Composable
private fun CustomComponentScope.MyCustomComponent(
viewModel: MyCustomComponentViewModel
) {
viewModel.setFlowxScope(this@MyCustomComponent)
// here goes the rest of the UI implementation
}
```
* The `CustomComponentAction` is no longer a `data class` as before. It is now an `interface`.
The exposed data has been reduced to the maximum required for executing the action:
```kotlin v4.0.25 theme={"system"}
data class CustomComponentAction(
internal val actionName: String?,
internal val type: ActionType?,
internal var tokenUuid: String?,
internal var uiActionFlowxUuid: String,
internal val context: String,
internal val params: Params?,
internal val keys: List?,
internal val customBody: JsonElement?,
internal val collectionItemData: JsonObject?,
internal val componentTemplateConfigId: Int,
)
```
```kotlin v9.0.0 theme={"system"}
interface CustomComponentAction {
val name: String
val uiTemplateId: Int
val uiTemplateContext: String
val uiTemplateReusableContext: String?
}
```
* When querying for an enumeration by calling the `CustomComponentScope.getEnumeration(...)` method, the returned type has changed from `List` to `FxEnumeration`
```kotlin v4.0.25 theme={"system"}
data class FxEnumerationItem(
val type: String? = null,
val order: Int? = null,
val childContentDescription: ChildContentDescription? = null,
val code: String? = null,
val content: String? = null
) {
data class ChildContentDescription(
val name: String? = null
)
}
```
```kotlin v9.0.0 theme={"system"}
interface FxEnumeration {
val name: String
val items: List
val parentName: String?
interface Item {
val code: String
val content: String?
val childNomenclatorName: String?
val order: Int
}
}
```
These changes are reflected in an actual implementation as shown below:
```kotlin v4.0.25 expandable theme={"system"}
import ai.flowx.android.sdk.FlowxSdkApi
import ai.flowx.android.sdk.ui.components.custom.CustomComponentAction
import ai.flowx.android.sdk.ui.components.custom.CustomComponentsProvider
import ai.flowx.android.sdk.ui.components.custom.CustomComposable
import ai.flowx.android.sdk.ui.components.custom.CustomComposableComponent
import ai.flowx.android.sdk.ui.components.custom.CustomView
import ai.flowx.android.sdk.ui.components.custom.CustomViewComponent
import ai.flowx.external.android.template.app.R
import android.content.Context
import android.util.AttributeSet
import android.view.View
import android.widget.Button
import android.widget.LinearLayout
import android.widget.TextView
import android.widget.Toast
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LifecycleRegistry
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelStore
import androidx.lifecycle.ViewModelStoreOwner
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.compose.viewModel
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.launch
import org.json.JSONObject
class CustomComponentsProviderImpl : CustomComponentsProvider {
override fun provideCustomComposableComponent(): CustomComposableComponent? {
return object : CustomComposableComponent {
override fun provideCustomComposable(componentIdentifier: String): CustomComposable =
object : CustomComposable {
val data: MutableStateFlow = MutableStateFlow(null)
var actions: Map = emptyMap()
override val isDefined: Boolean
get() = when (componentIdentifier) {
"myCustomComponent" -> true // NOTE: set this to false to use the legacy view system instead of compose, which is mainstream now
else -> false
}
override val composable: @Composable () -> Unit = when (componentIdentifier) {
"myCustomComponent" -> { {
val viewModel = remember { MyCustomComponentViewModel(data, actions) }
MyCustomComponent(viewModel = viewModel)
} }
else -> { {} }
}
override fun populateUi(data: Any?) {
this.data.value = data
}
override fun populateUi(actions: Map) {
this.actions = actions
}
// Optional override, defaults to `true`.
override fun validate(): Boolean = true
// Optional override, defaults to `null`.
override fun saveData(): JSONObject? = null
}
}
}
override fun provideCustomViewComponent(): CustomViewComponent? {
return object : CustomViewComponent {
override fun provideCustomView(componentIdentifier: String) = object : CustomView {
val data: MutableStateFlow = MutableStateFlow(null)
var actions: Map = emptyMap()
override val isDefined: Boolean
get() = when (componentIdentifier) {
"myCustomComponent" -> true // NOTE: set the compose equivalent component to false to use the legacy view system instead of compose (which is mainstream now)
else -> false
}
override fun getView(context: Context): View = when (componentIdentifier) {
"myCustomComponent" -> myCustomComponent(context, data, actions)
else -> View(context)
}
override fun populateUi(data: Any?) {
this.data.value = data
}
override fun populateUi(actions: Map) {
this.actions = actions
}
}
}
}
}
@Composable
private fun MyCustomComponent(
viewModel: MyCustomComponentViewModel = viewModel()
) {
val firstName by viewModel.firstName.collectAsState()
val lastName by viewModel.lastName.collectAsState()
val dateOfBirth by viewModel.dateOfBirth.collectAsState()
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
) {
Text(
text = "Compose Custom Component",
style = MaterialTheme.typography.titleLarge,
)
Spacer(modifier = Modifier.height(16.dp))
Column(
modifier = Modifier
.background(color = Color(0x80FFFF00))
.padding(16.dp)
.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(4.dp)
) {
Text(
text = "Client: $firstName $lastName",
style = MaterialTheme.typography.titleMedium,
)
Text(
text = "Date of Birth: $dateOfBirth",
style = MaterialTheme.typography.titleMedium,
)
}
val context = LocalContext.current
TextButton(
onClick = {
// enable and adjust values to test the action (which was prior defined in the process)
// viewModel.executeSomeRealAction()
Toast.makeText(context, "Define action in the process and enable its execution in the code", Toast.LENGTH_LONG).show()
}
) {
Text(text = "Confirm")
}
}
}
private fun myCustomComponent(
context: Context,
data: MutableStateFlow = MutableStateFlow(null),
actions: Map = emptyMap(),
): View {
return CustomComponentView(context = context, data = data, actions = actions)
}
class CustomComponentView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0,
data: MutableStateFlow = MutableStateFlow(null),
actions: Map = emptyMap(),
) : LinearLayout(context, attrs, defStyleAttr), ViewModelStoreOwner, LifecycleOwner {
private val registry = LifecycleRegistry(this)
private var job: Job? = null
private lateinit var client: TextView
private lateinit var dateOfBirth: TextView
private val viewModel: MyCustomComponentViewModel by lazy {
ViewModelProvider(
store = viewModelStore,
factory = object : ViewModelProvider.Factory {
override fun create(modelClass: Class): T {
@Suppress("UNCHECKED_CAST")
return MyCustomComponentViewModel(data, actions) as T
}
}
)[MyCustomComponentViewModel::class.java]
}
init {
initView()
}
private fun initView() {
View.inflate(context, R.layout.my_custom_component, this)
client = findViewById(R.id.tvClient)
dateOfBirth = findViewById(R.id.tvDateOfBirth)
findViewById
Update the related imports:
```kotlin theme={"system"}
import ai.flowx.android.sdk.ui.components.custom.CustomComposableStepperHeader // [!code --]
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderData // [!code --]
import ai.flowx.android.sdk.ui.components.custom.ComposableStepperHeader // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeader // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderProvider // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeaderProvider // [!code ++]
```
The new class hierarchy structure is as follows:
```kotlin v4.0.25 theme={"system"}
interface CustomStepperHeaderProvider {
fun provideCustomComposableStepperHeader(): CustomComposableStepperHeader?
}
interface CustomComposableStepperHeader {
fun provideComposableStepperHeader(): ComposableStepperHeader
}
interface ComposableStepperHeader {
val composable: @Composable (data: CustomStepperHeaderData) -> Unit
}
interface CustomStepperHeaderData { ... }
```
```kotlin v9.0.0 theme={"system"}
interface CustomStepperHeaderProvider {
fun provideCustomStepperHeader(): CustomStepperHeader?
}
interface CustomStepperHeader {
val composable: @Composable (data: Data) -> Unit
interface Data { ... }
}
```
The structural changes include:
* The `ComposableStepperHeader` class has been renamed to `CustomStepperHeader`.
* The `CustomStepperHeaderData` class has been moved under the `CustomStepperHeader` and renamed to `Data`.
* The `provideCustomComposableStepperHeader()` method within `CustomStepperProvider` has been replaced with `fun provideCustomStepperHeader(): CustomStepperHeader?`.
* The `CustomComposableStepperHeader` class has been removed.
These changes are reflected in an actual implementation as shown below:
```kotlin diff v4.0.25..v9.0.0 focus={2,5,10,14,16,18,22,23,26} theme={"system"}
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderProvider // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeaderProvider // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.ComposableStepperHeader // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeader // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.CustomComposableStepperHeader // [!code --]
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderData
class CustomStepperHeaderProviderImpl : CustomStepperHeaderProvider {
override fun provideCustomComposableStepperHeader(): CustomComposableStepperHeader? { // [!code --]
return object : CustomComposableStepperHeader { // [!code --]
override fun provideComposableStepperHeader(): ComposableStepperHeader { // [!code --]
override fun provideCustomStepperHeader(): CustomStepperHeader? { // [!code ++]
return object : ComposableStepperHeader { // [!code --]
return object : CustomStepperHeader { // [!code ++]
override val composable: @Composable (data: CustomStepperHeaderData) -> Unit // [!code --]
override val composable: @Composable ((CustomStepperHeader.Data) -> Unit) // [!code ++]
get() = @Composable { data ->
// custom header implementation
}
}
}
} // [!code --]
} // [!code --]
}
```
For runtime environment changes, use the `changeEnvironment` method available on the SDK instance.
```kotlin theme={"system"}
fun updateConfig(config: SdkConfig) // [!code --]
fun changeEnvironment(baseUrl: String, imageBaseUrl: String, enginePath: String) // [!code ++]
```
Do not change the environment while displaying a running processWhen changing the environment, ensure the access token is updated properly
```kotlin diff v4.0.25..v9.0.0 theme={"system"}
fun startProcess(
workspaceId: String, // [!code ++]
projectId: String,
processName: String,
params: JSONObject? = null,
isModal: Boolean = false,
onProcessEnded: (() -> Unit)? = null,
closeModalFunc: (CloseModalProcessScope.(processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
The `workspaceId` is the identifier of the workspace that contains the project and process to be started
```kotlin diff v4.0.25..v9.0.0 theme={"system"}
fun setupTheme(
workspaceUuid: String, // [!code ++]
themeUuid: String,
fallbackThemeJsonFileAssetsPath: String? = null,
appearance: Flowx.ThemeAppearance = Flowx.ThemeAppearance.LIGHT, // or DARK
@MainThread onCompletion: () -> Unit,
)
```
The `workspaceId` is the identifier of the workspace that contains the theme to be loaded
## iOS SDK migration guide
### SDK API changes
#### Start process
The start process API require a `workspaceId`.
```swift theme={"system"}
public func startProcess(navigationController: UINavigationController,
workspaceId: String,
projectId: String,
name: String,
params: [String: Any]?,
isModal: Bool = false,
showLoader: Bool = false,
onProcessEnded: (() -> Void)? = nil)
```
```swift theme={"system"}
public func startProcess(tabBarController: UITabBarController,
workspaceId: String,
projectId: String,
name: String,
params: [String: Any]?,
isModal: Bool = false,
showLoader: Bool = false,
onProcessEnded: (() -> Void)? = nil)
```
#### Setup theme
The setup theme API requires a `workspaceId`.
```swift theme={"system"}
public func setupTheme(withUuid uuid: String,
workspaceId: String,
localFileUrl: URL? = nil,
appearance: SwiftUI.ColorScheme? = .light,
completion: (() -> Void)?)
```
# FlowX.AI 5.0.0 Release Notes
Source: https://docs.flowx.ai/release-notes/v5.x/v5.0.0-july-2025/v5.0.0-july-2025
Latest features, improvements, and bug fixes in our newest release
This release includes the following features in Tech Preview. We encourage you to try them out and share your feedback to help us improve them. Please note that Tech Preview features may change before final release.
**What's new? 🆕**
🆕 [**Workspaces (Multi-Tenant Architecture)**](#workspaces-multi-tenant-architecture)\
🆕 [**Project Data Model (PDM)**](#project-data-model-pdm)\
🆕 [**FlowX.AI Database**](#flowxai-database)\
🆕 [**Multi Select UI Component**](#multi-select-ui-component)\
🆕 [**Library-to-Library Dependencies**](#library-to-library-dependencies)\
🆕 [**Data Mappers**](#data-mappers)\
🆕 [**Reusable Resources**](#reusable-resources)\
🆕 **Files in Integration Designer**\
🆕 [**Rendering improvements**](#rendering-improvements)
### **Workspaces (Multi-Tenant Architecture)**

FlowX.AI 5.0 introduces Workspaces, enabling organizations to manage multiple business lines, verticals, or countries within a single FlowX.AI instance while maintaining complete data isolation.
Logical separation of business contexts with shared infrastructure
Role-based access control (RBAC) and Access Control Lists (ACLs) with workspace-specific permissions
Complete logical isolation between workspaces while enabling controlled resource sharing
Simplified permission management through groups and workspace-specific roles
Onboard new business verticals in days instead of weeks with shared platform capabilities
Implement fine-grained access control with workspace-specific roles and permissions
Centralize platform upgrades, maintenance, and monitoring across all business units
Separate workspaces for different countries/regions with shared global processes
Independent workspaces for retail, corporate, and investment banking divisions
Isolate processes subject to different regulatory requirements
Enable different teams to work independently while sharing common resources
**Major Infrastructure Changes**: Workspaces introduces SpiceDB integration and new database schemas for multi-tenant architecture.
**Key Changes:**
* **SpiceDB Integration**: New permission management system requiring deployment
* **Database Migration**: Schema updates for workspace support
* **User Storage**: Only information about FlowX.AI Designer users is stored in FlowX.AI. The stored user data is limited to: unique identifier, username, first name, last name, and email address.
* **Default Workspace**: All the projects and libraries are migrated to default workspace
**Backward Compatibility**: All existing functionality preserved in default workspace
**New Login Flow**: After authentication, select your workspace before accessing FlowX.AI Designer. Once inside a workspace, everything works as before.
**What's New:**
* **Workspace Selection**: Choose workspace after login
* **Resource Isolation**: Projects, libraries, themes are workspace-specific
* **Enhanced Permissions**: Fine-grained access control with user groups and ACLs
* **Workspace Management**: Create and manage workspaces (admin users)
**What Stays the Same:**
* Process design and configuration
* UI Designer capabilities
* Integration patterns
* All existing FlowX.AI Designer features
**Strategic Transformation**: Workspaces enables enterprise multi-tenant architecture with independent business unit governance while sharing platform capabilities.
**Business Impact:**
* **Faster time-to-market** for new business verticals
* **Enhanced compliance** with workspace-specific controls
* **Improved governance** with fine-grained access management
**Enterprise Benefits:**
* Business unit autonomy with shared platform
* Regulatory compliance through data isolation
* Centralized upgrades and maintenance
* Cross-business unit resource sharing when appropriate
### **Project Data Model (PDM)**

The new Project Data Model feature enables you to define and manage data types at the project level, which can then be reused across all processes within your project.
Define data types once at the project level and reuse them across multiple processes
Changes to PDM data types automatically propagate to all referencing processes
Configure sensitive data and reporting settings at the project level
Use data types from libraries in your Project Data Model
Define common data types like Customer, Product, or Document once instead of recreating them in each process
Update a data type in one place and have changes apply everywhere it's used
Enforce consistent naming, structure, and governance across your application
Create new processes faster by leveraging pre-defined data types

**Infrastructure Impact**: PDM has minimal infrastructure impact - it's a design-time feature that improves development efficiency without affecting runtime resources.
**No deployment changes required** - PDM is part of the design platform, not runtime**Backward compatible** - Existing processes continue to work unchanged
**Game Changer**: Define data types once at project level, use everywhere. No more recreating Customer or Order objects in every process.
**How to Use PDM:**
1. Navigate to Project → Config → Data Model
2. Define your business entities (Customer, Product, etc.)
3. Set governance rules (sensitive data, reporting)
4. Use these types in any process within the project
**Best Practices:**
* Start with core business entities
* Use clear, consistent naming
* Mark sensitive fields appropriately
* Leverage library data types when available
**Strategic Value**: PDM transforms how your organization manages business data definitions. Define business entities once and ensure consistency across all processes and teams.
**Business Benefits:**
* **Enhanced compliance** through centralized governance and data sensitivity controls
* **Reduced errors** from consistent data definitions
**ROI Indicators:**
* Development Efficiency: Measure reduction in process creation time
* Error Reduction: Track fewer data-related production issues
* Maintenance Cost: Monitor time spent on data structure updates
***
### **FlowX.AI Database**
FlowX.AI Database is a new persistence layer that enables you to store and retrieve data across different processes and applications, without relying on external systems.
Store data that persists beyond process instances
Find, insert, and manipulate data using familiar MongoDB operations
Seamlessly integrate with workflows through Data Source nodes
Organize your data in structured collections
Enable communication and data sharing between different process instances
Store operational data within FlowX.AI instead of building custom connectors
Build dashboards, caching solutions, and other applications that require persistent data
Keep your data within the FlowX.AI ecosystem for improved security and simplicity

FlowX.AI Database integrates directly into the existing Integration Designer as a new Data Source type alongside RESTful System, making it easy to create and manage database collections without learning new interfaces.
**Infrastructure Planning Required**: FlowX.AI Database creates additional MongoDB collections and requires infrastructure planning for storage, monitoring, and backup procedures.
New microservice: NoSQL DB Runner. Check the [setup guide](../../5.0-tech-preview/setup-guides/nosql-db-runner) for more details.
**Key Considerations:**
* **Storage Planning**: Monitor usage as processes adopt internal database (plan for 20-30% increase)
* **Performance Monitoring**: Set up alerts for FlowX.AI Database query performance
* **Backup Strategy**: Include FlowX.AI Database collections in backup procedures
* **Connection Pooling**: Additional connection pools for database operations
* **Memory**: Additional 256MB-512MB per FlowX.AI instance for database operations
**New Integration Option**: FlowX.AI Database appears as a new Data Source type in Integration Designer, right alongside RESTful System.
**When to Use FlowX.AI Database:**
* Customer data lookup across processes
* Shared configuration and reference data
* Process-to-process communication
* Caching frequently accessed data
* Temporary operational data storage
**How to Implement:**
1. Add Data Source node to your process
2. Select "FlowX.AI Database" as type
3. Configure collection and operations
4. Use familiar MongoDB syntax (find, insert, update)
**When NOT to Use**: Don't replace your core business systems. FlowX.AI Database is perfect for operational data, caching, and inter-process communication - but your CRM, ERP, and other systems of record should remain your primary data sources.
**Strategic Value**: FlowX.AI Database enables new operational patterns that were previously complex or impossible. It's not about replacing your core systems, but about enabling new ways to orchestrate business processes.
**New Business Capabilities:**
* **Cross-process workflows**: Loan application → Credit check → Approval across different process instances
* **Real-time dashboards**: Operational data for business monitoring without system integration
* **Agile experimentation**: Test new business rules without impacting core systems
* **Process orchestration**: Complex business flows spanning multiple departments
**ROI Considerations:**
* **Time to Market**: Faster implementation of new business processes
* **Agility**: Rapid prototyping and testing of business ideas
**Use FlowX.AI Database when:**
* Data is operational and process-specific (not master data)
* You need rapid implementation without IT system changes
* Process instances need to communicate with each other
* You're prototyping new business capabilities
***
### **Multi Select UI Component**

The new Multi Select component allows users to choose multiple options from a predefined list, expanding upon the existing single Select component to support multi-value scenarios.
Users can select multiple options from dropdown lists, with values stored as arrays
Show selections as chips, comma-separated lists, or custom formats
Configure maximum number of selectable options to control user input
Built-in search functionality to filter through large option lists
Allow users to select multiple skills, qualifications, or areas of expertise
Enable selection of multiple categories, tags, or classification options
Let customers choose multiple product features, services, or add-ons
Capture user preferences where multiple options can be active simultaneously

Configure Multi Select components with the same ease as other form elements. Set maximum selections, display formats, search options, and validation rules through the familiar UI Designer interface.
* **Max. Options Selectable**: Limit the number of selections
* **Show selections**: Choose how selected items are displayed
* **Search for options**: Enable filtering within large lists
* **Has Clear**: Allow users to clear all selections at once
* **Validation rules**: Min/max selections, required validations
**No Infrastructure Impact**: Multi Select is a pure UI component with no backend requirements. It works with existing form handling and data storage mechanisms.**Zero deployment overhead** - Component is part of the UI framework upgrade**Existing data handling** - Uses standard array storage, no schema changes needed
**Easy Integration**: Multi Select works just like other form elements in UI Designer. Drag, drop, configure - no new learning curve required.
**Common Use Cases:**
1. **Skills Selection**: Job applications, team member profiles, contractor skills
2. **Product Features**: Insurance coverage options, software licensing features
3. **Categories & Tags**: Document classification, customer segmentation
**Key Configuration:**
* **Max selections**: Control input limits
* **Display format**: Chips, lists, custom
* **Search**: Filter large option sets
* **Clear all**: Easy reset functionality
* **Validation**: Min/max rules
**User Experience Impact**: Multi Select eliminates user frustration in scenarios where single selection doesn't match real-world needs. This improves data quality and user satisfaction.
**Before vs After:**
* ❌ **Before**: "I can only select one skill, but I have multiple certifications"
* ✅ **After**: "Perfect! I can select all my relevant skills at once"
**Business Process Examples:**
* **Employee Onboarding**: Select multiple skills, certifications, department access
* **Product Configuration**: Select multiple features, add-ons, support packages
* **Customer Preferences**: Select multiple communication channels, product interests
**Analytics Benefit**: Multi-select data provides richer analytics. Instead of knowing a customer chose "Primary Interest: Technology," you know they selected "AI, Cloud Computing, Cybersecurity, Mobile Development" - much more actionable for business intelligence.
***
### **Library-to-Library Dependencies**

FlowX.AI 5.0 introduces the ability for libraries to depend on other libraries, enabling hierarchical dependency structures and more sophisticated modular architectures.
Create complex dependency trees with multiple levels of library-to-library relationships
Projects automatically gain access to resources from the entire dependency hierarchy
Single-version constraint ensures consistency across the dependency tree
Built-in validation prevents circular dependencies and version conflicts
Break down complex functionality into smaller, focused libraries that can depend on each other
Enable different teams to own and maintain specific libraries while building on shared foundations
Create country-specific or domain-specific libraries that extend common base libraries
Organize libraries hierarchically, reducing complexity and improving maintainability

```
Mortgage Project
├── Enums Library (1.6.0)
├── Integrations Library (2.5.0)
│ ├── Commons Library (1.1.0)
│ └── Enums Library (1.6.0) # Transitive dependency
└── Subprocesses Library (1.3.0)
└── Enums Library (1.6.0) # Transitive dependency
```
In this example, both Integrations Library and Subprocesses Library depend on other libraries, creating a multi-level hierarchy that the Mortgage Project can leverage.
**Full Backwards Compatibility**: FlowX.AI 5.0 maintains full backwards compatibility with existing project-to-library dependencies from FlowX.AI 4.x. All existing dependencies will continue to work without modification.
**Upgrade Process:**
1. **Existing dependencies** will be automatically migrated
2. **New library dependency features** become available immediately
3. **No breaking changes** to existing functionality
4. **Enhanced validation** may catch previously undetected issues
**Post-Migration Required**: After the lib2lib migration is executed, you must clear the cache. This is necessary because a new field is added to the build mongo document.
**Cache Clearing Steps:**
1. Complete the lib2lib migration process
2. Clear the application cache to ensure the new build document fields are properly recognized
3. Verify that library-to-library dependencies are functioning correctly
**Key Changes:**
* **Build Export Changes**: Build exports now automatically include entire dependency trees (larger packages but self-contained)
* **Dependency Validation**: Build process now checks for dependency conflicts (enhanced validation may catch previously undetected issues)
* **Deployment Consistency**: Single-version constraint prevents runtime conflicts (more predictable deployments)
**Enhanced Organization**: You can now create more sophisticated library structures where specialized libraries build upon common foundations. This reduces duplication and improves consistency.
**How It Works:**
1. Navigate to Library → Config → Dependencies
2. Add other libraries as dependencies
3. FlowX.AI validates for conflicts automatically
4. Resources from all dependency levels become available
**Best Practices:**
* Plan your library hierarchy before implementation
* Keep dependencies focused and purposeful
* Avoid circular dependencies
* Use semantic versioning consistently
* Document dependency relationships clearly
**Example**: Create a "US Banking Library" that depends on "Global Banking Library" and "US Compliance Library". This way, US-specific processes get both global banking functionality and local compliance requirements automatically.
**Enterprise Architecture**: Library-to-Library Dependencies enable sophisticated organizational structures where different teams can own specific business domains while building on shared foundations.
**Enterprise Use Cases:**
**Multi-Country Operations:**
Global Insurance Company: US-specific library depends on Global Compliance library
```
US Insurance Library → Global Compliance Library → Base Insurance Library
```
**Product Line Specialization:**
Bank: Mortgage processes use specialized libraries that extend common banking operations
```
Mortgage Library → Lending Library → Core Banking Library
```
**Business Impact:**
* **Team Autonomy**: Teams work independently while leveraging shared assets
* **Faster Innovation**: New products build on proven foundation components
* **Risk Reduction**: Tested, validated components reduce implementation risk
**Change Management**: This capability requires coordination between teams. Establish clear ownership models, communication protocols, and upgrade procedures before implementing complex dependency hierarchies.
***
### **Data Mappers**
Data Mappers enable users to visually map data transfers between components with intuitive drag-and-drop functionality while maintaining full backward compatibility with existing implementations.
Drag-and-drop interface for mapping data between source and destination components
Seamlessly connect processes, subprocesses, workflows, and business rules
Define input/output parameters with predefined and flexible parameter types
Choose between new Data Mapper or existing implementation methods
Visual interface eliminates complex configuration syntax and reduces integration errors
Define parameters once and reuse across multiple components and processes
Centralized parameter management with clear data flow visibility
Optional adoption with full backward compatibility ensures smooth transition
Map data between parent processes and subprocesses (sync/async)
Connect processes with Integration Designer workflows
Pass data to and from business rule executions
Map data between workflow nodes (REST endpoints, data persistence)
**Zero Infrastructure Impact**: Data Mappers is a design-time feature that enhances the FlowX.AI Designer interface without requiring additional infrastructure or deployment changes.
**Full Backward Compatibility**: All existing data transfer mechanisms (like `append to parent process` or `output.[outputKey]`) continue to work unchanged. Teams can adopt Data Mappers at their own pace.
**Key Points:**
* **No new microservices** - Enhancement to existing designer interface
* **No runtime changes** - Data mapping occurs at design time
* **Existing configurations preserved** - Zero impact on current implementations
* **Optional adoption** - Teams choose when and where to use new functionality
**Game Changer for Integration**: No more complex syntax for data transfers. Visual drag-and-drop interface makes component integration intuitive and error-free.
**How to Use Data Mappers:**
1. **Define Parameters**: Set input/output parameters on Start/End nodes
2. **Choose Implementation**: Select "Data Mapper" or "Current" method
3. **Visual Mapping**: Drag source parameters to destination parameters
4. **Save Configuration**: Store mappings for reuse and maintenance
**When to Use:**
* **Call Activities**: Passing data between parent and child processes
* **Integration Workflows**: Connecting with external systems
* **Complex Data Flows**: When visual mapping improves clarity
* **Team Collaboration**: When multiple people work on integration logic
**Parameter Changes**: When you modify input/output parameters, existing mappings must be manually updated. Changes don't automatically propagate to avoid unintended data flow modifications.
**Strategic Value**: Data Mappers transforms technical integration tasks into visual, business-friendly workflows. Non-technical stakeholders can now understand and validate data flows between business processes.
**Business Impact:**
* **Reduced Errors**: Visual mapping prevents data integration mistakes that cause process failures
* **Faster Development**: Intuitive interface accelerates process configuration and testing
* **Better Documentation**: Visual data flows serve as living documentation of business logic
* **Team Collaboration**: Business and technical teams can discuss data flows using the same visual interface
**ROI Indicators:**
* **Development Speed**: Measure reduction in integration configuration time
* **Error Rate**: Track fewer data-related production issues
* **Team Efficiency**: Monitor cross-functional collaboration improvements
* **Process Quality**: Assess improvement in first-time-right deployments
**Use Cases by Industry:**
* **Banking**: Loan application data flowing from customer intake → credit check → approval process
* **Insurance**: Claim data mapping from initial report → investigation → settlement
* **Manufacturing**: Order data flowing from sales → production planning → fulfillment
***
### **Reusable Resources**

FlowX.AI 5.0 introduces Reusable Resources, a revolutionary new section that eliminates repetitive development work by enabling you to create and manage both UI Templates and Business Functions that can be used across multiple processes and projects.
Create JavaScript or Python functions once and use them across multiple processes via Business Rule actions
Define input/output parameters with full project data model integration and testing capabilities
Test functions with sample data in real-time before deployment to ensure accuracy
Changes to functions automatically update all instances across your application
Design UI components once and instantiate them across multiple User Tasks with automatic data binding
Manage all templates from the new Reusable Resources section alongside Reusable Functions
Templates work seamlessly across different platforms and channels
Define UI actions within templates with two scenarios: template-defined actions or form-centric data handling
Stop recreating the same business logic and UI patterns across different processes - build once, use everywhere
Update functions and templates in one place to automatically affect all instances across your application
Replace scattered, inconsistent UI patterns with centrally managed, reusable components
Build new processes faster by leveraging pre-built, tested components instead of starting from scratch
**Customer Data Validation Function:**
* **Input**: firstName, lastName, email, phone
* **Logic**: Format validation, duplicate checking, data standardization
* **Output**: validatedCustomer object with formatted data
* **Usage**: Customer onboarding, profile updates, registration processes across all channels
**Credit Risk Assessment Function:**
* **Input**: applicationData, customerProfile, financialHistory
* **Logic**: Complex credit scoring algorithms, risk categorization, recommendation engine
* **Output**: riskScore, riskCategory, approvalRecommendation, requiredDocuments
* **Usage**: Loan applications, credit cards, mortgage processes, business lending
**Document Processing Function:**
* **Input**: documentFile, documentType, customerID
* **Logic**: OCR processing, data extraction, compliance validation
* **Output**: extractedData, validationStatus, complianceFlags
* **Usage**: KYC processes, claims processing, application reviews
**Personal Details Card Template:**
* **Root Component**: Card with professional styling
* **Contains**: Name, email, phone, address input fields with validation
* **UI Actions**: Save data, clear form, auto-populate from existing data
* **Usage**: Customer registration, profile updates, employee onboarding, contractor management
**Document Upload Section Template:**
* **Root Component**: Container with drag-and-drop functionality
* **Contains**: File upload area, progress indicators, document list, preview capabilities
* **UI Actions**: Upload documents, delete files, download copies, validate formats
* **Usage**: Loan applications, compliance documentation, claims submissions, HR processes
**Financial Summary Dashboard Template:**
* **Root Component**: Card with data visualization
* **Contains**: Balance displays, transaction history, chart components, action buttons
* **UI Actions**: Refresh data, export reports, drill-down details
* **Usage**: Account overviews, investment portfolios, expense tracking, budget management
**Minimal Infrastructure Impact**: Reusable Resources is primarily a design-time enhancement that leverages existing FlowX infrastructure with minimal additional overhead.
**Infrastructure Considerations:**
* **Execution Context**: Functions execute within existing process engine contexts - no additional runtime infrastructure required
**No New Microservices**: Features are integrated into existing FlowX.AI platform components
**Development Game Changer**: Access the new "Reusable Resources" section in FlowX.AI Designer - located alongside "Reusable Functions" - to eliminate 60-80% of repetitive development work.
**Key Capabilities:**
* **Data Model Support**: Full integration with Project Data Model (PDM)
* **Action Scenarios**: Template-defined actions assigned during instantiation OR form-centric actions handled by User Task
* **Omnichannel**: Templates work across web, mobile, and other channels
**Best Practices:**
* **Start with common patterns**: Identify frequently repeated business logic and UI components
* **Test thoroughly**: Use interactive testing for functions and preview mode for templates
* **Document usage**: Include clear descriptions and example use cases
**Revolutionary Business Impact**: Reusable Resources fundamentally changes how organizations approach process development, transforming from "build every time" to "build once, leverage everywhere."
**Strategic Business Value:**
* **Quality Assurance**: Dramatic reduction in defects through reusable, tested components
* **Maintenance Efficiency**: Update business rules once to instantly affect all processes
* **Team Productivity**: Developers focus on new business capabilities instead of repetitive development
* **Consistency**: Ensure uniform business rules and user experience across all touchpoints
**Industry Use Cases:**
* **Functions**: KYC validation, credit scoring, fraud detection, regulatory compliance checks
* **UI Templates**: Customer onboarding forms, document upload sections, account summary dashboards, loan application interfaces
* **Functions**: Premium calculations, risk evaluation, claims processing, policy validation
* **UI Templates**: Quote request forms, claims submission interfaces, policy comparison tables, agent dashboards
* **Functions**: Patient eligibility checks, treatment authorization, billing calculations, compliance validation
* **UI Templates**: Patient registration forms, appointment scheduling interfaces, medical history cards, provider dashboards
### **Rendering Improvements**
Improved performance, responsiveness, and customization options for data display and form organization
Streamlined navigation experience in both UI Designer and Process Designer with improved interface organization
Batch operations support for UI components, enabling simultaneous actions on multiple elements
Granular control over UI element editing based on user permissions with partial editing capabilities
Specialized input component for code entry
Advanced formatting capabilities for Input and Slider components
Enhanced switch component supporting both toggle and checkbox variants
Configure specific options as disabled while keeping them visible in dropdown lists
Configurable loading indicators for improved user experience during data operations
Advanced validation logic using dynamic computed expressions
New specialized button variant designed for file upload operations
Efficiently replicate styling across multiple UI components
Custom payload support for detailed user interaction tracking and business intelligence
Improved user experience when processes complete or terminate
Enhanced support for form elements within collection components
Streamlined template organization by consolidating functionality in Reusable Resources
## **Additional information**
Instructions for deploying FlowX.AI 5.0.0
Step-by-step guide for migrating from v4.7.x to v5.0.0
# Android SDK
Source: https://docs.flowx.ai/5.1/sdks/android-renderer
## Android project requirements
System requirements:
* **minSdk = 26** (Android 8.0)
* **compileSdk = 35**
The SDK library was build using:
* **[Android Gradle Plugin](https://developer.android.com/build/releases/gradle-plugin) 8.11.0**
* **[Gradle](https://gradle.org/releases/) 8.14.2**
* **[Kotlin](https://kotlinlang.org/) 2.2.0**
## Installing the library
1. Add the maven repository in your project's `settings.gradle.kts` file:
```kotlin theme={"system"}
dependencyResolutionManagement {
...
repositories {
...
maven {
url = uri("https://nexus-jx.dev.rd.flowx.ai/repository/flowx-maven-releases/")
credentials {
username = "your_username"
password = "your_password"
}
}
}
}
```
2. Add the library as a dependency in your `app/build.gradle.kts` file:
```kotlin theme={"system"}
dependencies {
...
implementation("ai.flowx.android:sdk:9.0.2")
...
}
```
### Library dependencies
Impactful dependencies:
* **[Android Core KTX](https://developer.android.com/kotlin/ktx#core) 1.16.0**
* **[Android Activity Compose](https://developer.android.com/jetpack/androidx/releases/activity) 1.10.1**
* **[Compose BOM](https://developer.android.com/jetpack/compose/bom/bom-mapping) 2025.09.01**
* **[Accompanist Permissions](https://google.github.io/accompanist/permissions/) 0.37.3**
* **[Kotlin Coroutines](https://kotlinlang.org/docs/coroutines-overview.html) 1.10.2**
* **[Compose Navigation](https://developer.android.com/develop/ui/compose/navigation) 2.9.1**
* **[Android Lifecycle](https://developer.android.com/jetpack/androidx/releases/lifecycle) 2.9.1**
* **[Android Core Library Desugaring](https://developer.android.com/studio/write/java8-support#library-desugaring) 2.1.5**
* **[OkHttp BOM](https://square.github.io/okhttp/) 4.12.0**
* **[Retrofit](https://square.github.io/retrofit/) 2.12.0**
* **[Moshi](https://github.com/square/moshi) 1.15.2**
* **[Coil BOM](https://coil-kt.github.io/coil/) 3.2.0**
### Public API
The SDK library is managed through the `Flowx` singleton instance, which exposes the following methods:
| Name | Description | Definition |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `init` | Initializes the FlowX SDK. Must be called in your application's `onCreate()` | `fun init(context: Context, config: Config, customComponentsProvider: CustomComponentsProvider? = null, customStepperHeaderProvider: CustomStepperHeaderProvider? = null, customLoaderProvider: CustomLoaderProvider? = null, analyticsCollector: AnalyticsCollector? = null, onNewProcessStarted: NewProcessStartedHandler.Delegate? = null)` |
| `setAccessToken` | Updates the access token | `fun setAccessToken(accessToken: String?)` |
| `setupTheme` | Sets up the theme to be used when rendering a process | `fun setupTheme(workspaceUuid: String, appearance: ThemeAppearance = ThemeAppearance.LIGHT, themeUuid: String, fallbackThemeJsonFileAssetsPath: String? = null, @MainThread onCompletion: () -> Unit)` |
| `changeLocaleSettings` | Changes the current locale settings (i.e. locale and language) | `fun changeLocaleSettings(locale: Locale, language: String)` |
| `startProcess` | Starts a FlowX process instance, by returning a `@Composable` function where the process is rendered. | `fun startProcess(workspaceId: String, projectId: String, processName: String, params: JSONObject = JSONObject(), isModal: Boolean = false, onProcessEnded: (() -> Unit)? = null, closeModalFunc: (CloseModalProcessScope.(processName: String) -> Unit)? = null): @Composable () -> Unit` |
| `continueProcess` | Continues an existing FlowX process instance, by returning a `@Composable` function where the process is rendered. | `fun continueProcess(processUuid: String, isModal: Boolean = false, onProcessEnded: (() -> Unit)? = null, closeModalFunc: (CloseModalProcessScope.(processName: String) -> Unit)? = null): @Composable () -> Unit` |
{/*| `configureUpdateState` | Enables/disables updating a running process' state on return from background | `fun configureUpdateState(enabled: Boolean)` |*/}
## Configuring the library
To configure the SDK, there are two things needed in the project's application class:
1. first, make it implement the `FlowxOwner` interface:
```kotlin theme={"system"}
class MyApplication : Application(), FlowxOwner {
override val flowx: Lazy = lazy { Flowx.getInstance() }
// ...
}
```
2. then, call the `init` method inside the `onCreate()` method:
```kotlin theme={"system"}
fun init(
context: Context,
config: Config,
customComponentsProvider: CustomComponentsProvider? = null,
customStepperHeaderProvider: CustomStepperHeaderProvider? = null,
customLoaderProvider: CustomLoaderProvider? = null,
analyticsCollector: AnalyticsCollector? = null,
onNewProcessStarted: NewProcessStartedHandler.Delegate? = null,
)
```
#### Parameters
| Name | Description | Type | Requirement |
| ----------------------------- | --------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- | ----------------------------- |
| `context` | Android application `Context` | `Context` | Mandatory |
| `config` | SDK configuration parameters | `ai.flowx.android.sdk.api.Config` | Mandatory |
| `customComponentsProvider` | Provider for the `@Composable` custom components | `ai.flowx.android.sdk.api.custom.components.CustomComponentsProvider?` | Optional. Defaults to `null`. |
| `customStepperHeaderProvider` | Provider for the `@Composable` custom stepper header view | `ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeaderProvider?` | Optional. Defaults to `null`. |
| `customLoaderProvider` | Provider for the `@Composable` custom loader view | `ai.flowx.android.sdk.api.custom.loader.CustomLoaderProvider?` | Optional. Defaults to `null`. |
| `analyticsCollector` | Collector interface for SDK analytics events | `ai.flowx.android.sdk.api.analytics.AnalyticsCollector` | Optional. Defaults to `null`. |
| `onNewProcessStarted` | Callback for when a new process was started as a consequence for executing a `START_PROJECT` action | `ai.flowx.android.sdk.api.NewProcessStartedHandler.Delegate` | Optional. Defaults to `null`. |
• The `custom components` implementation is explained in [its own section](#custom-components).
• The implementation for providing a `custom view for the header` of the [Stepper](../docs/building-blocks/process/navigation-areas#stepper) component is detailed in [its own section](#custom-header-view-for-the-stepper-component).
• The implementation for providing a `custom loader` is explained in [its own section](#custom-loaders).
• Collecting analytics events from the SDK is explained in [its own section](#collecting-analytics-events).
• Handling the start of a new process while in a running process is explained in [its own section](#handling-“start-of-a-new-process”).
#### Sample
```kotlin theme={"system"}
class MyApplication : Application(), FlowxOwner {
override val flowx: Lazy = lazy { Flowx.getInstance() }
override fun onCreate() {
super.onCreate()
initFlowXSdk()
}
private fun initFlowXSdk() {
Flowx.getInstance().init(
context = applicationContext,
config = object : Config {
override val baseUrl = "URL to FlowX backend",
override val imageBaseUrl = "URL to FlowX CMS Media Library",
override val enginePath = "some_path",
override val language = "en",
override val locale = Locale.getDefault(),
override val validators: Map Boolean>? = mapOf("exact_25_in_length" to { it.length == 25 }),
override val logEnabled: Boolean get() = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE,
},
customComponentsProvider = object : CustomComponentsProvider {...},
customStepperHeaderProvider = object : CustomStepperHeaderProvider {...},
customLoaderProvider = object : CustomLoaderProvider {...},
analyticsCollector = { event ->
// Process / Send the event to some specialized Analytics platform
},
onNewProcessStarted = { processInstanceUuid ->
// Send a broadcast message to notify the Activity currently displaying the running process.
// The Activity should handle the broadcast to reload and display the newly started process identified by `processInstanceUuid`.
}
)
}
}
```
The configuration properties that should be passed as `Config` data for the `config` parameter above are:
| Name | Description | Type | Requirement |
| -------------- | ------------------------------------------------------------------- | ----------------------------------- | ------------------------------------------- |
| `baseUrl` | URL to connect to the FlowX back-end environment | `String` | Mandatory |
| `imageBaseUrl` | URL to connect to the FlowX Media Library module of the CMS | `String` | Mandatory |
| `enginePath` | URL path segment used to identify the process engine service | `String` | Mandatory |
| `language` | The language used for retrieving enumerations and substitution tags | `String` | Optional. Defaults to `en`. |
| `locale` | The locale used for date, number and currency formatting | `java.util.Locale` | Optional. Defaults to `Locale.getDefault()` |
| `validators` | Custom validators for form elements | `Map Boolean>?` | Optional. |
| `logEnabled` | Flag indicating if logs should be printed | `Boolean` | Optional. Defaults to `false` |
#### Custom validators
The `custom validators` map is a collection of lambda functions, referenced by *name* (i.e. the value of the `key` in this map), each returning a `Boolean` based on the `String` which needs to be validated.
For a custom validator to be evaluated for a form field, its *name* must be specified in the form field process definition.
By looking at the example from above:
```kotlin theme={"system"}
mapOf("exact_25_in_length" to { it.length == 25 })
```
if a form element should be validated using this lambda function, a custom validator named `"exact_25_in_length"` should be specified in the process definition.
## Using the library
### Authentication
To be able to use the SDK, **authentication is required**. Therefore, before calling any other method on the singleton instance, make sure that the access token is set by calling:
```kotlin theme={"system"}
Flowx.getInstance().setAccessToken(accessToken = "your access token")
```
Whenever the access token changes based on your own authentication logic, it must be updated in the renderer by calling the `setAccessToken` method again.Passing `null` or empty string (`""`) as an argument to the `setAccessToken` method clears the token
### Theming
Prior setting up the theme, make sure the `access token` was set. Check the [authentication](#authentication) section for details.
To be able to use styled components while rendering a process, the theming mechanism must be invoked by calling the `suspend`-ing `setupTheme(...)` method over the singleton instance of the SDK:
```kotlin theme={"system"}
suspend fun setupTheme(
workspaceUuid: String,
themeUuid: String,
fallbackThemeJsonFileAssetsPath: String? = null,
appearance: ThemeAppearance = ThemeAppearance.LIGHT,
@MainThread onCompletion: () -> Unit
)
```
#### Parameters
| Name | Description | Type | Requirement |
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------- | -------------------------------------------------- |
| `workspaceUuid` | UUID string identifier of the workspace that contains the theme to be loaded | `String` | Mandatory. Should not be empty |
| `themeUuid` | UUID string of the theme configured in FlowX Designer | `String` | Mandatory. Can be empty |
| `fallbackThemeJsonFileAssetsPath` | Android asset relative path to the corresponding JSON file to be used as fallback, in case fetching the theme fails and there is no cached version available | `String?` | Optional. Defaults to `null` |
| `appearance` | Indicator for the appearance of the theme (LIGHT, DARK) | `Flowx.ThemeAppearance` | Options. Defaults to `Flowx.ThemeAppearance.LIGHT` |
| `onCompletion` | `@MainThread` invoked closure, called when setting up the theme completes | `() -> Unit` | Mandatory |
If the `themeUuid` parameter value is empty (`""`), no theme will be fetched, and the mechanism will rely only on the fallback file, if set.
If the `fallbackThemeJsonFileAssetsPath` parameter value is `null`, there will be no fallback mechanism set in place, meaning if fetching the theme fails, the redered process will have no style applied over it's displayed components.
The SDK caches the fetched themes, so if a theme fetch fails, a cached version will be used, if available. Otherwise, it will use the file given as fallback.
#### Sample
```kotlin theme={"system"}
viewModelScope.launch {
Flowx.getInstance().setupTheme(
workspaceUuid = "some workspace uuid string",
themeUuid = "some uuid string",
fallbackThemeJsonFileAssetsPath = "theme/a_fallback_theme.json",
appearance = Flowx.ThemeAppearance.LIGHT,
) {
// theme setup complete
// do specific logic
}
}
```
The `fallbackThemeJsonFileAssetsPath` always search for files under your project's `assets/` directory, meaning the example parameter value is translated to `file://android_asset/theme/a_fallback_theme.json` before being evaluated.
Do not [start](#start-a-flowx-process) or [resume](#resume-a-flowx-process) a process before the completion of the theme setup mechanism.
### Changing current locale settings
The current `locale` and `language` can be also changed after the [initial setup](#configuring-the-library), by calling the `changeLocaleSettings` function:
```kotlin theme={"system"}
fun changeLocaleSettings(locale: Locale, language: String)
```
#### Parameters
| Name | Description | Type | Requirement |
| ---------- | ----------------------------- | ------------------ | ----------- |
| `locale` | The new locale | `java.util.Locale` | Mandatory |
| `language` | The code for the new language | `String` | Mandatory |
**Do not change the locale or the language while a process is rendered.**
The change is successful only if made before [starting](#start-a-flowx-process) or [resuming](#resume-a-flowx-process) a process.
#### Sample
```kotlin theme={"system"}
Flowx.getInstance().changeLocaleSettings(locale = Locale("en", "US"), language = "en")
```
The `Locale` satisfies the IETF BCP 47 standard for representing language and country/region codes.
More information regarding the standard can be found by reading [RFC 4647 "Matching of Language Tags"](https://datatracker.ietf.org/doc/html/rfc4647) and [RFC 5646 "Tags for Identifying Languages"](https://datatracker.ietf.org/doc/html/rfc5646).
An example of BCP 47 is `en-US` (language code `en` and country `US`).
### Start a FlowX process
Prior starting a process, make sure the [authentication](#authentication) and [theming](#theming) were correctly set up
After performing all the above steps and all the prerequisites are fulfilled, a new instance of a FlowX process can be started, by using the `startProcess` function:
```kotlin theme={"system"}
fun startProcess(
workspaceId: String,
projectId: String,
processName: String,
params: JSONObject = JSONObject(),
isModal: Boolean = false,
onProcessEnded: (() -> Unit)? = null,
closeModalFunc: (CloseModalProcessScope.(processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
#### Parameters
| Name | Description | Type | Requirement |
| ---------------- | -------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | --------------------------------------------------- |
| `workspaceId` | The id of the workspace that contains the project and process to be started | `String` | Mandatory |
| `projectId` | The id of the project containing the process to be started | `String` | Mandatory |
| `processName` | The name of the process | `String` | Mandatory |
| `params` | The starting params for the process, if any | `JSONObject` | Optional. If omitted, if defaults to `JSONObject()` |
| `isModal` | Flag indicating whether the process can be closed at anytime by tapping the top-right close button | `Boolean` | Optional. It defaults to `false`. |
| `onProcessEnded` | Lambda function where you can do additional processing when the started process ends | `(() -> Unit)?` | Optional. It defaults to `null`. |
| `closeModalFunc` | Lambda function where you should handle closing the process when `isModal` flag is `true` | `(CloseModalProcessScope.(processName: String) -> Unit)?` | Optional. It defaults to `null`. |
The returned **[@Composable](https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable)** function must be included in its own **[Activity](https://developer.android.com/reference/android/app/Activity)**, which is part of (controlled and maintained by) the container application.
This wrapper activity must display only the `@Composable` returned from the SDK (i.e. it occupies the whole activity screen space).
#### Sample
```kotlin theme={"system"}
class ProcessActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
setContent {
Flowx.getInstance().startProcess(
workspaceId = "your workspace id",
projectId = "your project id",
processName = "your process name",
params: JSONObject = JSONObject(),
isModal = true,
onProcessEnded = {
// NOTE: possible processing could involve doing something in the container app (i.e. navigating to a different screen)
},
closeModalFunc = { processName ->
// NOTE: possible handling could involve doing something differently based on the `processName` value
},
).invoke()
}
}
...
}
```
### Resume a FlowX process
Prior resuming process, make sure the [authentication](#authentication) and [theming](#theming) were correctly set up
To resume an existing instance of a FlowX process, after fulfilling all the prerequisites, use the `continueProcess` function:
```kotlin theme={"system"}
fun continueProcess(
processUuid: String,
isModal: Boolean = false,
onProcessEnded: (() -> Unit)? = null,
closeModalFunc: (CloseModalProcessScope.(processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
#### Parameters
| Name | Description | Type | Requirement |
| ---------------- | -------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | --------------------------------- |
| `processUuid` | The UUID string of the process | `String` | Mandatory |
| `isModal` | Flag indicating whether the process can be closed at anytime by tapping the top-right close button | `Boolean` | Optional. It defaults to `false`. |
| `onProcessEnded` | Lambda function where you can do additional processing when the continued process ends | `(() -> Unit)?` | Optional. It defaults to `null`. |
| `closeModalFunc` | Lambda function where you should handle closing the process when `isModal` flag is `true` | `(CloseModalProcessScope.(processName: String) -> Unit)?` | Optional. It defaults to `null`. |
The returned **[@Composable](https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable)** function must be included in its own **[Activity](https://developer.android.com/reference/android/app/Activity)**, which is part of (controlled and maintained by) the container application.
This wrapper activity must display only the `@Composable` returned from the SDK (i.e. it occupies the whole activity screen space).
#### Sample
```kotlin theme={"system"}
class ProcessActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
setContent {
Flowx.getInstance().continueProcess(
processUuid = "some process UUID string",
isModal = true,
onProcessEnded = {
// NOTE: possible processing could involve doing something in the container app (i.e. navigating to a different screen)
},
closeModalFunc = { processName ->
// NOTE: possible handling could involve doing something differently based on the `processName` value
},
).invoke()
}
}
...
}
```
### `closeModalFunc` parameter
The `closeModalFunc` parameter is a function defined within the `CloseModalProcessScope` context.
This gives the ability to query for substitution tags or media library items in order to use them when handling this callback (i.e. showing an snackbar or an alert).
```kotlin theme={"system"}
interface CloseModalProcessScope {
fun replaceSubstitutionTag(key: String): String
fun getMediaResourceUrl(key: String): String?
}
```
#### Get a substitution tag value by key
```kotlin theme={"system"}
fun replaceSubstitutionTag(key: String): String
```
All substitution tags will be retrieved by the SDK before starting the process and will be stored in memory.
Whenever the container app needs a substitution tag value for populating the UI of the custom components, it can request the substitution tag, through the `CustomComponentScope` context, using the method above, by providing the `key`.
It returns:
* the key's counterpart, if the `key` is valid and found
* the empty string, if the `key` is valid, but not found
* the unaltered string, if the key has the wrong format (i.e. not starting with `@@`)
#### Get a media item url by key
```kotlin theme={"system"}
fun getMediaResourceUrl(key: String): String?
```
All media items will be retrieved by the SDK before starting the process and will be stored in memory.
Whenever the container app needs a media item url for populating the UI of the custom components, it can request the url, through the `CustomComponentScope` context, using the method above, by providing the `key`.
It returns the `URL` string of the media resource, or `null`, if not found.
#### Sample
```kotlin theme={"system"}
setContent {
var closeModalProcessScope by remember { mutableStateOf(null) }
val showCloseModalProcessAlert = remember { mutableStateOf(false) }
Flowx.getInstance().startProcess(
workspaceId = "your workspace id",
projectId = "your project id",
processName = "your process name",
isModal = true,
onProcessEnded = { ... },
onCloseProcessModalFunc = { processName ->
closeModalProcessScope = this
showCloseModalProcessAlert.value = true
},
).invoke()
closeModalProcessScope?.CloseModalProcessConfirmAlert(show = showCloseModalProcessAlert)
}
@Composable
fun CloseModalProcessScope.CloseModalProcessConfirmAlert(show: MutableState) {
if (show.value) {
AlertDialog(
onDismissRequest = {},
title = null,
text = {
Text(this@CloseModalProcessConfirmAlert.replaceSubstitutionTag("@@close_message")) // IMPORTANT: call `replaceSubstitutionTag` using the `CloseModalProcessScope` context
},
confirmButton = { ... },
dismissButton = {
Button(onClick = { show.value = false }) {
Text("Cancel")
}
}
)
}
}
```
## Custom components
The container application should decide which custom component view to provide using the `componentIdentifier` configured in the UI designer.
A custom component receives `data` to populate the view and `actions` available to execute, as described below.
It can also be validated and provide data back into the process when executing an action.
To handle custom components, an *implementation* of the `CustomComponentsProvider` interface should be passed as a parameter when initializing the SDK:
```kotlin theme={"system"}
interface CustomComponentsProvider {
fun provideCustomComponent(componentIdentifier: String): CustomComponent?
}
```
#### Sample
```kotlin theme={"system"}
class FxCustomComponentsProvider : CustomComponentsProvider {
override fun provideCustomComponent(componentIdentifier: String): CustomComponent? =
when (componentIdentifier) {
"myCustomComponent" -> object : CustomComponent {...}
else -> null
}
}
```
### CustomComponent
The implementation for providing a custom component is based on creating and binding a user defined [@Composable](https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable) function, through the `CustomComponent` interface:
```kotlin theme={"system"}
interface CustomComponent {
/**
* Returns the [Composable]s for every custom component identifier defined in the FlowX Designer
*/
val composable: @Composable CustomComponentScope.() -> Unit
/**
* This will be called when data is available for the custom component i.e. when the
* User Task that contains the custom component is displayed.
*
* @param data used to populate the custom component
*/
fun populateUi(data: Any?)
/**
* This will be called when actions are available for the custom component i.e. when the
* User Task that contains the custom component is displayed.
*
* @param actions that need to be attached to the custom component (e.g. onClick events)
*/
fun populateUi(actions: Map)
/**
* This will be called when executing an action, when the platform needs to know if the specified/marked components are valid.
* Defaults to `true`.
*/
fun validate(): Boolean = true
/**
* This will be called when executing an action, on computing the data to be sent as body on the network request.
* Returning `null` (i.e. default) means it does not contribute with any data to be sent.
*/
fun saveData(): JSONObject? = null
}
```
The value for the `data` parameter received in the `populateUi(data: Any?)` could be:
* `Boolean`
* `String`
* `java.lang.Number`
* `org.json.JSONObject`
* `org.json.JSONArray`
The appropriate way to check and cast the data accordingly to the needs must belong to the implementation details of the custom component.
Both validation and providing data back into process are optional, and, based on the needs, it may be included in the implementation or not.
### CustomComponentScope
The `composable` property of the [CustomComponent](#customcomponent) is a [@Composable](https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable) function which may be defined and run only within the context of a `CustomComponentScope` receiver.
```kotlin theme={"system"}
val composable: @Composable CustomComponentScope.() -> Unit
```
```kotlin theme={"system"}
interface CustomComponentScope {
fun executeAction(action: CustomComponentAction, params: JSONObject? = null)
fun replaceSubstitutionTag(key: String): String
fun getMediaResourceUrl(key: String): String?
suspend fun getEnumeration(name: String, parentName: String? = null): FxEnumeration?
}
```
This allows calling predefined SDK methods for executing actions, querying for substitution tags, media resource URLs or obtaining enumerations data, directly from the custom component through the scope itself.
#### Execute action
The custom components which the container app provides may contain FlowX actions available for execution.
These actions are received through the `actions` parameter of the `populateUi(actions: Map)` method.
In order to run an action (i.e. on a click of a button in the custom component) you need to call the `executeAction` method, through the `CustomComponentScope` context:
```kotlin theme={"system"}
fun executeAction(action: CustomComponentAction, params: JSONObject? = null)
```
##### Parameters
| Name | Description | Type | Requirement |
| -------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------ | ------------------------------- |
| `action` | Action object extracted from the `actions` received in the custom component | `ai.flowx.android.sdk.api.custom.components.CustomComponentAction` | Mandatory |
| `params` | Parameters needed to execute the `action` | `JSONObject?` | Optional. It defaults to `null` |
#### Get a substitution tag value by key
```kotlin theme={"system"}
fun replaceSubstitutionTag(key: String): String
```
All substitution tags will be retrieved by the SDK before starting the process and will be stored in memory.
Whenever the container app needs a substitution tag value for populating the UI of the custom components, it can request the substitution tag, through the `CustomComponentScope` context, using the method above, by providing the `key`.
It returns:
* the key's counterpart, if the `key` is valid and found
* the empty string, if the `key` is valid, but not found
* the unaltered string, if the key has the wrong format (i.e. not starting with `@@`)
#### Get a media item url by key
```kotlin theme={"system"}
fun getMediaResourceUrl(key: String): String?
```
All media items will be retrieved by the SDK before starting the process and will be stored in memory.
Whenever the container app needs a media item url for populating the UI of the custom components, it can request the url, through the `CustomComponentScope` context, using the method above, by providing the `key`.
It returns the `URL` string of the media resource, or `null`, if not found.
#### Obtain enumeration data
```kotlin theme={"system"}
suspend fun getEnumeration(name: String, parentName: String? = null): FxEnumeration?
```
Whenever the container app needs an enumeration data for populating the UI of the custom components, it can request the url, through the `CustomComponentScope` context, using the method above, by providing the `name` (and the `parentName`, if there's a hierarchy defined and the desired enumeration data (`name` is child of `parentName`).
It returns the enumeration data, as an `FxEnumeration` object, or `null`, if not found.
```kotlin theme={"system"}
interface FxEnumeration {
val name: String
val items: List
val parentName: String?
interface Item {
val code: String
val content: String?
val childNomenclatorName: String?
val order: Int
}
}
```
#### Sample
Among multiple existing custom components, there may be one that:
* allows the input of a value representing an `age`
* the value should be validated (e.g. to be at least 35 years old)
* the value will be passed back into the process
* execute an action, through the `CustomComponentScope` context, to skip setting the age
```kotlin expandable theme={"system"}
class FxCustomComponentsProvider : CustomComponentsProvider {
override fun provideCustomComponent(componentIdentifier: String): CustomComponent? =
when (componentIdentifier) {
when (componentIdentifier) {
"other-custom-component-identifier" -> OtherCustomComponent()
"age" -> AgeCustomComponent()
else -> null
}
}
}
private class AgeCustomComponent() : CustomComponent {
private val data: MutableStateFlow = MutableStateFlow(null)
private var actions: MutableMap = mutableMapOf()
private val viewModel = AgeViewModel(data = data, actions = actions)
override val composable: @Composable CustomComponentScope.() -> Unit
get() = @Composable {
Age(viewModel = viewModel)
}
override fun populateUi(data: Any?) {
this@AgeCustomComponent.data.update { _ -> data }
}
override fun populateUi(actions: Map) {
this@AgeCustomComponent.actions.apply {
clear()
putAll(actions)
}
}
override fun validate(): Boolean = viewModel.isValid()
override fun saveData(): JSONObject? = viewModel.buildDataToSave()
}
@Composable
private fun CustomComponentScope.Age(viewModel: AgeViewModel) {
viewModel.setFlowxScope(this@Age) // IMPORTANT: keep a reference to the custom context/scope in order to access the available predefined SDK methods
val age by viewModel.ageFlow.collectAsState()
val error by viewModel.errorFlow.collectAsState()
val isError by remember(error) { mutableStateOf(error.isNotBlank()) }
Column {
OutlinedTextField(
value = age,
onValueChange = { viewModel.updateAge(it) },
modifier = Modifier.fillMaxWidth(),
label = { Text("Age") },
)
if (isError) {
Text(
modifier = Modifier.fillMaxWidth(),
text = error,
style = TextStyle(fontSize = 12.sp),
color = Color.Red,
textAlign = TextAlign.Start,
)
}
TextButton(
onClick = { viewModel.executeSkipAction() }
) {
Text(text = "Skip")
}
}
}
private class AgeViewModel(
private val data: MutableStateFlow = MutableStateFlow(null),
private val actions: Map = emptyMap(),
) : ViewModel() {
private lateinit var flowxScope: CustomComponentScope // IMPORTANT: keeps the custom context/scope which allows to call the available predefined methods exposed to custom component
private val _ageFlow = MutableStateFlow("")
val ageFlow: StateFlow = _ageFlow.asStateFlow()
private val _error = MutableStateFlow("")
val errorFlow: StateFlow = _error.asStateFlow()
fun updateAge(text: String) {
_ageFlow.value = text
}
fun setFlowxScope(scope: CustomComponentScope) {
flowxScope = scope
}
fun isValid(): Boolean = ageFlow.value.toIntOrNull().let {
when {
it == null -> false.also { _error.update { "Unrecognized format" } }
it < 35 -> false.also { _error.update { "You have to be at least 35 years old" } }
else -> true.also { _error.update { "" } }
}
}
fun buildDataToSave(): JSONObject? = ageFlow.value.takeUnless { it.isBlank() }
?.let {
JSONObject(
"""
{
"app": {
"age": "$it"
}
}
""".trimIndent()
)
}
fun executeSkipAction() {
actions["skipAction"]?.let {
if (this@AgeViewModel::flowxScope.isInitialized) { // IMPORTANT: if the custom context/scope was initialized, the action can be safely executed
flowxScope.executeAction(
action = it,
params = JSONObject() // e.g. JSONObject("{\"someParameter\": \"someValue\"}")
)
}
} ?: println("AgeCustomComponent: `skipAction` action was not found")
}
}
private class OtherCustomComponent() : CustomComponent {
override val composable: @Composable (CustomComponentScope.() -> Unit)
get() = @Composable {
/* add some @Composable implementation */
}
override fun populateUi(data: Any?) {
// extract the necessary data to be used for displaying the custom components
}
override fun populateUi(actions: Map) {
// extract the available actions that may be executed from the custom components
}
// Optional override, defaults to `true`.
// Here one can pass validation logic from viewModel (e.g. by calling `viewModel.isValid()`)
override fun validate(): Boolean = true
// Optional override, defaults to `null`.
// Here one can pass data to save from viewModel (e.g. by calling `viewModel.getDataToSave()`)
override fun saveData(): JSONObject? = null
}
```
## Custom header view for the [STEPPER](../docs/building-blocks/process/navigation-areas#stepper) component
The container application can opt for providing a custom view in order to be used, for all the [Stepper](../docs/building-blocks/process/navigation-areas#stepper) components, as a replacement for the built-in header.
The custom view receives `data` to populate its UI, as described below.
To provide a custom header for the [Stepper](../docs/building-blocks/process/navigation-areas#stepper), an *implementation* of the `CustomStepperHeaderProvider` interface should be passed as a parameter when initializing the SDK:
```kotlin theme={"system"}
interface CustomStepperHeaderProvider {
fun provideCustomStepperHeader(): CustomStepperHeader?
}
```
#### Sample
```kotlin theme={"system"}
class FxCustomStepperHeaderProvider : CustomStepperHeaderProvider {
override fun provideCustomStepperHeader(): CustomStepperHeader? {
return object : CustomStepperHeader {...}
}
}
```
### CustomStepperHeader
To provide the custom header view as a [@Composable](https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable) function, you have to implement the `CustomStepperHeader` interface:
```kotlin theme={"system"}
interface CustomStepperHeader {
/**
* Returns the [Composable]s used to render the stepper header.
* The received argument contains the stepper header necessary data to render the view.
*/
val composable: @Composable (data: Data) -> Unit
interface Data {
// title for the current step; can be empty or null
val stepTitle: String?
// title for the current selected substep; optional;
// can be empty ("") if not defined or `null` if currently there is no selected substep
val substepTitle: String?
// 1-based index of the current step
val step: Int
// total number of steps
val totalSteps: Int
// 1-based index of the current substep; can be `null` when there are no defined substeps
val substep: Int?
// total number of substeps in the current step; can be `null` or `0`
val totalSubsteps: Int?
}
}
```
#### Sample
```kotlin theme={"system"}
override fun provideCustomStepperHeader(): CustomStepperHeader? {
return object : CustomStepperHeader {
override val composable: @Composable ((CustomStepperHeader.Data) -> Unit)
get() = @Composable { data ->
/* add some @Composable implementation which displays the `data` */
}
}
}
```
## Custom loaders
The container application can decide to provide custom loaders to be displayed at certain moments based on a given predefined `actionName`.
To provide custom loaders, an *implementation* of the `CustomLoaderProvider` interface should be passed as a parameter when initializing the SDK:
```kotlin theme={"system"}
interface CustomLoaderProvider {
fun provideCustomLoader(actionName: String?): CustomLoader?
}
```
The possible values for the `actionName` parameter are:
* `startProcess` - received for overriding the loader displayed when starting a new process
* `reloadProcess` - received for overriding the loader displayed when resuming an existing process
* `whatever string value representing the name of an action as defined at process definition time` - received for overriding the loader displayed while that action is executed
Returning an implementation of a `CustomLoader` replaces the built-in platform loader with the provided one for the specified use cases.
Returning null keeps the built-in platform loader for the specified use cases.
### CustomLoader
The implementation for providing a custom loader is based on creating and binding a user defined [@Composable](https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable) function, through the `CustomLoader` interface:
```kotlin theme={"system"}
interface CustomLoader {
val composable: @Composable CustomLoaderScope.() -> Unit
}
```
### CustomLoaderScope
The `composable` property of the [CustomLoader](#customloader) is a [@Composable](https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable) function which may be defined and run only within the context of a `CustomLoaderScope` receiver.
```kotlin theme={"system"}
val composable: @Composable CustomLoaderScope.() -> Unit
```
```kotlin theme={"system"}
interface CustomLoaderScope {
fun replaceSubstitutionTag(key: String): String
fun getMediaResourceUrl(key: String): String?
}
```
This allows calling predefined SDK methods for querying for substitution tags and media resource URLs directly from the custom loader through the scope itself.
#### Sample
```kotlin expandable theme={"system"}
class FxCustomLoaderProvider : CustomLoaderProvider {
override fun provideCustomLoader(actionName: String?): CustomLoader? =
when (actionName) {
"startProcess" -> MyCustomLoader(backgroundColor = Color.Black.copy(alpha = 0.38f), indicatorColor = Color.Red)
"reloadProcess" -> MyCustomLoader(backgroundColor = Color.Yellow.copy(alpha = 0.38f), indicatorColor = Color.Green)
"action1" -> ActionCustomLoader()
"action2" -> ComplexCustomLoader()
else -> null
}
}
class MyCustomLoader(val backgroundColor: Color, val indicatorColor: Color) : CustomLoader {
override val composable: @Composable (CustomLoaderScope.() -> Unit)
get() = @Composable {
Box(
modifier = Modifier
.fillMaxSize()
.background(color = backgroundColor),
contentAlignment = Alignment.Center,
) {
CircularProgressIndicator(color = indicatorColor)
BackHandler(enabled = true) {} // block back navigation
}
}
}
class ActionCustomLoader() : CustomLoader {...}
class ComplexCustomLoader() : CustomLoader {
private val animatedViewModel = AnimatedLoaderViewModel(...)
override val composable: @Composable (CustomLoaderScope.() -> Unit)
get() = @Composable {
AnimatedLoader(viewModel = animatedViewModel)
}
}
@Composable
private fun CustomLoaderScope.AnimatedLoader(
viewModel: AnimatedLoaderViewModel
) {
viewModel.setFlowxScope(this@AnimatedLoader) // IMPORTANT: keep a reference to the custom context/scope in order to access the available predefined SDK methods
val state by viewModel.loaderState.collectAsStateWithLifecycle()
Box {
// use state to build what is to be displayed
}
}
private class AnimatedLoaderViewModel(...) : ViewModel() {
private lateinit var flowxScope: CustomLoaderScope // IMPORTANT: keeps the custom context/scope which allows to call the available predefined methods exposed to custom component
val loaderState: StateFlow =
someData
.process {
if (this@AnimatedLoaderViewModel::flowxScope.isInitialized) { // IMPORTANT: if the custom context/scope was initialized, the substitution tag can be safely queried
flowxScope.replaceSubstitutionTag(it)
} else {
it
}
}
.stateIn(...)
fun setFlowxScope(scope: CustomLoaderScope) {
flowxScope = scope
}
}
```
## Collecting analytics events
To be able to collect analytics events from the SDK, an implementation for the `AnalyticsCollector` functional interface may be provided when initializing the SDK:
```kotlin theme={"system"}
fun interface AnalyticsCollector {
fun onEvent(event: Event)
}
```
There are two types of events, `Screen` and `Action`, both of them containing some `Data` and an optional `CustomPayload`, as defined at process definition time.
The `Event` is structured like this:
```kotlin theme={"system"}
sealed interface Event {
interface Screen : Event {
val data: Screen.Data
interface Data {
val value: String
val customPayload: CustomPayload?
}
}
interface Action : Event {
val data: Action.Data
interface Data {
val value: String
val screen: String?
val component: String?
val label: String?
val customPayload: CustomPayload?
}
}
sealed interface CustomPayload {
interface Object : CustomPayload {
val data: JSONObject
}
interface Array : CustomPayload {
val data: JSONArray
}
}
}
```
#### Sample
The implementation can be passed as a lambda, like:
```kotlin theme={"system"}
analyticsCollector = { event ->
// do whatever is needed (e.g. log the event)
when (it) {
is Event.Screen -> {
val customPayload: String? =
when (val payload = it.data.customPayload) {
is Event.CustomPayload.Object -> payload.data.toString()
is Event.CustomPayload.Array -> payload.data.toString()
else -> null
}
Log.i("Analytics", "Event.Screen(value = ${it.data.value}, customPayload = $customPayload)")
}
is Event.Action -> {
val customPayload: String? =
when (val payload = it.data.customPayload) {
is Event.CustomPayload.Object -> payload.data.toString()
is Event.CustomPayload.Array -> payload.data.toString()
else -> null
}
Log.i("Analytics", "Event.Action(value = ${it.data.value}, screen = ${it.data.screen}, component = ${it.data.component}, label = ${it.data.label}, customPayload = $customPayload)")
}
}
}
```
The `value` property represents the identifier set in the process definition.
For action type events there are some additional properties provided:
* `component` - The type of component triggering the action
* `label` - The label of the component, if available. (E.g. title of a button or label of a form element)
* `screen` - The identifier of the screen containing the component, if set
The `customPayload` is defined at process definition time, and then processed inside the platform before sending it to being collected.
## Handling "Start of a new process"
When an action of type `START_PROJECT` is executed, the `onNewProcessStarted` lambda provided in the `Flowx.getInstance().init(...)` function is invoked.
This callback provides the UUID of the newly started process, which can be used to resume the process by calling the `Flowx.getInstance().continueProcess(...)` method.
It is the responsibility of the container application's developer to implement the necessary logic for displaying the appropriate UI for the newly started process.
#### Sample
One way to handle this is to send a broadcast message to notify the Activity currently displaying the running process.
The Activity should handle the broadcast to reload and display the newly started process identified by `processInstanceUuid` (received in the broadcast intent).
```kotlin theme={"system"}
Flowx.getInstance().init(
...
onNewProcessStarted = { processInstanceUuid ->
applicationContext.sendBroadcast(
Intent("some.intent.filter.indentifier").apply {
putExtra("processInstanceUuid", processInstanceUuid)
setPackage("your.application.package")
}
)
}
...
)
class ProcessActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
setContent {
val yourBroadcastReceiver = remember {
YourBroadcastReceiver(handler = { processInstanceUuid -> /* do your own logic to refresh `ProcessContent()` */ })
}
val context = LocalContext.current
LifecycleStartEffect(true) {
ContextCompat.registerReceiver(context.applicationContext, yourBroadcastReceiver, IntentFilter("some.intent.filter.indentifier"), ContextCompat.RECEIVER_NOT_EXPORTED)
onStopOrDispose {
runCatching {
context.applicationContext.unregisterReceiver(yourBroadcastReceiver)
}
}
}
ProcessContent()
}
}
@Composable
private fun ProcessContent(...) {...}
}
class YourBroadcastReceiver(private val handler: (String) -> Unit) : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
intent?.extras?.getString("processInstanceUuid")?.let { processUuid -> handler.invoke(processUuid) }
}
}
```
## Known issues
* shadows are rendered only on **Android >= 28** having [hardware acceleration](https://developer.android.com/topic/performance/hardware-accel) **enabled**
# Angular SDK
Source: https://docs.flowx.ai/5.1/sdks/angular-renderer
FlowxProcessRenderer is a library designed to render the UI of processes created via the Flowx Process Designer.
**Breaking changes**: Starting with version 4.0 the ui-sdk will no longer expect the authToken to be present in the `LOCAL_STORAGE`. Instead, the authToken will be passed as an input to the flx-process-renderer component. This is mandatory for the SSE to work properly.
## Prerequisites
* Node.js min version 20 - [**Download Node.js**](https://nodejs.org/en/blog/release/v20.9.0)
* Angular CLI version 19. Install Angular CLI globally using the following command:
```npm theme={"system"}
npm install -g @angular/cli@19
```
This will allow you to run ng related commands from the terminal.
## Angular project requirements
Your app MUST be created using the NG app from the @angular/cli\~19 package. It also MUST use SCSS for styling.
```npm theme={"system"}
npm install -g @angular/cli@19
ng new my-flowx-app
```
To install the npm libraries provided by FLOWX you will need to obtain access to the private FlowX Nexus registry. Please consult with your project DevOps.
The library uses Angular version **@angular\~19**, **npm v10.1.0** and **node v20.9.0**.
If you are using an older version of Angular (for example, v16), please consult the following link for update instructions:
[**Update Angular from v16.0 to v19.0**](https://angular.dev/update-guide?v=16.0-19.0\&l=1)
## Installing the library
Use the following command to install the **renderer** library and its required dependencies:
```bash theme={"system"}
npm install \
@flowx/core-sdk@\
@flowx/core-theme@ \
@flowx/angular-sdk@ \
@flowx/angular-theme@ \
@flowx/angular-ui-toolkit@ \
@angular/cdk@19 \
@types/event-source-polyfill
```
Replace `` with the correct version corresponding to your platform version.
To find the right version, navigate to: **Release Notes → Choose your platform version → Deployment guidelines → Component versions**.
A few configurations are needed in the projects `angular.json`:
* in order to successfully link the pdf viewer, add the following declaration in the assets property:
```json theme={"system"}
{
"glob": "**/*",
"input": "node_modules/ng2-pdfjs-viewer/pdfjs",
"output": "/assets/pdfjs"
}
```
## Initial setup
Once installed, `FlxProcessModule` will be imported in the `AppModule` as `FlxProcessModule.withConfig({})`.
You **MUST** also import the dependencies of `FlxProcessModule`: `HttpClientModule` from `@angular/common/http`
### Theming
Component theming is done through the `@flowx/angular-theme` library. The theme id is a required input for the renderer SDK component and is used to fetch the theme configuration. The id can be obtained from the admin panel in the themes section.

### Authorization
Every request from the **FlowX** renderer SDK will be made using the **HttpClientModule** of the client app, which means those requests will go through every interceptor you define here. This is most important to know when building the auth method as it will be the job of the client app to intercept and decorate the requests with the necessary auth info (eg. `Authorziation: Bearer ...`).
It's the responsibility of the client app to implement the authorization flow (using the **OpenID Connect** standard). The renderer SDK will expect the authToken to be passed to the `flx-process-renderer` as an input.
```typescript theme={"system"}
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { FlxProcessModule } from '@flowx/angular-sdk';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent,
],
imports: [
BrowserModule,
AppRoutingModule,
// will be used by the renderer SDK to make requests
HttpClientModule,
// needed by the renderer SDK
FlxProcessModule.withConfig({
components: {},
services: {},
}),
],
// this interceptor with decorate the requests with the Authorization header
providers: [
{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true },
],
bootstrap: [AppComponent]
})
export class AppModule {}
```
The `withConfig()` call is required in the application module where the process will be rendered. The `withConfig()` method accepts a config argument where you can pass extra config info, register a **custom component**, **service**, or **custom validators**.
**Custom components** will be referenced by name when creating the template config for a user task.
**Custom validators** will be referenced by name (`currentOrLastYear`) in the template config panel in the validators section of each generated form field.
```typescript theme={"system"}
// example with custom component, custom services and custom validator
FlxProcessModule.withConfig({
components: {
YourCustomComponentIdentifier: CustomComponent,
},
services: {
NomenclatorService,
LocalDataStoreService,
},
validators: { currentOrLastYear },
})
// example of a custom validator that restricts data selection to
// the current or the previous year
currentOrLastYear: function currentOrLastYear(AC: AbstractControl): { [key: string]: any } {
if (!AC) {
return null;
}
const yearDate = moment(AC.value, YEAR_FORMAT, true);
const currentDateYear = moment(new Date()).startOf('year');
const lastYear = moment(new Date()).subtract(1, 'year').startOf('year');
if (!yearDate.isSame(currentDateYear) && !yearDate.isSame(lastYear)) {
return { currentOrLastYear: true };
}
return null;
}
```
The error that the validator returns **MUST** match the validator name.
The entry point of the library is the `` component. A list of accepted inputs is found below:
```
```
#### Parameters
| Name | Description | Type | Mandatory | Default value | Example |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | --------- | ------------- | ----------------------------------------------------------------------- |
| apiUrl | Your base url | string | true | - | [https://yourDomain.dev](https://yourdomain.dev) |
| processApiPath | Process subpath | string | true | - | onboarding |
| authToken | Authorization token | string | true | - | 'eyJhbGciOiJSUzI1NiIsIn....' |
| themeId | Theme id used to style the process. Can be obtained from the themes section in the admin | string | true | - | '123-456-789' |
| processName | Identifies a process | string | true | - | client\_identification |
| workspaceId | Workspace id | string | true | - | '8f52744-8403-4e8d....' |
| processStartData | Data required to start the process | json | true | - | `{ "firstName": "John", "lastName": "Smith"}` |
| debugLogs | When set to true this will print WS messages in the console | boolean | false | false | - |
| language | Language used to localize the application. | string | false | en | - |
| keepState |
By default all process data is reset when the process renderer component gets destroyed. Setting this to true will keep process data even if the viewport gets destroyed
| boolean | false | false | - |
| isDraft | When true allows starting a process in draft state. \*Note that isDraft = true requires that processName be the **id** (number) of the process and NOT the name. | boolean | false | false | - |
| legacyHttpVersion | Set this to `true` only for HTTP versions \< 2 in order for SSE to work properly. Can be omitted otherwise. | boolean | false | false | - |
| projectInfo | Information about the project that contains the process that is being run. | object | true | - | `{ projectId: '1234-5678-9012' }` |
| locale | Locale used to localize the application. | string | false | en-US | 'en-US' |
| cache | Caching of CMS resources (cached resources include: theme configurations, substitution tags, enumerations, media library assets) | boolean | false | true | - |
| customLoader | Custom loader components for different loading scenarios | object | false | - | `{ startProcess: StartLoaderComponent, saveData: SaveLoaderComponent }` |
When the cache is enabled, these CMS resources are stored in the browser's cache storage, which significantly improves performance and loading times by reducing repeated network requests for the same resources.
Environment Recommendations
* **During Development**: It is recommended to disable caching by setting `[cache]="false"` to ensure you are always working with the latest resources. This prevents outdated assets from being used during active development.
* **For Production**: Always keep caching enabled (`[cache]="true"`) to maximize performance and optimize resource loading times.
### Data and actions
Custom components will be hydrated with data through the \$data input observable which must be defined in the custom component class.
```typescript theme={"system"}
@Component({
selector: 'my-custom-component',
templateUrl: './custom-component.component.html',
styleUrls: ['./custom-component.component.scss'],
})
export class CustomComponentComponent {
data$ = input | null>(null)
}
```
Component actions are always found under `data` -> `actionsFn` key.
Action names are configurable via the process editor.
```typescript theme={"system"}
# data object example
data: {
actionsFn: {
action_one: () => void;
action_two: () => void;
}
}
```
#### Custom component validation
Custom components can validate their own status. We can inject the `FLX_VALIDATOR_SERVICE` service and use it to validate the component. Whe service exposes the following properties:
* `validate(isValid: boolean)` - used to validate the component
* `saveData(data: any)` - used to save data
* `validated$` - used to monitor external submission from the process
Example of the a custom component that validates an input with a required validator:
```ts theme={"system"}
@Component({
selector: 'flx-custom-validation',
imports: [CommonModule, ReactiveFormsModule],
template: `
Custom validation:
@if (formSubmitted() && fc.invalid) {
error
}
`
})
export class FlxCustomValidationComponent implements OnInit {
data$ = input | null>(null) // can be used to get process data & actions
validationService = inject(FLX_VALIDATOR_SERVICE) // service used to validate the custom component - ony use in components that need validation
fc = new FormControl('', Validators.required) // the form control has a required validator.
formSubmitted = signal(false)
ngOnInit(): void {
// update validity
this.fc.statusChanges.subscribe((status) => {
this.validationService.validate(status === 'VALID')
})
// save data
this.fc.valueChanges.subscribe((value) => {
this.validationService.saveData({ app: { test1: value, test2: `${value}${value}` } })
})
// monitor external submission
this.validationService.validated$.subscribe(() => {
this.formSubmitted.set(true)
})
}
}
```
### Custom Interceptors
* Starting from the FlowX SDKs version 4.6, the Angular `HttpClientModule` is no longer used internally to make HTTP requests. Thus, we have a new mechanism that allows you to create custom interceptors for handling HTTP requests.
#### Request Interceptors
* Here is an example that illustrates how to create an interceptor that adds a custom header to all outgoing requests:
```typescript theme={"system"}
// Import the necessary types
import { FLX_REQUEST_INTERCEPTORS_CONFIG } from '@flowx/angular-sdk'
import { HttpRequestInterceptor } from '@flowx/core-sdk'
// create the interceptor factory function
const customHeaderInterceptor: HttpRequestInterceptor[] = [
{
onFulfilled: (response) => {
response.headers['custom-header'] = 'custom-value'
return response
},
}
]
// Add the interceptor to the providers array in the main app module
{
provide: FLX_REQUEST_INTERCEPTORS_CONFIG,
useValue: customHeaderInterceptor,
}
```
#### Response Interceptors
* Here is an example that illustrates how to create an interceptor that shows a message when a response errors out:
```typescript theme={"system"}
import { FLX_RESPONSE_INTERCEPTORS_CONFIG } from '@flowx/angular-sdk'
import { HttpResponseInterceptor } from '@flowx/core-sdk'
const customHErrorInterceptor: HttpResponseInterceptor[] = [
{
onRejected: (response) => {
if (response.status !== 200) {
console.error('Something went wrong, we should handle this!', response.message)
}
return response
}
}
]
// Add the interceptor to the providers array in the main app module
{
provide: FLX_RESPONSE_INTERCEPTORS_CONFIG,
useValue: customHErrorInterceptor,
}
```
#### Interceptors that use Dependency injection
* If you need to use a service in your interceptor, you can use provider factories coupled with the `deps` property to inject the service into the interceptor:
```typescript theme={"system"}
// the interceptor factory function that receives the custom service as an argument through dependency injection:
const interceptor: (custom: any) => HttpRequestInterceptor[] = (customService: CustomService) => [{
onFulfilled: (response) => {
// do something with the custom service
// interceptor logic
return response
}
}]
// Add the interceptor to the providers array in the main app module
{
provide: FLX_REQUEST_INTERCEPTORS_CONFIG,
useFactory: (customService: CustomService) => [
interceptorFactory(customService),
],
deps: [CustomService], // provider factory dependencies
}
```
### Using custom icons
The SDK provides a mechanism for using custom icons. Providers for custom icons should be included in the main app module in order to be available for the whole application.
```ts theme={"system"}
import { FlxIconModule } from '@flowx/angular-ui-toolkit'
// create a custom dictionary of icons
const customIconDictionary = {
'custom-icon': 'custom icon svg'
}
// add the custom icon dictionary to the providers array in the main app module.
providers: [
...
importProvidersFrom(FlxIconModule),
provideExtraIconSet(customIconDictionary),
]
```
### Process end handling
The SDK provides a mechanism for container applications to handle process completion events through the `(processEnd)` output event. This allows you to implement custom logic when a main process reaches an end state, such as redirecting users or triggering cleanup operations.
The `processEnd` event is triggered when the **main process** (not subprocesses) reaches any terminal state:
* `FINISHED` - Process completed successfully
* `FAILED` - Process encountered an error
* `ABORTED` - Process was manually terminated
* Other terminal states
Only the main process triggers this event. Subprocess completions do not trigger the event to avoid unnecessary interruptions during complex process flows.
#### Implementation
To handle process end events, bind to the `(processEnd)` output event of the `` component:
```typescript theme={"system"}
import { Component } from '@angular/core';
import { Router } from '@angular/router';
@Component({
selector: 'app-process',
template: `
`
})
export class ProcessComponent {
constructor(private router: Router) {}
onProcessEnd(): void {
// Your custom logic here
console.log('Process has ended');
// Example: Redirect to home page
this.router.navigate(['/dashboard']);
}
}
```
### Custom loader
The SDK provides a mechanism for container applications to customize the loader UI displayed during process execution. This allows you to replace the default FlowX loader with your own custom implementation based on different loading scenarios.
#### Configuration
To configure custom loaders, add them to the `FlxProcessModule.withConfig()` method in your application module:
```typescript theme={"system"}
import { FlxProcessModule } from '@flowx/angular-sdk';
// Define your custom loader components
@Component({
selector: 'app-start-loader',
template: `
`
})
export class SaveDataLoaderComponent {}
// Register the custom loaders in your app module
@NgModule({
imports: [
FlxProcessModule.withConfig({
customLoader: {
startProcess: StartProcessLoaderComponent,
saveData: SaveDataLoaderComponent,
},
components: {},
services: {},
}),
],
})
export class AppModule {}
```
#### API Specification
The custom loader configuration is a record mapping loader types to Angular component types:
* **Configuration type**: `Record>`
* **Loader types**:
* `startProcess` - Displayed when starting or resuming a process
* `saveData` - Displayed when executing actions with `blocksUi` set to `true`
* **Value**: Angular component type that will be rendered as the loader
#### Fallback Behavior
If no custom loader is provided for a specific type, the SDK will automatically fall back to the built-in FlowX loader. This ensures your application continues to function even with partial custom loader configuration.
You can use substitution tags and media library assets within your custom loader components to create rich, branded loading experiences that match your application's design system.
### Enumerations and translations
The SDK library provides a mechanism for handling enumerations and translations. The api for the method that handles enumerations is provided by the `getEnumeration` method which is `Promise` based.
These methods should only be used in custom components and within a process context because internal requests depend on the presence of a running project details.
#### Custom enumerations
```ts theme={"system"}
import {getEnumeration} from '@flowx/angular-sdk'
// get an enumeration by name
const enumeration = await getEnumeration('enumerationName')
// get enumeration with a parent
const enumeration = await getEnumeration('enumerationName', 'parentName')
// get enumerations and cache the result for subsequent calls
const enumerations = await getEnumerations('enumerationName', null, true)
```
#### Translations
The SDK provides a `FlxLocalizePipe` that allows you to manage translations within your application. The pipe is standalone and can be used both in templates and in custom components.
* Here is an example of how to use the pipe in a template:
```ts theme={"system"}
// import the pipe in the module where you want to use it
import { FlxLocalizePipe } from '@flowx/angular-sdk'
imports: [
...
FlxLocalizePipe
]
```
```html theme={"system"}
{{ 'hello' | flxLocalize }}
```
* Here is an example of how to use the pipe in a custom component:
```ts theme={"system"}
const localize = new FlxLocalizePipe()
const translatedText = localize.transform('@@substitution_tag')
```
### Analytics
The SDK provides a mechanism for collecting analytics events through a unified `CustomEvent` system. These events can be used to track screens and action events.
To use analytics features, make sure you've imported the necessary SDK module:
```ts theme={"system"}
import {
ANALYTICS_EVENTS,
AnalyticsData,
pushAnalyticsData,
} from '@flowx/core-sdk';
```
#### Emitting Analytics Events
Analytics events are dispatched using the `pushAnalyticsData(payload: AnalyticsData)` method. The SDK defines two event types:
```ts theme={"system"}
enum ANALYTICS_EVENTS {
SCREEN = 'SCREEN',
ACTION = 'ACTION',
}
```
Each analytics event should be an object of type AnalyticsData:
```ts theme={"system"}
type AnalyticsData = {
type: ANALYTICS_EVENTS;
value: string;
screen?: string;
component?: string;
label?: string;
customPayload?: object;
}
```
The value property represents the identifier set in the process definition.
For ACTION type events there are some additional properties provided:
* component - The type of component triggering the action
* label - The label of the component
* screen - The identifier of the screen containing the component, if set
#### Listening for Analytics Events
You can subscribe to analytics events using the standard CustomEvent API:
```ts theme={"system"}
ngOnInit(): void {
document.addEventListener('flowx:analytics', this.analyticsListener);
}
analyticsListener = (event: CustomEvent) => {
console.log('Received flowx:analytics event:', event.detail);
};
ngOnDestroy(): void {
document.removeEventListener('flowx:analytics', this.analyticsListener);
}
```
Ensure that you remove the event listener on component destruction to avoid memory leaks.
#### Custom Payload
This functionality, allowing you to capture and send custom data alongside standard analytics events.
When analytics custom payload is configured in FlowX Designer, the renderer automatically processes variable substitution and includes the resulting data in analytics events.
The renderer receives the analytics configuration as a JSON string with variable placeholders:
```json theme={"system"}
"analyticsCustomPayload": "{\n \"name\": ${app.input}\n}"
```
The SDK replaces variables with actual values from the process data store:
```json Template theme={"system"}
{
"name": "${app.input}",
"client": "${app.client}",
"amount": "${app.amount}"
}
```
```json Result theme={"system"}
{
"name": "john",
"client": { "id": "123", "name": "John Doe" },
"amount": 1500
}
```
The processed payload is included in the analytics event under the `customPayload` property:
```typescript theme={"system"}
// Analytics event structure with custom payload
{
type: 'ACTION', // or 'SCREEN'
info: {
value: 'Save personal data',
screen: 'Personal Data',
component: 'BUTTON',
label: 'Save',
customPayload: {
name: "john",
client: { id: "123", name: "John Doe" },
amount: 1500
}
}
}
```
### Caching
The SDK provides a caching mechanism for static resources. The cache is enabled by default and can be disabled by setting the [cache input](../../4.7.x/sdks/angular-renderer#parameters) of the `flx-process-renderer` component to `false`. When turned on, the cache will store the static resources in the browser's cache storage.
Common Scenario: When making updates to CMS resources (like substitution tags or media library images) during development, you may find that after a browser refresh, the changes don't appear.
Important: This issue is most commonly encountered when transitioning from versions before 4.7.x to version 4.7.x or newer, as the caching behavior changed
Common Scenario: When making updates to CMS resources (like substitution tags or media library images) during development, you may find that after a browser refresh, the changes don't appear.
Important: This issue is most commonly encountered when transitioning from versions before 4.7.x to version 4.7.x or newer, as the caching behavior changed
In order to reset the cache, you can go to the `Application` (Chrome) or `Storage` (Firefox) tab in the browser Dev tools and either clear the cache or disable the cache for the current site.
| Browser | Dev Tools Tab | Screenshot |
| :---------: | :-------------: | :--------------------------------------------------------------------------------------------------------------------------------------: |
| **Chrome** | Application tab |  |
| **Firefox** | Storage tab |  |
**How to clear the cache**:
* **Chrome**: Navigate to Application → Storage → Cache storage → Right-click on "flowx-resources-cache" → Clear
* **Firefox**: Navigate to Storage → Cache Storage → Right-click → Clear
### Interacting with the process
Data from the process is communicated via the **Server Send Event** protocol under the following keys:
| Name | Description | Example | |
| --------------- | :--------------------------------------------------------------------------------------: | :-----: | - |
| Data | data updates for process model bound to default/custom components | | |
| ProcessMetadata | updates about process metadata, ex: progress update, data about how to render components | | |
| RunAction | instructs the UI to perform the given action | | |
### Task management component
The `flx-task-manager` component is available in the `FlxTaskManagementComponent`. To use it, import the required module in your Angular project:
```bash theme={"system"}
import { FlxTasksManagementComponent } from '@flowx/angular-sdk';
```
#### Usage
Include the component in your template:
```xml theme={"system"}
```
Parameters:
| Name | Description | Type | Mandatory | Example |
| ------------------ | -------------------------------------- | -------- | --------- | ------------------------------ |
| `apiUrl` | Endpoint where the tasks are available | `string` | ✅ | `https://yourDomain.dev/tasks` |
| `authToken` | Authorization token | `string` | ✅ | (retrieved from local storage) |
| `appId` | The application ID | `string` | ✅ | (retrieved dynamically) |
| `viewDefinitionId` | The view configuration identifier | `string` | ✅ | (retrieved dynamically) |
| `workspaceId` | The workspace ID | `string` | ✅ | (retrieved dynamically) |
| `themeId` | The theme identifier | `string` | ❌ | (retrieved dynamically) |
| `language` | The selected language | `string` | ❌ | (retrieved dynamically) |
| `locale` | The localization setting | `string` | ❌ | (retrieved dynamically) |
| `buildId` | The current build identifier | `string` | ❌ | (retrieved dynamically) |
| `staticAssetsPath` | Path for static resources | `string` | ❌ | (set via environment) |
## Coding style tests
Always follow the Angular official [coding styles](https://angular.io/guide/styleguide).
Below you find a Storybook which demonstrates how components behave under different states, props, and conditions, it allows you to preview and interact with individual UI components in isolation, without the need for a full-fledged application:
# iOS SDK
Source: https://docs.flowx.ai/5.1/sdks/ios-renderer
# Using the iOS Renderer
## iOS Project Requirements
The minimum requirements are:
* iOS 15
* Swift 5.7
## Installing the library
The iOS Renderer is available through Cocoapods.
### Cocoapods
#### Prerequisites
* Cocoapods gem installed
#### Cocoapods private trunk setup
Add the private trunk repo to your local Cocoapods installation with the command:
```ruby theme={"system"}
pod repo add flowx-specs git@github.com:flowx-ai-external/flowx-ios-specs.git
```
#### Adding the dependency
Add the source of the private repository in the Podfile
```ruby theme={"system"}
source 'git@github.com:flowx-ai-external/flowx-ios-specs.git'
```
Add a post install hook in the Podfile setting `BUILD_LIBRARY_FOR_DISTRIBUTION` to `YES`.
```ruby theme={"system"}
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
end
end
end
```
Add the pod and then run `pod install`
```ruby theme={"system"}
pod 'FlowX'
```
Example
```ruby theme={"system"}
source 'https://github.com/flowx-ai-external/flowx-ios-specs.git'
source 'https://github.com/CocoaPods/Specs.git'
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
end
end
end
target 'AppTemplate' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for AppTemplate
pod 'FlowXRenderer'
target 'AppTemplateTests' do
inherit! :search_paths
# Pods for testing
end
target 'AppTemplateUITests' do
# Pods for testing
end
end
```
### Library dependencies
* Alamofire
* SDWebImageSwiftUI
* SDWebImageSVGCoder
## Configuring the library
The SDK has 2 configurations, available through shared instances: `FXConfig` which holds general purpose properties, and `FXSessionConfig` which holds user session properties.
It is recommended to call the `FXConfig` configuration method at app launch.
Call the FXSessionConfig configure method after the user logs in and a valid user session is available.
### FXConfig
This config is used for general purpose properties.
#### Properties
| Name | Description | Type | Requirement |
| ------------ | ------------------------------------------------------------------- | ------ | ------------------------------ |
| baseURL | The base URL used for REST networking | String | Mandatory |
| enginePath | The process engine url path component | String | Mandatory |
| imageBaseURL | The base URL used for static assets | String | Mandatory |
| locale | The locale used for localization | String | Mandatory. Defaults to "en-us" |
| language | The language used for retrieving enumerations and substitution tags | String | Mandatory. Defaults to "en" |
| logLevel | Enum value indicating the log level logging. Default is none | Bool | Optional |
**Sample**
```swift theme={"system"}
FXConfig.sharedInstance.configure { (config) in
config.baseURL = myBaseURL
config.enginePath = "engine"
config.imageBaseURL = myImageBaseURL
config.locale = "en-us"
config.language = "en"
config.logLevel = .verbose
}
```
#### Changing the current language
The current language and locale can be changed after the initial configuration, by calling the `changeLocaleSettings` method:
```swift theme={"system"}
FXConfig.sharedInstance.changeLocaleSettings(locale: "ro-ro",
language: "en")
```
For locale, use the format BCP 47. BCP 47 is the standard for representing language and region codes, here is a [link](https://www.w3.org/International/articles/language-tags/) to the BCP 47 specification.
An example of BCP 47 is `en-us` (language code - `en` and region code - `us`).
### FXSessionConfig
This config is used for providing networking or auth session-specific properties.
The library expects either the JWT access token or an Alamofire Session instance managed by the container app. In case a session object is provided, the request adapting should be handled by the container app.
#### Properties
| Name | Description | Type |
| -------------- | --------------------------------------------------- | ------- |
| sessionManager | Alamofire session instance used for REST networking | Session |
| token | JWT authentication access token | String |
#### Sample for access token
```swift theme={"system"}
...
func configureFlowXSession() {
FXSessionConfig.sharedInstance.configure { config in
config.token = myAccessToken
}
}
```
#### Sample for session
```swift theme={"system"}
import Alamofire
```
```swift theme={"system"}
...
func configureFlowXSession() {
FXSessionConfig.sharedInstance.configure { config in
config.sessionManager = Session(interceptor: MyRequestInterceptor())
}
}
```
```swift theme={"system"}
class MyRequestInterceptor: RequestInterceptor {
func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Swift.Result) -> Void) {
var urlRequest = urlRequest
urlRequest.setValue("Bearer " + accessToken, forHTTPHeaderField: "Authorization")
completion(.success(urlRequest))
}
}
```
### Theming
Make sure the `FXSessionConfig` configure method was called with a valid session before setting up the theme.
Before starting or resuming a process, the theme setup API should be called.
The start or continue process APIs should be called only after the theme setup was completed.
### Theme setup
The setup theme is called using the shared instance of `FXTheme`
```swift theme={"system"}
public func setupTheme(withUuid uuid: String,
workspaceId: String,
localFileUrl: URL? = nil,
appearance: SwiftUI.ColorScheme? = .light,
completion: (() -> Void)?)
```
* `uuid` - the UUID of the theme configured in the FlowX Designer.
* `localFileUrl` - optional parameter for providing a fallback theme file, in case the fetch theme request fails.
* `completion` - a completion closure called when the theme setup finishes.
In addition to the `completion` parameter, FXTheme's shared instance also provides a Combine publisher named `themeFetched` which sends `true` if the theme setup was finished.
#### Sample
```swift theme={"system"}
FXTheme.sharedInstance.setupTheme(withUuid: myThemeUuid,
localFileUrl: Bundle.main.url(forResource: "theme", withExtension: "json"),
completion: {
print("theme setup finished")
})
```
```swift theme={"system"}
...
var subscription: AnyCancellable?
func myMethodForThemeSetupFinished() {
subscription = FXTheme.sharedInstance.themeFetched.sink { result in
if result {
DispatchQueue.main.async {
// you can now start/continue a process
}
}
}
}
}
...
```
## Using the library
### Public API
The library's public APIs described in this section are called using the shared instance of FlowX, `FlowX.sharedInstance`.
### Check renderer compatibility
Before using the iOS SDK, it is recommended to check the compatibility between the renderer and the deployed FlowX services.
This can be done by calling the `checkRendererVersion` which has a completion handler containing a Bool value.
```swift theme={"system"}
FlowX.sharedInstance.checkRendererVersion { compatible in
print(compatible)
}
```
### How to start and end FlowX session
After all the configurations are set, you can start a FlowX session by calling the `startSession()` method.
This is optional, as the session starts lazily when the first process is started.
`FlowX.sharedInstance.startSession()`
When you want to end a FlowX session, you can call the `endSession()` method. This also does a complete clean-up of the started processes.
You might want to use this method in a variety of scenarios, for instance when the user logs out.
`FlowX.sharedInstance.endSession()`
### How to start a process
There are 2 methods available for starting a FlowX process.
The container app is responsible with presenting the navigation controller or tab controller holding the process navigation.
1. Start a process which renders inside a provided instance of a `UINavigationController`.
Use this method when you want the process to be rendered inside a custom instance of `UINavigationController`. Optionally you can pass an instance of `FXNavigationViewController`, which has the appearance set in the FlowX Theme, using the `FXNavigationViewController`s class func `FXNavigationViewController.navigationController()`.
If you use this method, make sure that the process does not use a tab controller as root view.
```swift theme={"system"}
public func startProcess(navigationController: UINavigationController,
workspaceId: String,
projectId: String,
name: String,
params: [String: Any]?,
isModal: Bool = false,
showLoader: Bool = false,
onProcessEnded: (() -> Void)? = nil)
```
* `navigationController` - the instance of UINavigationController which will hold the process navigation stack
* `workspaceId` - the uuid of the workspace
* `projectId` - the uuid of the project
* `name` - the name of the process
* `params` - the start parameters, if any
* `isModal` - a boolean indicating whether the process navigation is modally displayed. When the process navigation is displayed modally, a close bar button item is displayed on each screen displayed throughout the process navigation.
* `showLoader` - a boolean indicating whether the loader should be displayed when starting the process.
* `onProcessEnded` - a closure called when the process ends. The closure is strongly referenced inside the SDK. Avoid reference cycles by using \[weak self]
2. Start a process which renders inside a provided instance of a `UITabBarController`.
Use this method when you want the process to be rendered inside a custom instance of `UITabBarController`.If you use this method, make sure that the process has a tab controller as root view.
```swift theme={"system"}
public func startProcess(tabBarController: UITabBarController,
workspaceId: String,
projectId: String,
name: String,
params: [String: Any]?,
isModal: Bool = false,
showLoader: Bool = false,
onProcessEnded: (() -> Void)? = nil)
```
* `tabBarController` - the instance of UITabBarController which will hold the process navigation
* `workspaceId` - the uuid of the workspace
* `projectId` - the uuid of the project
* `name` - the name of the process
* `params` - the start parameters, if any
* `isModal` - a boolean indicating whether the process navigation is modally displayed. When the process navigation is displayed modally, a close bar button item is displayed on each screen displayed throughout the process navigation.
* `showLoader` - a boolean indicating whether the loader should be displayed when starting the process.
* `onProcessEnded` - a closure called when the process ends. The closure is strongly referenced inside the SDK. Avoid reference cycles by using \[weak self]
#### Sample
```swift theme={"system"}
FlowX.sharedInstance.startProcess(navigationController: processNavigationController,
workspaceId: workspaceUuid,
projectId: applicationUuid,
name: processName,
params: [:],
isModal: true,
showLoader: true,
onProcessEnded: { [weak self] in
//TODO handle process end
})
self.present(processNavigationController, animated: true, completion: nil)
```
or
```swift theme={"system"}
FlowX.sharedInstance.startProcess(tabBarController: processTabController,
workspaceId: workspaceUuid,
projectId: applicationUuid,
name: processName,
params: [:],
isModal: true,
showLoader: true,
onProcessEnded: { [weak self] in
//TODO handle process end
})
self.present(processTabController, animated: true, completion: nil)
```
### How to resume an existing process
There are 3 methods available for resuming a FlowX process.
The container app is responsible with presenting the navigation controller or tab controller holding the process navigation.
1. Continue a process which renders inside an instance of `UINavigationController` or `UITabBarController`, depending on the BPMN diagram of the process.
The controller to be presented will be provided inside the `completion` closure parameter of the method.
Use this method when you want the process to be rendered inside a controller themed using the FlowX Theme defined in the FlowX Designer.
```swift theme={"system"}
public func continueExistingProcess(uuid: String,
name: String,
isModal: Bool = false,
completion: ((UIViewController?) -> Void)? = nil,
onProcessEnded: (() -> Void)? = nil)
```
* `name` - the name of the process
* `isModal` - a boolean indicating whether the process navigation is modally displayed. When the process navigation is displayed modally, a close bar button item is displayed on each screen displayed throughout the process navigation.
* `showLoader` - a boolean indicating whether the loader should be displayed when starting the process.
* `completion` - a completion closure which passes either an instance of `UINavigationController` or `UITabBarController` to be presented.
* `onProcessEnded` - a closure called when the process ends. The closure is strongly referenced inside the SDK. Avoid reference cycles by using \[weak self]
2. Continue a process which renders inside a provided instance of a `UINavigationController`.
Use this method when you want the process to be rendered inside a custom instance of `UINavigationController`. Optionally you can pass an instance of `FXNavigationViewController`, which has the appearance set in the FlowX Theme, using the `FXNavigationViewController`s class func `FXNavigationViewController.navigationController()`.
If you use this method, make sure that the process does not use a tab controller as root view.
```swift theme={"system"}
public func continueExistingProcess(uuid: String,
name: String,
navigationController: UINavigationController,
isModal: Bool = false,
onProcessEnded: (() -> Void)? = nil)
```
* `uuid` - the UUID string of the process
* `name` - the name of the process
* `navigationController` - the instance of UINavigationController which will hold the process navigation stack
* `isModal` - a boolean indicating whether the process navigation is modally displayed. When the process navigation is displayed modally, a close bar button item is displayed on each screen displayed throughout the process navigation.
* `onProcessEnded` - a closure called when the process ends. The closure is strongly referenced inside the SDK. Avoid reference cycles by using \[weak self]
3. Continue a process which renders inside a provided instance of a `UITabBarController`.
Use this method when you want the process to be rendered inside a custom instance of `UITabBarController`.If you use this method, make sure that the process has a tab controller as root view.
```swift theme={"system"}
public func continueExistingProcess(uuid: String,
name: String,
tabBarController: UITabBarController,
isModal: Bool = false,
onProcessEnded: (() -> Void)? = nil)
```
* `uuid` - the UUID string of the process
* `name` - the name of the process
* `tabBarController` - the instance of UITabBarController which will hold the process navigation
* `isModal` - a boolean indicating whether the process navigation is modally displayed. When the process navigation is displayed modally, a close bar button item is displayed on each screen displayed throughout the process navigation.
* `onProcessEnded` - a closure called when the process ends. The closure is strongly referenced inside the SDK. Avoid reference cycles by using \[weak self]
#### Sample
```swift theme={"system"}
FlowX.sharedInstance.continueExistingProcess(uuid: uuid,
name: processName,
isModal: true) { processRootViewController in
if let processRootViewController = processRootViewController {
processRootViewController.modalPresentationStyle = .overFullScreen
self.present(processRootViewController, animated: true)
}
} onProcessEnded: { [weak self] in
}
```
or
```swift theme={"system"}
FlowX.sharedInstance.continueExistingProcess(uuid: uuid,
name: processName,
navigationController: processNavigationController,
isModal: true)
processNavigationController.modalPresentationStyle = .overFullScreen
self.present(processNavigationController, animated: true, completion: nil)
```
or
```swift theme={"system"}
FlowX.sharedInstance.continueExistingProcess(uuid: uuid,
name: processName,
tabBarController: processTabBarController,
isModal: false)
processTabBarController.modalPresentationStyle = .overFullScreen
self.present(processTabBarController, animated: true, completion: nil)
```
### How to end a process
You can manually end a process by calling the `stopProcess(name: String)` method.
This is useful when you want to explicitly ask the FlowX shared instance to clean up the instance of the process sent as parameter.
For example, it could be used for modally displayed processes that are dismissed by the user, in which case the `dismissRequested(forProcess process: String, navigationController: UINavigationController)` method of the FXDataSource will be called.
#### Sample
```swift theme={"system"}
FlowX.sharedInstance.stopProcess(name: processName)
```
### FXDataSource
The library offers a way of communication with the container app through the `FXDataSource` protocol.
The data source is a public property of FlowX shared instance.
`public weak var dataSource: FXDataSource?`
```swift theme={"system"}
public protocol FXDataSource: AnyObject {
func controllerFor(componentIdentifier: String) -> FXController?
func viewFor(componentIdentifier: String) -> FXView?
func viewFor(componentIdentifier: String, customComponentViewModel: FXCustomComponentViewModel) -> AnyView?
func navigationController() -> UINavigationController?
func errorReceivedForAction(name: String?)
func validate(validatorName: String, value: String) -> Bool
func dismissRequested(forProcess process: String, navigationController: UINavigationController)
func viewForStepperHeader(stepViewModel: StepViewModel) -> AnyView?
func collect(event: AnalyticsEvent)
func newProcessStarted(processInstanceUuid: String)
}
```
* `func controllerFor(componentIdentifier: String) -> FXController?`
This method is used for providing a custom component using UIKit UIViewController, identified by the componentIdentifier argument.
* `func viewFor(componentIdentifier: String) -> FXView?`
This method is used for providing a custom component using UIKit UIView, identified by the componentIdentifier argument.
* `func viewFor(componentIdentifier: String, customComponentViewModel: FXCustomComponentViewModel) -> AnyView?`
This method is used for providing a custom component using SwiftUI View, identified by the componentIdentifier argument.
A view model is provided as an ObservableObject to be added as @ObservedObject inside the SwiftUI view for component data observation.
* `func navigationController() -> UINavigationController?`
This method is used for providing a navigation controller. It can be either a custom `UINavigationController` class, or just a regular `UINavigationController` instance themed by the container app.
* `func errorReceivedForAction(name: String?)`
This method is called when an error occurs after an action is executed.
* `func validate(validatorName: String, value: String) -> Bool`
This method is used for custom validators. It provides the name of the validator and the value to be validated. The method returns a boolean indicating whether the value is valid or not.
* `func dismissRequested(forProcess process: String, navigationController: UINavigationController)`
This method is called, on a modally displayed process navigation, when the user attempts to dismiss the modal navigation. Typically it is used when you want to present a confirmation pop-up.
The container app is responsible with dismissing the UI and calling the stop process APIs.
* `func viewForStepperHeader(stepViewModel: StepViewModel) -> AnyView?`
This method is used for providing a custom SwiftUI view for the stepper navigation header.
* `func collect(event: AnalyticsEvent)`
This method is used for collecting analytics events from the SDK. The parameter is a `AnalyticsEvent` enum, which can represent a screen or an action.
* `func newProcessStarted(processInstanceUuid: String)`
This method is used for handling the start of another main process as a result of a `START_PROJECT` action. The parameter is the uuid of the process instance. The container app is responsible for dismissing the navigation of the current process and displaying the new process navigation.
#### Sample
```swift theme={"system"}
class MyFXDataSource: FXDataSource {
func controllerFor(componentIdentifier: String) -> FXController? {
switch componentIdentifier {
case "customComponent1":
let customComponent: CustomViewController = viewController()
return customComponent
default:
return nil
}
}
func viewFor(componentIdentifier: String) -> FXView? {
switch componentIdentifier {
case "customComponent2":
return CustomView()
default:
return nil
}
}
func viewFor(componentIdentifier: String, customComponentViewModel: FXCustomComponentViewModel) -> AnyView? {
switch componentIdentifier {
case "customComponent2":
return AnyView(SUICustomView(viewModel: customComponentViewModel))
default:
return nil
}
}
func navigationController() -> UINavigationController? {
nil
}
func errorReceivedForAction(name: String?) {
}
func validate(validatorName: String, value: Any) -> Bool {
switch validatorName {
case "myCustomValidator":
let myCustomValidator = MyCustomValidator(input: value as? String)
return myCustomValidator.isValid()
default:
return true
}
}
func dismissRequested(forProcess process: String, navigationController: UINavigationController) {
navigationController.dismiss(animated: true, completion: nil)
FlowX.sharedInstance.stopProcess(name: process)
}
func viewForStepperHeader(stepViewModel: StepViewModel) -> AnyView? {
return AnyView(CustomStepperHeaderView(stepViewModel: stepViewModel))
}
func collect(event: AnalyticsEvent) {
//TODO: collect event using the desired analytics tool.
}
func newProcessStarted(processInstanceUuid: String) {
//TODO present new process instance navigation
}
}
```
### Custom components
#### FXController
FXController is an open class subclassing UIViewController, which helps the container app provide full custom screens the renderer.
It needs to be subclassed for each custom screen.
Use this only when the custom component configured in the UI Designer is the root component of the User Task node.
```swift theme={"system"}
open class FXController: UIViewController {
internal(set) public var data: Any?
internal(set) public var actions: [ProcessActionModel]?
open func titleForScreen() -> String? {
return nil
}
open func populateUI() {
}
open func updateUI() {
}
}
```
* `internal(set) public var data: Any?`
`data` is the property, containing the data model for the custom component. The type is Any, as it could be a primitive value, a dictionary or an array, depending on the component configuration.
* `internal(set) public var actions: [ProcessActionModel]?`
`actions` is the array of actions provided to the custom component.
* `func titleForScreen() -> String?`
This method is used for setting the screen title. It is called by the renderer when the view controller is displayed.
* `func populateUI()`
This method is called by the renderer, after the controller has been presented, when the data is available.
This will happen asynchronously. It is the container app's responsibility to make sure that the initial state of the view controller does not have default/residual values displayed.
* `func updateUI()`
This method is called by the renderer when an already displayed view controller needs to update the data shown.
#### FXView
FXView is a protocol that helps the container app provide custom UIKit subviews to the renderer. It needs to be implemented by `UIView` instances. Similar to `FXController` it has data and actions properties and a populate method.
```swift theme={"system"}
public protocol FXView: UIView {
var data: Any? { get set }
var actions: [ProcessActionModel]? { get set }
func populateUI()
}
```
* `var data: [String: Any]?`
`data` is the property, containing the data model for the custom view. The type is Any, as it could be a primitive value, a dictionary or an array, depending on the component configuration.
* `var actions: [ProcessActionModel]?`
`actions` is the array of actions provided to the custom view.
* `func populateUI()`
This method is called by the renderer after the screen containing the view has been displayed.
It is the container app's responsibility to make sure that the initial state of the view does not have default/residual values displayed.
It is mandatory for views implementing the FXView protocol to provide the intrinsic content size.
```swift theme={"system"}
override var intrinsicContentSize: CGSize {
return CGSize(width: UIScreen.main.bounds.width, height: 100)
}
```
#### SwiftUI Custom components
Custom SwiftUI components can be provided as type-erased views.
`FXCustomComponentViewModel` is a class implementing the `ObservableObject` protocol. It is used for managing the state of custom SwiftUI views.
It has two published properties, for data and actions. It also includes a `saveData` dictionary and a `validate` closure used for submitting and validating data from the custom components.
```swift theme={"system"}
@Published public var data: Any?
@Published public var actions: [ProcessActionModel] = []
public var saveData: [String: Any]?
public var validate: (() -> Bool)?
```
Example
```swift theme={"system"}
struct SampleView: View {
@ObservedObject var viewModel: FXCustomComponentViewModel
var body: some View {
Text("Lorem")
}
}
```
### Validating SwiftUI Custom Components
A SwiftUI Custom Component can validate and submit data from a custom component, when executing an action from a FlowX.AI UI Component.
* `public var saveData: [String: Any]?`
Used for setting data to be submitted from the custom component.
* `public var validate: (() -> Bool)?`
Used for validating the custom component data before executing the action.
#### Sample
```swift theme={"system"}
struct MyCustomView: View {
@ObservedObject var viewModel: FXCustomComponentViewModel
var body: some View {
VStack {
...
}
.onAppear {
viewModel.saveData = ["customKey": "customValue"]
viewModel.validate = {
return true
}
}
.frame(height: 200)
}
}
```
### Custom header view for Stepper navigation
The container application can provide a custom view that will be used as the stepper navigation header, using the `FXDataSource` protocol method `viewForStepperHeader`.
The method has a parameter, which provides the data needed for populating the view's UI.
```swift theme={"system"}
public struct StepViewModel {
// title for the current step; optional
public var stepTitle: String?
// title for the current substep, if there is a stepper in stepper configured; optional
public var substepTitle: String?
// 1-based index of the current step
public var step: Int
// total number of steps
public var totalSteps: Int
// 1-based index of the current substep, if there is a stepper in stepper configured; optional
public var substep: Int?
// total number of substeps in the current step, if there is a stepper in stepper configured; optional
public var totalSubsteps: Int?
}
```
#### Sample
```swift theme={"system"}
struct CustomStepperHeaderView: View {
let viewModel: StepViewModel
var body: some View {
VStack(spacing: 16) {
ProgressView(value: Float(stepViewModel.step) / Float(stepViewModel.totalSteps))
.foregroundStyle(Color.blue)
if let stepTitle = stepViewModel.stepTitle {
Text(stepTitle)
}
if let substepTitle = stepViewModel.substepTitle {
Text(substepTitle)
}
}
.background(Color.white)
.shadow(radius: 10)
}
}
```
### How to run an action from a custom component
The custom components which the container app provides will contain FlowX actions to be executed. In order to run an action you need to call the following method:
```swift theme={"system"}
public func runAction(action: ProcessActionModel,
params: [String: Any]? = nil)
```
`action` - the `ProcessActionModel` action object
`params` - the parameters for the action
### How to run an upload action from a custom component
```swift theme={"system"}
public func runUploadAction(action: ProcessActionModel,
image: UIImage)
```
`action` - the `ProcessActionModel` action object
`image` - the image to upload
```swift theme={"system"}
public func runUploadAction(action: ProcessActionModel,
fileURL: URL)
```
`action` - the `ProcessActionModel` action object
`fileURL` - the local URL of the image
### Getting a substitution tag value by key
```swift theme={"system"}
public func getTag(withKey key: String) -> String?
```
All substitution tags will be retrieved by the SDK before starting the first process and will be stored in memory.
Whenever the container app needs a substitution tag value for populating the UI of the custom components, it can request the substitution tag using the method above, providing the key.
### Getting a media item url by key
```swift theme={"system"}
public func getMediaItemURL(withKey key: String) -> String?
```
All media items will be retrieved by the SDK before starting the first process and will be stored in memory.
Whenever the container app needs a media item url for populating the UI of the custom components, it can request the url using the method above, providing the key.
### Collecting analytics events
In order to collect analytics events from the SDK, the `collect(event: AnalyticsEvent)` func of the `FXDataSource` protocol needs to be implemented.
The func will be called by the SDK each time a screen or an action analytics event occurs.
The type of the event and relevant metadata are included in the func parameter `event` which is a `AnalyticsEvent` enum case.
```Swift theme={"system"}
public enum AnalyticsEvent {
case screen(AnalyticsScreenData)
case action(AnalyticsActionData)
}
public struct AnalyticsScreenData {
public var value: String
}
public struct AnalyticsActionData {
public var value: String
public var component: String?
public var label: String?
public var screen: String?
}
```
The value property represents the identifier set in the process definition.
For action type events there are some additional properties provided:
* component - The type of component triggering the action
* label - The label of the component, if available. (E.g. title of a button or label of a form element)
* screen - The identifier of the screen containing the component, if set
### Handling authorization token changes
When the access token of the auth session changes, you can update it in the renderer using the `func updateAuthorization(token: String)` method.
```swift theme={"system"}
FlowX.sharedInstance.updateAuthorization(token: accessToken)
```
# React SDK
Source: https://docs.flowx.ai/5.1/sdks/react-renderer
The FlowxProcessRenderer is a low code library designed to render UI configured via the Flowx.AI Process Editor.
## React project requirements
Your app MUST use SCSS for styling.
To install the npm libraries provided by FlowX.AI you will need to obtain access to the private FlowX.AI Nexus registry. Please consult with your project DevOps.
The library uses React version **react\~18**, **npm v10.8.0** and **node v18.16.9**.
## Installing the library
Use the following command to install the **renderer** library and its required dependencies:
Installing `react` and `react-dom` can be skipped if you already have them installed in your project.
```bash theme={"system"}
npm install \
react@18 \
react-dom@18 \
@flowx/core-sdk@ \
@flowx/core-theme@ \
@flowx/react-sdk@ \
@flowx/react-theme@ \
@flowx/react-ui-toolkit@ \
air-datepicker@3 \
axios \
ag-grid-react@32
```
Replace `` with the correct version corresponding to your platform version.
To find the right version, navigate to: **Release Notes → Choose your platform version → Deployment guidelines → Component versions**.
## Initial setup
Once installed, `FlxProcessRenderer` will be imported in the from the `@flowx/react-sdk` package.
### Theming
Component theming is done through the `@flowx/react-theme` library. The theme id is a required input for the renderer SDK component and is used to fetch the theme configuration. The id can be obtained from the admin panel in the themes section.

### Authorization
It's the responsibility of the client app to implement the authorization flow (using the **OpenID Connect** standard). The renderer SDK will expect the authToken to be passed to the `FlxProcessRenderer` as an input.
```typescript.tsx theme={"system"}
import { FlxProcessRenderer } from '@flowx/react-sdk';
export function MyFlxContainer() {
return
}
```
The `FlxProcessRenderer` component is required in the application module where the process will be rendered. The component accepts a props where you can pass extra config info, register a **custom component** or **custom validators**.
**Custom components** will be referenced by name when creating the template config for a user task.
**Custom validators** will be referenced by name (`customValidator`) in the template config panel in the validators section of each generated form field.
```typescript.tsx theme={"system"}
import { FlxProcessRenderer } from '@flowx/react-sdk';
export function MyFlxContainer() {
return (v: string) => v === '4.5'}}
staticAssetsPath={...}
locale="en-US"
language="en"
projectInfo={{
projectId: ...
}}
/>
}
```
The entry point of the library is the `` component. A list of accepted inputs is found below:
```
```
**Parameters**:
| Name | Description | Type | Mandatory | Default value | Example |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | --------- | ------------- | ------------------------------------------------------------------- |
| apiUrl | Your base url | string | true | - | [https://yourDomain.dev](https://yourdomain.dev) |
| processApiPath | Process subpath | string | true | - | onboarding |
| authToken | Authorization token | string | true | - | 'eyJhbGciOiJSUzI1NiIsIn....' |
| themeId | Theme id used to style the process. Can be obtained from the themes section in the admin | string | true | - | '123-456-789' |
| processName | Identifies a process | string | true | - | client\_identification |
| processStartData | Data required to start the process | json | true | - | `{ "firstName": "John", "lastName": "Smith"}` |
| workspaceId | Workspace id | string | true | - | '8f52744-8403-4e8d....' |
| language | Language used to localize the enumerations inside the application. | string | false | ro | - |
| isDraft | When true allows starting a process in draft state. \*Note that isDraft = true requires that processName be the **id** (number) of the process and NOT the name. | boolean | false | false | - |
| locale | Defines the locale of the process, used to apply date, currency and number formatting to data model values | boolean | false | ro-RO | - |
| projectInfo | Defines which FlowX Project will be run inside the process renderer. | json | true | - | `{ "projectId": "111111-222222-333333-44444"}` |
| customLoader | Custom loader components for different loading scenarios. | object | false | - | `{ startProcess: , saveData: }` |
### Analytics
The SDK provides a mechanism for collecting analytics events through a unified `CustomEvent` system. These events can be used to track screens and action events.
To use analytics features, make sure you've imported the necessary SDK module:
```ts theme={"system"}
import {
ANALYTICS_EVENTS,
AnalyticsData,
pushAnalyticsData,
} from '@flowx/core-sdk';
```
#### Emitting Analytics Events
Analytics events are dispatched using the `pushAnalyticsData(payload: AnalyticsData)` method. The SDK defines two event types:
```ts theme={"system"}
enum ANALYTICS_EVENTS {
SCREEN = 'SCREEN',
ACTION = 'ACTION',
}
```
Each analytics event should be an object of type AnalyticsData:
```ts theme={"system"}
type AnalyticsData = {
type: ANALYTICS_EVENTS;
value: string;
screen?: string;
component?: string;
label?: string;
customPayload?: object;
}
```
The value property represents the identifier set in the process definition.
For ACTION type events there are some additional properties provided:
* component - The type of component triggering the action
* label - The label of the component
* screen - The identifier of the screen containing the component, if set
#### Listening for Analytics Events
You can subscribe to analytics events using the standard CustomEvent API:
```ts theme={"system"}
const analyticsListener = (event: CustomEvent) => {
console.log('Received flowx:analytics event:', event.detail);
}
useEffect(() => {
document.addEventListener('flowx:analytics', analyticsListener)
return () => {
document.removeEventListener('flowx:analytics', analyticsListener)
}
}, [])
```
Ensure that you remove the event listener on component destruction to avoid memory leaks.
#### Custom Payload
This functionality, allowing you to capture and send custom data alongside standard analytics events.
When analytics custom payload is configured in FlowX Designer, the renderer automatically processes variable substitution and includes the resulting data in analytics events.
The renderer receives the analytics configuration as a JSON string with variable placeholders:
```json theme={"system"}
"analyticsCustomPayload": "{\n \"name\": ${app.input}\n}"
```
The SDK replaces variables with actual values from the process data store:
```json Template theme={"system"}
{
"name": "${app.input}",
"client": "${app.client}",
"amount": "${app.amount}"
}
```
```json Result theme={"system"}
{
"name": "john",
"client": { "id": "123", "name": "John Doe" },
"amount": 1500
}
```
The processed payload is included in the analytics event under the `customPayload` property:
```typescript theme={"system"}
// Analytics event structure with custom payload
{
type: 'ACTION', // or 'SCREEN'
info: {
value: 'Save personal data',
screen: 'Personal Data',
component: 'BUTTON',
label: 'Save',
customPayload: {
name: "john",
client: { id: "123", name: "John Doe" },
amount: 1500
}
}
}
```
## Starting a process
### Prerequisites
* **Process Name**: You need to know the name of the process you want to start. This name is used to identify the process in the system.
* **FlowX Project UUID**: You need the UUID of the FlowX Project that contains the process you want to start. This UUID is used to identify the project in the system.
* **Locale**: You can specify the locale of the process to apply date, currency, and number formatting to data model values.
* **Language**: You can specify the language used to localize the enumerations inside the application.
### Getting the project UUID
The project UUID can be obtained from the FlowX Dashboard. Navigate to the Projects section and select the project you want to start a process in. The UUID can be copied from the project actions popover.

### Getting the process name
The process name can be obtained from the FlowX Designer. Navigate to the process you want to start and copy the process name from the breadcrumbs.

### Initializing the process renderer
To start a process, you need to initialize the `FlxProcessRenderer` component in your application. The component accepts various props that define the process to start, the theme to use, and other configuration options.
```typescript.tsx theme={"system"}
import { FlxProcessRenderer } from '@flowx/react-sdk';
export function MyFlxContainer() {
return
}
```
## Custom components
Custom components will be hydrated with data through the data input prop which must be defined in the custom component.
Custom components will be provided through the `components` parameter to the `` component.
The object keys passed in the `components` prop **MUST** match the custom component names defined in the FlowX process.
Component data defined through an `inputKey` is available under `data` -> `data`
Component actions are always found under `data` -> `actionsFn` key.
```typescript.tsx theme={"system"}
export const MyCustomComponent = ( {data }) => {...}
```
```typescript theme={"system"}
# data object example
data: {
data: {
input1: ''
},
actionsFn: {
action_one: () => void;
action_two: () => void; }
}
```
To add a custom component in the template config tree, we need to know its unique identifier and the data it should receive from the process model.

The properties that can be configured are as follows:
* **Identifier** - This enables the custom component to be displayed within the component hierarchy and determines the actions available for the component.
* **Input keys** - These are used to specify the pathway to the process data that components will utilize to receive their information.
* [**UI Actions**](../docs/building-blocks/ui-designer/ui-actions) - actions defined here will be made available to the custom component

### Prerequisites (before creation)
* **React Knowledge**: You should have a good understanding of React, as custom components are created and imported using React.
* **Development Environment**: Set up a development environment for React development, including Node.js and npm (Node Package Manager).
* **Component Identifier**: You need a unique identifier for your custom component. This identifier is used for referencing the component within the application.
### Creating a custom component
To create a Custom Component in React, follow these steps:
1. Create a new React component.
2. Implement the necessary HTML structure, TypeScript logic, and SCSS styling to define the appearance and behavior of your custom component.
### Importing the component
After creating the Custom Component, you need to import it into your application.
In your `` component, add the following property:
```tsx theme={"system"}
```
### Using the custom component
Once your Custom Component is declared, you can use it for configuration within your application.

### Data input and actions
The Custom Component accepts input data from processes and can also include actions extracted from a process. These inputs and actions allow you to configure and interact with the component dynamically.

### Extracting data from processes
There are multiple ways to extract data from processes to use within your Custom Component. You can utilize the data provided by the process or map actions from the BPMN process to Angular actions within your component.

Make sure that the React actions that you declare match the names of the process actions.
### Styling with CSS
To apply CSS classes to UI elements within your Custom Component, you first need to identify the UI element identifiers within your component's HTML structure. Once identified, you can apply defined CSS classes to style these elements as desired.
Example:

### Additional considerations
* **Naming Conventions**: Be consistent with naming conventions for components, identifiers, and actions. Ensure that Angular actions match the names of process actions as mentioned in the documentation.
* **Component Hierarchy**: Understand how the component fits into the overall component hierarchy of your application. This will help determine where the component is displayed and what actions are available for it.
* **Documentation and Testing**: Document your custom component thoroughly for future reference. Additionally, testing is crucial to ensure that the component behaves as expected in various scenarios.
* **Security**: If your custom component interacts with sensitive data or performs critical actions, consider security measures to protect the application from potential vulnerabilities.
* **Integration with FLOWX Designer**: Ensure that your custom component integrates seamlessly with FLOWX Designer, as it is part of the application's process modeling capabilities.
## Custom validators
You may also define custom validators in your FlowX processes and pass their implementation through the `validators` prop of the `` component.
The validators are then processed and piped through the popular [React Hook Form](https://www.react-hook-form.com/api/useform/register/) library, taking into account how the error messages are defined in your process.
A validator must have the following type:
```typescript theme={"system"}
const customValidator = (...params: string[]) => (v: any) => boolean | Promise
```
The object keys passed in the `validators` prop **MUST** match the custom validator names defined in the FlowX process.
## Process end handling
The SDK provides a mechanism for container applications to handle process completion events through the `onProcessEnded` callback. This allows you to implement custom logic when a main process reaches an end state, such as redirecting users or triggering cleanup operations.
The `onProcessEnded` callback is triggered when the **main process** (not subprocesses) reaches any terminal state:
* `FINISHED` - Process completed successfully
* `FAILED` - Process encountered an error
* `ABORTED` - Process was manually terminated
* Other terminal states
Only the main process triggers this callback. Subprocess completions do not trigger the callback to avoid unnecessary interruptions during complex process flows.
### Implementation
To handle process end events, pass a function to the `onProcessEnded` prop of the `` component:
```tsx theme={"system"}
import { FlxProcessRenderer } from '@flowx/react-sdk';
export function MyFlxContainer() {
const handleProcessEnd = () => {
// Your custom logic here
console.log('Process has ended');
// Example: Redirect to home page
window.location.href = '/dashboard';
};
return (
);
}
```
## Custom loader
The SDK provides a mechanism for container applications to customize the loader UI displayed during process execution. This allows you to replace the default FlowX loader with your own custom implementation based on different loading scenarios.
### Configuration
To configure custom loaders, pass them through the `customLoader` prop of the `` component:
```tsx theme={"system"}
import { FlxProcessRenderer } from '@flowx/react-sdk';
// Define your custom loader components
const StartProcessLoader = () => (
Starting process...
);
const SaveDataLoader = () => (
Processing your request...
);
// Register the custom loaders in your component
export function MyFlxContainer() {
return (
,
saveData: ,
}}
/>
);
}
```
### API Specification
The custom loader configuration is a record mapping loader types to React elements:
* **Configuration type**: `Record`
* **Loader types**:
* `startProcess` - Displayed when starting or resuming a process
* `saveData` - Displayed when executing actions with `blocksUi` set to `true`
* **Value**: React element (JSX) that will be rendered as the loader
### Fallback Behavior
If no custom loader is provided for a specific type, the SDK will automatically fall back to the built-in FlowX loader. This ensures your application continues to function even with partial custom loader configuration.
You can use any React components, including those with animations, styled components, or media assets, to create rich loading experiences that match your application's design system.
## Task management component
To use the `FlxTaskManager` component, import the module in your project:
```tsx theme={"system"}
import { FlxTaskManager } from '@flowx/react-sdk';
```
#### Usage
Include the component in your template:
```tsx theme={"system"}
```
Parameters:
| Name | Description | Type | Mandatory | Example |
| ------------------ | ----------------------------------------------- | -------- | --------- | ------------------------------ |
| `apiUrl` | Endpoint where the tasks are available | `string` | ✅ | `https://yourDomain.dev/tasks` |
| `authToken` | Authorization token | `string` | ✅ | (retrieved from local storage) |
| `appInfo` | Application information object containing appId | `object` | ✅ | `{ appId: "app-123" }` |
| `viewId` | The view configuration identifier | `string` | ✅ | (retrieved dynamically) |
| `workspaceId` | The workspace ID | `string` | ✅ | (retrieved dynamically) |
| `themeId` | The theme identifier | `string` | ❌ | (retrieved dynamically) |
| `language` | The selected language | `string` | ❌ | (retrieved dynamically) |
| `locale` | The localization setting | `string` | ❌ | (retrieved dynamically) |
| `buildId` | The current build identifier | `string` | ❌ | (retrieved dynamically) |
| `staticAssetsPath` | Path for static resources | `string` | ❌ | (set via environment) |
## Custom CSS
The renderer SDK allows you to pass custom CSS classes on any component inside the process. These classes are then applied to the component's root element.
To add a CSS custom class to a component, you need to define the class in the process designer by navigating to the styles tab of the component, expanding the Advanced accordion and writing down the CSS class.

The classes will be applied last on the element, so they will override the classes already defined on the element.

## Storybook
Below you find a Storybook which demonstrates how components behave under different states, props, and conditions, it allows you to preview and interact with individual UI components in isolation, without the need for a full-fledged application:
# SDKs overview
Source: https://docs.flowx.ai/5.1/sdks/sdks-overview
FLOWX.AI provides web and native mobile SDKs. These SDKs enable developers to create applications that can be displayed in a browser, embedded in an internet banking interface, or in a mobile banking app. The SDKs automatically generate the user interface (UI) based on the business process and data points created by a business analyst, reducing the need for UX/UI expertise.
SDKs are used in the Angular, React, iOS, and Android applications to render the process screens and orchestrate the custom components.
# IAM solution
Source: https://docs.flowx.ai/5.1/setup-guides/access-management/access-management-overview
Identity and access management (IAM) is a framework of business processes, policies and technologies that facilitates the management of electronic or digital identities. With an IAM framework in place, you can control user access to critical information/components within an organization.
## What is an Identity Provider (IdP)?
The IdP, Identity-as-a-Service (IDaaS), Privileged Identity/Access Management (PIM/PAM), Multi-factor/Two-factor Authentication (MFA/2FA), and numerous other subcategories are included in the IAM category.
IdP is a subset of an IAM solution that is dedicated to handling fundamental user IDs. The IdP serves as the authoritative source for defining and confirming user identities.
The IdP can be considered maybe the most important subcategory of the IAM field because it often lays the foundation of an organization's overall identity management infrastructure. In fact, other IAM categories and solutions, such as [IDaaS](https://jumpcloud.com/blog/identity-as-a-service-idaas), PIM/PAM, MFA/2FA, and others are often layered on top of the core IdP and serve to federate core user identities from the IdP to various endpoints. Therefore, your choice in IdP will have a profound influence on your overall IAM architecture.
We recommend **Keycloak**, a component that allows you to create users and store credentials. It can be also used for authorization - defining groups, and assigning roles to users.
Every communication that comes from a consumer application, goes through a public entry point (API Gateway). To communicate with this component, the consumer application tries to start a process and the public entry point will check for authentication (Keycloak will send you a token) and the entry point validates it.
For more information on how to add roles and how to configure an IdP solution, check the following section:
## Using Keycloak with an external IdP
Recommended keycloak version: **22.x**
In all cases, IdP authentication is mandatory but otherwise, all attribute mapping is configurable, including roles and groups or the entire authorization can be performed by keycloak.

### AD or LDAP provider
In Lightweight Directory Access Protocol (LDAP) and Active Directory, Keycloak functionality is called federation or external storage. Keycloak includes an LDAP/AD provider.

More details:
Configuration example:
### SAML, OpenID Connect, OAuth 2.0
Keycloak functionality is called brokering. Synchronization is performed during user login.
More details:
Configuration examples for ADFS:
# Configuring an IAM solution (Keycloak)
Source: https://docs.flowx.ai/5.1/setup-guides/access-management/configuring-an-iam-solution
This guide provides step-by-step instructions for configuring a minimal Keycloak setup to manage users, roles, and applications efficiently.
We will walk you through configuring a minimal Keycloak setup to efficiently manage users, roles, and applications. Keycloak is an open-source Identity and Access Management (IAM) solution that makes it easy to secure applications and services with little to no coding.
## Prerequisites
Before you begin, ensure you have the following:
* Keycloak installed
* Administrative access to the Keycloak server
* Basic understanding of IAM concepts
Recommended keycloak version: **22.x**
**Note for Keycloak 26+**: If using Keycloak version 26 or above, additional email configuration is required in the realm settings to prevent bad request errors when creating users. See the realm configuration section for details.
## Recommended Keycloak setup
To configure a minimal required Keycloak setup, in this guide we will cover the following steps:
Define available roles and realm-level roles assigned to new users.
Configure the client authentication, valid redirect URIs, and enable the necessary flows.
Set up **admin**, **task management**, **process engine**, **scheduler**, **integration designer** and **runtime manager** \*service accounts.
Before starting, if you need further information or a broader understanding of Keycloak, refer to the official Keycloak documentation:
## Creating a new realm
A realm is a space where you manage objects, including users, applications, roles, and groups. Creating a new realm is the first step in setting up Keycloak. Follow the steps below to create a new realm in Keycloak:
Log in to the Keycloak Admin Console using the appropriate URL for your environment (e.g., QA, development, production).

In the top left corner dropdown menu, click **Create Realm**. If you are logged in to the master realm, this dropdown menu lists all the realms created.
If you are logged in to the master realm, this dropdown menu lists all the realms created.
Enter a realm name and click **Create**.

Configure the **Realm Settings**, such as SSO Session Idle and Access Token Lifespan, according to your organization's needs:
**Sessions** -> **SSO Session idle**: Set to **30 Minutes** (recommended).

**Tokens** -> **Access Token Lifespan**: Set to **30 Minutes** (recommended).

**Login** -> **Email settings**: Configure email authentication settings.

**For Keycloak versions 26 and above**: You must configure the email settings in the **Login** tab to avoid bad request errors when creating users in FlowX Designer. Make sure to enable **Email as username** and **Login with email** toggles as shown in the realm settings.

**Common Pitfalls**:
* Ensure that the realm name is unique within your Keycloak instance.
* Double-check session idle and token lifespan settings to align with your security requirements.
* **For Keycloak 26+**: Failing to configure email settings in the Login tab will result in bad request errors when creating users through FlowX Designer. Always enable "Email as username" and "Login with email" options.
## Creating/importing user groups and roles
User groups and roles are essential for managing user permissions and access levels within a realm. You can either create or import user groups into a realm.
To import a super admin group with the necessary default user roles, download and run the provided script.
Instructions:
* Unzip the downloaded file.
* Open a terminal and navigate to the unzipped folder.
* Run the script using the appropriate command for your operating system.
After importing, add an admin user to the group and assign the necessary roles.

**Common Pitfalls**:
* Ensure the script has the necessary permissions to run on your system.
* Verify that the roles and groups align with your organizational structure.
## Creating new users
Creating new users is a fundamental part of managing access within Keycloak. Follow these steps to create a new user in a realm and generate a temporary password:
In the left menu bar, click **Users** to open the user list page.
On the right side of the empty user list, click **Add User**.
Fill in the user details and set **Email Verified** to **Yes**.

In the **Groups** section, search for a group, in our case: `FLOWX_SUPER_USERS` and click **Join**.

Save the user, go to the **Credentials** tab, and set a temporary password. Ensure the **Temporary** checkbox is checked.

**Common Pitfalls**:
* Ensure that the email address is valid and correctly formatted.
* Set the temporary password policy according to your organization’s security requirements.
## Adding clients
A client represents an instance of an application and is associated with a specific realm.
### Adding an OAuth 2.0 client
We'll add a client named `flowx-platform-authenticate`, which will be used for login, logout, and refresh token operations by web and mobile apps.
Click **Clients** in the top left menu, then click **Create client**.

In the **General Settings** tab configure the following properties:
* Set a client ID to `{your-client-name}-authenticate`.
* Set the **Client type** to `OpenID Connect`.

Now click **Next** and configure the **Capability config** details:
* Enable **Direct Access Grants**.
* Enable **Implicit Flow Enabled**.

Click **Next** and configure **Login settings**:
* Set **Valid redirect URIs**, specifying a valid URI pattern that a browser can redirect to after a successful login or logout, simple wildcards are allowed.

After creating the client, scroll down in the **Settings** tab and configure additional settings - **Logout Settings**:
* **Backchannel Logout Session Required**: Toggle OFF.
* **Front Channel Logout**: Toggle OFF.

Add **mappers** to `{your-client-name}-authenticate` client.
For instructions on adding mappers and understanding which mappers to add to your clients, refer to the section on [**Adding Protocol Mappers**](#adding-protocol-mappers).
### Adding an Authorizing client
To authorize REST requests to microservices and Kafka, create and configure the `{your-client-name}-platform-authorize` client.
Enter the client ID (`{your-client-name}-platform-authorize`).
Set **Client type** to **OpenID Connect**.

**Client Authentication**: Toggle ON
This setting defines the type of the OIDC client. When enabled, the client type is set to "confidential access." When disabled, it is set to "public access".
Disable **Direct Access Grants**.

**Valid Redirect URIs**: Populate this field with the appropriate URIs.
Save the configuration.

After creating the client, scroll down in the **Settings** tab and configure additional settings - **Logout Settings**:
* **Backchannel Logout Session Required**: Toggle OFF.
* **Front Channel Logout**: Toggle OFF.

Once you have configured these settings, the `{your-client-name}-platform-authorize` client will be created and can be used to authorize REST requests to microservices and Kafka within your application.
#### Example configuration for microservices
Below is an example of a minimal configuration for microservices using OAuth2 with the `{your-client-name}-platform-authorize` client:
```yaml theme={"system"}
security:
type: oauth2 #Specifies the security type as OAuth2.
basic:
enabled: false #Disables basic authentication.
oauth2:
base-server-url: http://localhost:8080 #Sets the base server URL for the Keycloak server
realm: flowx #Specifies the Keycloak realm
client:
access-token-uri: ${security.oauth2.base-server-url}/realms/${security.oauth2.realm}/protocol/openid-connect/token
client-id: your-client-name-platform-authorize
client-secret: CLIENT_SECRET
resource:
user-info-uri: ${security.oauth2.base-server-url}/realms/${security.oauth2.realm}/protocol/openid-connect/userinfo
```
| Configuration Key | Value/Example | Description |
| ----------------------------------------- | ----------------------------------------------------------------------------------------------------- | -------------------------------------------------- |
| `security.type` | `oauth2` | Specifies the security type as OAuth2. |
| `security.basic.enabled` | `false` | Disables basic authentication. |
| `security.oauth2.base-server-url` | `http://localhost:8080` | Sets the base server URL for the Keycloak server. |
| `security.oauth2.realm` | `flowx` | Specifies the Keycloak realm. |
| `security.oauth2.client.access-token-uri` | `${security.oauth2.base-server-url}/realms/${security.oauth2.realm}/protocol/openid-connect/token` | Defines the URL for obtaining access tokens. |
| `security.oauth2.client.client-id` | `your-client-name-platform-authorize` | Sets the client ID for authorization. |
| `security.oauth2.client.client-secret` | `CLIENT_SECRET` | Provides the client secret for authentication. |
| `security.oauth2.resource.user-info-uri` | `${security.oauth2.base-server-url}/realms/${security.oauth2.realm}/protocol/openid-connect/userinfo` | Specifies the URL for retrieving user information. |
## Adding protocol mappers
Protocol mappers in Keycloak allow you to transform tokens and documents, enabling actions such as mapping user data into protocol claims and modifying requests between clients and the authentication server. This provides greater customization and control over the information contained in tokens and exchanged during authentication processes.

To enhance your clients' functionality, add the following common mappers:
* [Group Membership mapper ](#group-membership-mapper) (`realm-groups`)
* Maps user groups to the authorization token.
* [User Attribute mapper](#user-attribute-mapper) (`business filter mapper`)
* Maps custom attributes, for example, mapping the [businessFilters ](../../docs/platform-deep-dive/user-roles-management/business-filters) list, to the token claim.
* [User Realm role](#user-realm-role) (`realm-roles`)
* Maps a user's realm role to a token claim.
The mappers we use can also be configured to control the data returned by the `/userinfo` endpoint, in addition to being included in tokens. This capability is a feature that not all Identity Providers (IDPs) support.
By incorporating these mappers, you can further customize and enrich the information contained within your tokens, ensuring they carry the necessary data for your applications.
### Group Membership mapper
Steps to add a Group Membership mapper:
From the Keycloak admin console, go to **Clients** and select your desired client.

In the client settings, click on **Client Scopes**.
Select the **dedicated client scope**: `{your-client-name}-authenticate-dedicated` to open its settings.

Make sure the **Mappers** tab is selected within the dedicated client scope.

Click **Add Mapper**. From the list of available mappers, choose **Group Membership**.

**Name**: Enter a descriptive name for the mapper to easily identify its purpose, for example `realm-groups`.
**Token Claim Name**: Set the token claim name, typically as `groups`, for including group information in the token.
**Add to ID Token**: Toggle OFF.

By configuring the group membership mapper, you will be able to include the user's group information in the token for authorization purposes.
### User Attribute mapper
To include custom attributes such as business filters in the token claim, follow these steps to add a user attribute mapper:
From the Keycloak admin console, go to **Clients** and select your desired client.
Click on **Client Scopes** and choose `{your-client-name}-authenticate-dedicated` to open its settings.
Ensure the **Mappers** tab is selected.

Click **Add mapper**. From the list of available mappers, select **User Attribute**.
* **Mapper Type**: Select **User Attribute**.
* **Name**: Enter a descriptive name for the mapper, such as "Business Filters Mapper".
* **User Attribute**: Enter `businessFilter`.
* **Token Claim Name**: Enter `attributes.businessFilters`.
* **Add to access token**: Toggle ON.
* **Add to userinfo**: Toggle ON.
* **Add to token introspection**: Toggle ON.
* **Multivalued**: Toggle ON.
* **Aggregate attribute values**: Toggle ON.

By adding this user attribute mapper, the custom attribute "businessFilters" will be included in the token claim under the name "attributes.businessFilters". This enables you to access and utilize business filters information within your application.
For more information about business filters, refer to the following section:
### User realm role mapper
To add a roles mapper to the `{your-client-name}-authenticate` client, so roles will be available in the OAuth user info response, follow these steps:
From the Keycloak admin console, go to **Clients** and select your desired client.
Click on **Client Scopes** and choose `{your-client-name}-authenticate-dedicated` to open its settings.
Ensure the **Mappers** tab is selected.
Click **Add Mapper**. From the list of available mappers, select **User Realm Role**.

* **Name**: Enter a descriptive name for the mapper, such as "Roles Mapper".
* **Mapper Type**: Select **User Realm Role**.
* **Token Claim Name**: Enter `roles`.
* **Add to ID Token**: Toggle OFF.
* **Add to access token**: Toggle OFF.

By adding this roles mapper, the assigned realm roles of the user will be available in the OAuth user info response under the claim name "roles". This allows you to access and utilize the user's realm roles within your application.
Please note that you can repeat these steps to add multiple roles mappers if you need to include multiple realm roles in the token claim.
### Examples
#### Login
To request a login token:
```curl theme={"system"}
curl --location --request POST 'http://localhost:8080/realms/flowx/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'username=admin@flowx.ai' \
--data-urlencode 'password=password' \
--data-urlencode 'client_id= your-client-name-authenticate'
```
#### Refresh token
To refresh an existing token:
```curl theme={"system"}
curl --location --request POST 'http://localhost:8080/realms/flowx/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=refresh_token' \
--data-urlencode 'client_id= your-client-name-authenticate' \
--data-urlencode 'refresh_token=ACCESS_TOKEN'
```
#### User info
To retrieve user information:
```
curl --location --request GET 'localhost:8080/realms/flowx/protocol/openid-connect/userinfo' \
--header 'Authorization: Bearer ACCESS_TOKEN' \
```
## Adding service accounts
**What is a service account?**
A service account grants direct access to the Keycloak API for a specific component. Each client can have a built-in service account that allows it to obtain an access token.
To use this feature you must enable the **Client authentication** (access type) for your client. When you do this, the **Service Accounts Enabled** switch will appear.
### Admin service account
The admin service account is used by the admin microservice to connect with Keycloak, enabling user and group management features within the FlowX.AI Designer.
Steps to add an Admin service account:
Navigate to **Clients** and select **Create client**.
Enter a **Client ID** for your new client.

* Enable **Client authentication** (access type).
* Disable **Standard flow**.
* Disable **Direct access grants**.
* Enable **Service accounts roles**.

After creating the client, scroll down in the **Settings** tab and configure additional settings - **Logout Settings**:
* **Backchannel Logout Session Required**: Toggle OFF.
* **Front Channel Logout**: Toggle OFF.

In the newly created client, navigate to the **Service accounts roles** tab.

Click **Assign role** and in the Filter field, select **Filter by clients**.

Assign the necessary roles to the admin service account based on the required access scopes, such as:
* **manage-realm**
* **manage-users**
* **query-users**
In the end, you should have something similiar to this:

Ensure you have created a realm-management client to include the necessary client roles.

The admin service account does not require mappers as it doesn't utilize roles. Service account roles include client roles from `realm-management`.
### Task Management service account
The task management service account facilitates process initiation and enables the use of the task management plugin (requiring the `FLOWX_ROLE` and role mapper), and access data from Keycloak.
Steps to Add a Task Management service account:
Follow steps **1**-**3** as in the Admin Service account configuration: [Admin service account](#admin-service-account).
Assign the necessary service accounts client roles to the Task Management plugin service account based on the required access scopes, such as:
* **view-realm**
* **view-users**

The task management plugin service account requires a realm roles mapper to function correctly. Make sure to configure this to ensure proper operation.
In the end, you should have something similiar to this:

In the newly created task management plugin service account, select **Client Scopes**:
Click on `{your-client-name}-service-account` to open its settings.
Ensure the Mappers tab is selected within the dedicated client scope.
Click **Add mapper**. From the list of available mappers, select **User Realm Role**.

**Name**: Enter a descriptive name for the mapper to easily identify its purpose, for example `realm-roles`.
**Token Claim Name**: Set it to `roles`.
Disable **Add to ID token**.

Click **Save**.

Assign the `FLOWX_ROLE` service account realm role (used to grant permissions for starting processes).
The `FLOWX_ROLE` is used to grant permissions for starting processes in the FlowX.AI Designer platform. By default, this role is named `FLOWX_ROLE`, but its name can be changed from the application configuration of the Engine by setting the following environment variable:
`FLOWX_PROCESS_DEFAULTROLES`
### Process engine service account
The process engine requires a process engine service account to make direct calls to the Keycloak API.
This service account is also needed to be able to use [**Start Catch Event**](../../docs/building-blocks/node/message-events/message-catch-start-event) node.
**To create the process engine service account**:
* **1-3**: Follow the same steps as in the Admin Service Account Configuration: [Admin service account](#admin-service-account):
To assign the necessary service account roles:
This service account does not require service account client roles. It needs a realm role (to be able to start process instances) and realm-roles mapper.
3. Add the `FLOWX_ROLE` service account realm role (used to grant permissions for starting processes):

In the end, you should have something similiar to this:

4. Add a **realm-roles** mapper:

### Scheduler service account
This service account is used for [**Start Timer Event**](../../docs/building-blocks/node/timer-events/timer-start-event) node. The registered timers in the scheduler require sending a process start message to Kafka. Authentication is also necessary for this operation.
The configuration is similiar to the **process engine service account**:
* Assign the `FLOWX_ROLE` as service account role (this is needed to run process instances).

* Add a **realm-roles** mapper (as shown in the example for process-engine service account).

### Integration Designer service account
The Integration Designer service account is used by the integration designer microservice to interact securely with Keycloak, enabling it to manage various integrations within the FlowX.AI platform.
Steps to set up an Integration Designer service account:
* In Keycloak, navigate to **Clients** and select **Create client**.
* Enter a **Client ID** for your new client (e.g., `integration-designer-sa`).

* Enable **Client authentication** under access type.
* Enable **Service accounts roles** to allow the account to manage integrations.

* Skip the **Login settings** page.
* Click **Save** to apply the configuration.
### Runtime manager service account
The runtime manager service account is used by both Application Manager and Runtime Manager services to connect with Keycloak and perform export/import operations for builds, application versions, or other resource-specific tasks.
Steps to add a Runtime manager service account:
Navigate to **Clients** and select **Create client**.
Enter a **Client ID** for your new client.

* Enable **Client authentication** (access type).
* Disable **Standard flow**.
* Disable **Direct access grants**.
* Enable **Service accounts roles**.

After creating the client, scroll down in the **Settings** tab and configure additional settings - **Logout Settings**:
* **Backchannel Logout Session Required**: Toggle OFF.
* **Front Channel Logout**: Toggle OFF.

In the newly created client, navigate to the **Service accounts roles** tab.

Click **Assign role** and in the Filter field, select **Filter by realm roles**.

Make sure the service account has the necessary roles assigned—this is crucial for features like export/import of builds, application versions, resource files, and for invoking scenarios such as moving scheduled events from one build to another.
Assign the necessary roles to the admin service account based on the required access scopes, the following roles are required:
* `ROLE_TASK_MANAGER_HOOKS_ADMIN`
* `ROLE_TASK_MANAGER_VIEWS_ADMIN`
* `ROLE_DOCUMENT_TEMPLATES_ADMIN`
* `ROLE_ADMIN_MANAGE_PROCESS_ADMIN`
* `ROLE_INTEGRATION_SYSTEM_ADMIN`
* `ROLE_TASK_MANAGER_PROCESS_ALLOCATION_SETTINGS_ADMIN`
* `ROLE_CMS_CONTENT_ADMIN`
* `ROLE_MEDIA_LIBRARY_ADMIN`
* `ROLE_NOTIFICATION_TEMPLATES_ADMIN`
* `ROLE_INTEGRATION_WORKFLOW_ADMIN`
By following these steps, you will have a minimal Keycloak setup to manage users, roles, and applications efficiently. For more detailed configurations and advanced features, refer to the official Keycloak documentation.
# Configuring an IAM solution (EntraID)
Source: https://docs.flowx.ai/5.1/setup-guides/access-management/configuring-an-iam-solution-entra
This guide provides step-by-step instructions for configuring a minimal EntraId setup to manage users, roles, and applications efficiently.
## Overview
Microsoft Entra is Microsoft’s unified identity and access management solution designed to protect access to applications, resources, and user data across an organization’s environment. It provides a robust identity and access management (IAM) framework, allowing secure access control, role management, and integration of various applications under a single directory. Entra is crucial for managing multi-cloud and hybrid environments securely, enforcing policies, and supporting both on-premises and cloud resources.
## Prerequisites
* Application Administrator role
* Basic understanding of IAM and OIDC concepts
## Recommended EntraID setup
This setup configures Microsoft Entra to manage and secure access for FlowX.AI applications, handling user roles, custom attributes, and application-specific permissions. The setup covers these main components:
* Flowx-Web and Flowx-API are the core applications that act as entry points for the FlowX.AI platform. Additional applications like Flowx-Admin, Task Management Plugin, and Scheduler Core are registered to support specific functionalities.
* Each application registration includes settings for authentication, API permissions, and role assignments.
* Configures OAuth 2.0 and OIDC protocols, enabling secure access to resources.
* Roles and permissions are assigned through Entra, and single sign-on (SSO) is set up for ease of access across applications.
* Token Configuration includes defining claims (e.g., `email`, `groups`) for use in JWTs, which are used for secure identity validation across services.
* API Permissions are managed using Microsoft Graph, which governs access to resources like user profiles and groups within FlowX.AI.
Custom attribute extensions (e.g., `businessFilter`) allow organizations to apply additional filters or metadata to user and group profiles, configured and managed using Microsoft Graph CLI.
* Helm charts provide a structured setup for deploying FlowX.AI applications in containerized environments.
* Key values such as `tenant_id`, `client_id`, and `client_secret` are configured to support authentication and secure access.
JWT tokens are configured to carry user claims, roles, and custom attributes, ensuring that each token provides comprehensive identity details for FlowX.AI applications.
### Flowx-web app registration
The Flowx-web application serves as the main entry point for logging into FloWX Designer or container applications.
#### Appplication registration steps
To register the Flowx-web application, follow these steps:
1. Navigate to [https://portal.azure.com](https://portal.azure.com) and log in to your EntraID directory, which will host your FlowX.AI application registrations.
2. Go to **Microsoft EntraID > App registrations > New registration**

3. Enter a name for your application, then select **Accounts in this organizational directory only (Single tenant)** to limit access to your organization’s directory.

4. Click **Register** to complete the setup.
You will be redirected to the overview of the newly created app registration.
#### Authentication steps
Follow these steps to configure authentication for the Flowx-web application:
1. Go to the **Authentication** tab. Under **Platform configurations**, add a new platform by selecting **Single-page application (SPA)**. Then, set the **Redirect URIs** to point to the URIs of your Designer application.


2. Click **Configure** to save the platform settings.
3. Next, click **Add URI** to include an additional redirect URI, this time pointing to your container application's URI.


4. Click **Save** to confirm the redirect URI changes.
5. Scroll down to **Advanced Settings**. Under **Mobile and Desktop Applications**, toggle **Enable the following mobile and desktop flows** to **Yes**.

6. Click **Save** again to apply all changes.
#### API permissions
To configure the necessary API permissions, follow these steps:
1. Navigate the **API permissions** tab and click **Add a permission**.

2. In the permissions menu, select **Microsoft Graph** and then choose **Delegated permissions**.


3. Add the following permissions by selecting each option under **OpenId permissions**:
* email
* offline\_access
* openid
* profile

4. After adding these permissions, click **Add permissions** to confirm.
#### Token configuration
Configure the claims you want to include in the ID token.
1. Navigate to the **Token configuration** tab. Click **Add optional claim**, then select **Token type > Access**.
* Choose the following claims to include in the token:
* email
* family\_name
* given\_name
* preferred

2. Click **Add** to save these optional claims.

3. Next, add group claims to the token by clicking **Add groups claim**.
4. Select **All groups** and, under each token type, select **sAMAccountName** (this may differ for your specific organization).

#### Setting token expiration policies
For organizations that require specific control over token lifetimes, Microsoft Entra allows customization of token expiration policies.
1. **Create a Custom Token Lifetime Policy**: Define the desired expiration settings for access, ID, and refresh tokens in the policy.
2. **Assign the Policy to a Service Principal**: Apply the policy to your Flowx-web or Flowx-API app registrations to enforce token lifetime requirements.
For more details on creating and assigning policies for token expiration, refer to [**Microsoft's guide on configuring token lifetimes**](https://learn.microsoft.com/en-us/entra/identity-platform/configure-token-lifetimes#create-a-policy-and-assign-it-to-a-service-principal).
Adjusting token lifetimes can enhance security by reducing the window for unauthorized access.
***
### Flowx-API app registration
The Flowx-API application is used to configure the access token necessary for secure communication between the browser and all exposed FlowX APIs.
#### Appplication registration steps
To register the Flowx-API application, follow these steps:
1. Navigate to [https://portal.azure.com](https://portal.azure.com) and log in to your EntraID directory, which will host your FlowX.AI application registrations.
2. Go to **Microsoft EntraID > App registrations > New registration**

3. Enter a name for your application, then select **Accounts in this organizational directory only (Single tenant)** to limit access to your organization’s directory.

4. Click **Register** to complete the setup.
You will be redirected to the overview page of the newly created app registration.
#### API permissions
To configure the necessary API permissions, follow these steps:
1. Go to the **API permissions** tab and click **Add a permission**.

2. In the permissions menu, select **Microsoft Graph** and then choose **Delegated permissions**.


3. Add the following permissions by selecting each option under **OpenId permissions**:
* email
* offline\_access
* openid
* profile

4. After adding these permissions, click **Add permissions** to confirm.
#### Token configuration
Configure the claims you want to include in the ID token.
1. Navigate to the **Token configuration** tab. Click **Add optional claim**, then select **Token type > Access**.
* Choose the following claims to include in the token:
* email
* family\_name
* given\_name
* preferred

2. Click **Add** to save these optional claims.
3. Next, add group claims to the token by clicking **Add groups claim**.
4. Select **All groups** and, under each token type, select **sAMAccountName** (this may differ for your specific organization).

#### Expose an API
To configure the API exposure and define scopes:
1. In the **Expose an API** section, click **Add** under **Application ID URI**. It’s recommended to use the application’s name for consistency.

2. Click **Save**.
3. Under **Scopes defined by this API**, click **Add a scope** and configure it as follows:
* **Scope name**: `FlowxAI.ReadWrite.All`
* **Who can consent**: Admins and users
* **Admin consent display name**: Full API Access for FlowX.AI Platform
* **Admin consent description**: Grants this application full access to all available APIs, allowing it to read, write, and manage resources across the FlowX.AI platform.
* **User consent display name**: Same as admin consent display name
* **User consent description**: Same as admin consent description
* **State**: Enabled

This scope is not used directly to grant permissions. Instead, it is included in login requests made from a web client. When a client makes a login request with this scope, Entra ID uses it to identify and provide the appropriate access token configured here, ensuring secure access.
4. Under **Authorized client applications**, click **Add a client application**. Add each of the following client applications, selecting the `FlowxAI.ReadWrite.All` scope:
* flowx-web
* flowx-admin
* flowx-process-engine
* flowx-integration-designer
* flowx-task-management-plugin
* flowx-scheduler-core

Client IDs for these applications can be found on the **Overview** page of each respective application. If some applications are not created yet, you can return and add them to this section after their creation.

#### Application roles
To configure application roles, follow these steps:
1. Navigate to **App roles** and click **Create app role**.
2. Select **Allowed member types** select **Both (Users/Groups + Applications)**.

3. Complete the role details with the following information:
* Display name: The name displayed for the role.
* Value: A unique identifier for the role within applications.
* Description: A description of the role’s purpose.
App role list should be the same as the Keycloak setup. A list of default roles can be found [**here**](default-roles).
### Other applications registration
The following FlowX.AI applications require similar steps for registration:
* Flowx-Admin
* Flowx-Process-Engine
* Flowx-Integration-designer
* Flowx-Task-Management-Plugin
* Flowx-Scheduler-Core
***
### Flowx-Admin app registration
1. **Create a New Application Registration**
* Go to [https://portal.azure.com](https://portal.azure.com) and log in to your Entra ID directory where you will host FlowX.AI application registrations.
2. **Register the Application**
* Navigate to **Microsoft Entra ID > App registrations > New registration**.
* Set the application name and select **Accounts in this organizational directory only (Single tenant)**.
* Click **Register**. You will be redirected to the overview page of the newly created app registration.
You will now see the overview for your new app registration.
#### Configure client secrets
1. Navigate to **Certificates & secrets**.
2. Under **Client secrets**, click **New client secret**.
3. Set a **description** and choose an **expiration time** for the client secret, then click **Add**.

Copy the generated client secret value. This will be used to configure `SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_MAINIDENTITY_CLIENT_SECRET`.

#### Configure API permissions
1. Go to the **API permissions** tab and click **Add a permission**.
2. Select **Microsoft Graph > Application permissions**.
3. Add the following permissions for **flowx-admin**:
* **Application.Read.All**

If you have admin privileges, you can click **Grant admin consent** to apply these permissions. If not, contact your tenant administrator to grant consent.

***
### Flowx-Process-Engine app registration
Follow the same **Application Registration Steps** and **Configure Client Secrets** steps as above.
#### Configure API permissions
* **API Permissions**: No additional permissions required.
***
### Flowx-Integration-Designer app registration
Follow the same **Application Registration Steps** and **Configure Client Secrets** steps as above.
#### Configure API permissions
* **API Permissions**: No additional permissions required.
***
### Flowx-Task-Management-Plugin app registration
Follow the same **Application Registration Steps** and **Configure Client Secrets** steps as above.
#### Configure API permissions
1. Go to the **API permissions** tab and click **Add a permission**.
2. Select **Microsoft Graph > Application permissions**.
3. Add the following permissions for **flowx-task-management-plugin**:
* **Application.Read.All**
* **Group.Read.All**
* **User.Read.All**
If you have admin privileges, you can click **Grant admin consent** to apply these permissions. If not, contact your tenant administrator to grant consent.
***
### Flowx-Scheduler-Core app registration
Follow the same **Application Registration Steps** and **Configure Client Secrets** steps as above.
#### Configure API permissions
* **API Permissions**: No additional permissions required.
***
### Assigning a role to a user/group
To assign a role to a user or group for your FlowX.AI applications, follow these steps:
1. Go to [https://portal.azure.com](https://portal.azure.com) and log in to your Entra ID directory that hosts your FlowX.AI application registrations.
2. Navigate to **Microsoft Entra ID > Enterprise applications** and search for your **flowx-api** app registration name.\
(An enterprise application with the same name was automatically created when the app registration was set up.)


3. Under **Users and groups**, select **Add user/group**.

* Choose the user or group you want to assign.

* Select the appropriate role from the available options.
4. Click **Assign** to complete the role assignment.

It is recommended to provide roles through group membership for easier management and scalability.
***
### Adding custom attributes
Using Microsoft Graph CLI, you can add custom attributes such as `businessFilter`.
For more information about Microsoft Graph CLI, check the following docs:
#### Prerequisites
* [Install the Microsoft Graph CLI](https://learn.microsoft.com/en-us/graph/cli/installation?tabs=macos).
#### Create an attribute extension property
Create an Attribute Extension Property on the flowx-api app registration:
1. Log in to Microsoft Graph CLI with the necessary permissions:
```bash theme={"system"}
$ mgc login --scopes Directory.Read.All
```
You can add additional permissions by repeating the mgc login command with the new permission scopes.
2. Create the attribute extension property by running the following command. Replace `` with the object ID of your flowx-api application:
```bash theme={"system"}
$ mgc applications extension-properties create --application-id --body '
{
"dataType": "String",
"name": "businessFilter",
"targetObjects": [
"User", "Group"
]
}'
```
#### Retrieve the attribute extension name
To confirm the attribute extension name, use the command below. This will output the exact name of the created extension property.
```bash theme={"system"}
$ mgc applications extension-properties list --application-id --select name
```
Example output:
```json theme={"system"}
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#applications(\u0027\u0027)/extensionProperties(name)",
"value": [
{
"name": "extension_ec959542898b42bcb6922e7d3f9df282_businessFilter"
}
]
}
```
#### Configure token claim
1. Go to the **flowx-api** app registration in the Azure portal.
2. Navigate to **Token configuration**.
3. Click **Add optional claim**.
* Select **Token type** as **Access**.
* Check the box for `extn.businessFilter`.
4. Click Add to save the changes.

#### Assign attribute extension to a user
1. Log in with the required permissions to modify user attributes:
```bash theme={"system"}
$ mgc login --scopes User.ReadWrite.All
```
2. Assign the `businessFilter` attribute to a user by running the command below. Replace `` with the user's `object ID`:
```bash theme={"system"}
$ mgc users patch --user-id --body '
{
"extension_ec959542898b42bcb6922e7d3f9df282_businessFilter": "docs"
}'
```
#### Assign attribute extension to a group
Follow similar steps to assign the `businessFilter` attribute to a group. Replace `` with the group’s `object ID` and use the following command:
1. Log in with the required permissions to modify group attributes:
```bash theme={"system"}
$ mgc login --scopes User.ReadWrite.All
```
2. Assign the custom attribute by the command below, replacing `` with the user’s object ID. The businessFilter attribute is set to "docs" in this example.
```bash theme={"system"}
$ mgc groups patch --group-id --body '
{
"extension_ec959542898b42bcb6922e7d3f9df282_businessFilter": "docs"
}'
```
***
## Example JWT token for user
To verify that the custom attributes and roles have been correctly applied, you can inspect a sample JWT token issued to a user. This token will include standard claims along with any custom attributes and roles configured in your Entra ID setup.
### Steps to retrieve a JWT token
1. **Login to the FlowX.AI Application**\
Log in to the FlowX.AI application as the user for whom the JWT token needs to be inspected.
2. **Retrieve the JWT Token**\
After logging in, retrieve the JWT token by one of the following methods:
* Using browser developer tools to inspect network requests (look for requests with an `Authorization` header).
* Accessing a token endpoint if available, using a tool like Postman.
3. **Decode the JWT Token**\
Use a JWT decoding tool, such as [jwt.io](https://jwt.io/), to decode and inspect the token.
***
### Sample JWT token structure
Below is an example JWT token structure that includes key claims, custom attributes, and roles:
```json theme={"system"}
{
"aud": "api://rd-p-example-flowx-api",
"iss": "https://sts.windows.net/673cac6c-3d63-40cf-a43f-07408dd91072/",
"iat": 1730720856,
"nbf": 1730720856,
"exp": 1730726397,
"acr": "1",
"aio": "ATQAy/8YAAAAj3ca5D/znraYUsif7RVc7TmWJPj66tqsUon0oon1xPamN1W7wN070R1JwaCwUQyQ",
"amr": [
"pwd"
],
"appid": "673b5314-a9c8-40ec-beb5-636fa9a781b4",
"appidacr": "0",
"email": "john.doe@flowx.ai",
"extn.businessFilter": [
"docs"
],
"family_name": "Doe",
"given_name": "John",
"groups": [
"ef731a0d-b44f-44da-bd78-67363c901bb1",
"db856713-0dfa-4d3d-aefa-bbb598257084",
"4336202b-6fc4-4132-afab-7f6573993325",
"5dc0b52e-823b-4ce9-b3e4-b3070912a4ef",
"ce006d40-555f-4247-890b-1053fa3cb172",
"291ac248-4e29-4c91-8e1d-19cbeec64eb8",
"b82dc551-f3f0-4d28-aaf0-a0a74fe3b3e3",
"42b39b5f-7545-48be-88d1-6e88716236db",
"cc0f776a-1cb2-4b8c-a472-8e1393764442",
"6eac9487-e04c-41e6-81ce-364f09c22bbf",
"01c30789-6862-4085-b5c4-f0cb02fb41b0",
"75ac188b-61c4-4aa9-ad7e-af1d543e199a",
"e726fda5-79f0-440b-b86c-8a9820d14d2e",
"259980bb-e881-4d93-9912-d2562441a257",
"9146edd4-6194-4487-b524-79956635f514",
"ce046ce2-6ef8-40f2-9f4e-a70f1ca14ecf",
"62d1f9f5-858c-43e2-af92-94bcc575681b",
"69df5ff6-1da9-49d1-9871-b7e62de2b212",
"043d25fc-a507-47ee-83e3-1d31ce0d9b35"
],
"ipaddr": "86.126.6.183",
"name": "Jonh Doe",
"oid": "61159071-3fd6-4373-8aec-77ee58675776",
"preferred_username": "john.doe@flowx.ai",
"rh": "1.AYEAbKw8Z2M9z0CkPwdAjdkQckKVleyLibxCtpIufT-d8oKBAAeBAA.",
"roles": [
"ROLE_DOCUMENT_TEMPLATES_IMPORT",
"FLOWX_ROLE",
"ROLE_TASK_MANAGER_OOO_ADMIN",
"ROLE_ADMIN_MANAGE_CONFIG_IMPORT",
"ROLE_INTEGRATION_SYSTEM_READ",
"ROLE_INTEGRATION_WORKFLOW_READ_RESTRICTED",
"ROLE_ADMIN_MANAGE_PROCESS_ADMIN",
"ROLE_MANAGE_NOTIFICATIONS_ADMIN",
"ROLE_ADMIN_MANAGE_INTEGRATIONS_EDIT",
"ROLE_TASK_MANAGER_HOOKS_IMPORT",
"ROLE_THEMES_READ",
"ROLE_ENGINE_MANAGE_PROCESS_EDIT",
"ROLE_TASK_MANAGER_PROCESS_ALLOCATION_SETTINGS_ADMIN",
"ROLE_AI_OPTIMIZER_EDIT",
"ROLE_ENGINE_MANAGE_INSTANCE_READ",
"ROLE_ADMIN_MANAGE_INTEGRATIONS_ADMIN",
"ROLE_ADMIN_MANAGE_PROCESS_IMPORT",
"ROLE_COPO_TELLER",
"ROLE_CMS_CONTENT_READ",
"ROLE_CMS_CONTENT_IMPORT",
"ROLE_INTEGRATION_WORKFLOW_ADMIN",
"ROLE_AI_ARCHITECT_EDIT",
"ROLE_TASK_MANAGER_HOOKS_READ",
"ROLE_AI_WRITER_EDIT",
"ROLE_TASK_MANAGER_HOOKS_ADMIN",
"ROLE_MEDIA_LIBRARY_EDIT",
"ROLE_CMS_TAXONOMIES_READ",
"ROLE_AI_INSPECTOR_EDIT",
"FLOWX_FRONTOFFICE",
"ROLE_START_EXTERNAL",
"ROLE_DOCUMENT_TEMPLATES_READ",
"ROLE_TASK_MANAGER_PROCESS_ALLOCATION_SETTINGS_IMPORT",
"VIEW_INSTANCES",
"ROLE_ADMIN_MANAGE_INTEGRATIONS_IMPORT",
"ROLE_ADMIN_MANAGE_USERS_READ",
"ROLE_THEMES_ADMIN",
"ROLE_ADMIN_MANAGE_PLATFORM_READ",
"ROLE_TASK_MANAGER_OOO_EDIT",
"ROLE_CMS_TAXONOMIES_EDIT",
"ROLE_THEMES_IMPORT",
"ROLE_AI_DEVELOPER_EDIT",
"ROLE_MANAGE_NOTIFICATIONS_READ",
"ROLE_INTEGRATION_SYSTEM_EDIT",
"ROLE_MANAGE_NOTIFICATIONS_SEND",
"FLOWX_ADMIN",
"ROLE_INTEGRATION_READ",
"FLOWX_BACKOFFICE",
"ROLE_DOCUMENT_TEMPLATES_EDIT",
"ROLE_MEDIA_LIBRARY_IMPORT",
"ROLE_AI_ASSISTANT_READ",
"ROLE_ADMIN_MANAGE_CONFIG_EDIT",
"ROLE_CMS_TAXONOMIES_IMPORT",
"ROLE_ADMIN_MANAGE_CONFIG_ADMIN",
"ROLE_TASK_MANAGER_TASKS_READ",
"ROLE_DOCUMENT_TEMPLATES_ADMIN",
"ROLE_INTEGRATION_WORKFLOW_READ",
"ROLE_COPO_VIEWER",
"ROLE_MEDIA_LIBRARY_ADMIN",
"ROLE_NOTIFICATION_TEMPLATES_EDIT",
"ROLE_ADMIN_MANAGE_PROCESS_READ",
"ROLE_AI_INTEGRATOR_EDIT",
"ROLE_AI_SUPERVISOR_EDIT",
"ROLE_INTEGRATION_WORKFLOW_EDIT",
"ROLE_CMS_CONTENT_ADMIN",
"ROLE_CMS_CONTENT_EDIT",
"FLOWX_SUPERVISOR",
"ROLE_ADMIN_MANAGE_CONFIG_READ",
"ROLE_TASK_MANAGER_OOO_READ",
"ROLE_TASK_MANAGER_PROCESS_ALLOCATION_SETTINGS_EDIT",
"ROLE_INTEGRATION_ADMIN",
"ROLE_NOTIFICATION_TEMPLATES_READ",
"ROLE_AI_AUDITOR_EDIT",
"ROLE_ENGINE_MANAGE_INSTANCE_ADMIN",
"ROLE_INTEGRATION_SYSTEM_ADMIN",
"ROLE_ADMIN_MANAGE_PROCESS_EDIT",
"ROLE_INTEGRATION_EDIT",
"ROLE_AI_DESIGNER_EDIT",
"ROLE_TASK_MANAGER_HOOKS_EDIT",
"ROLE_AI_COMMAND_READ",
"ROLE_CMS_TAXONOMIES_ADMIN",
"ROLE_ADMIN_MANAGE_USERS_ADMIN",
"ROLE_AI_ANALYST_EDIT",
"ROLE_TASK_MANAGER_VIEWS_ADMIN",
"ROLE_ADMIN_MANAGE_PLATFORM_ADMIN",
"ROLE_TASK_MANAGER_PROCESS_ALLOCATION_SETTINGS_READ",
"ROLE_AI_STRATEGIST_EDIT",
"ROLE_THEMES_EDIT",
"ROLE_NOTIFICATION_TEMPLATES_ADMIN",
"ROLE_INTEGRATION_IMPORT",
"ROLE_NOTIFICATION_TEMPLATES_IMPORT",
"ROLE_ADMIN_MANAGE_INTEGRATIONS_READ",
"ROLE_ADMIN_MANAGE_USERS_EDIT",
"ROLE_MEDIA_LIBRARY_READ"
],
"scp": "FlowxAI.ReadWrite.All",
"sub": "tMG9A1npM9hK89AV9rdUvTAKVlli3oLkyI1E8F7bV5Y",
"tid": "673cac6c-3d63-40cf-a43f-07408dd91072",
"unique_name": "john.doe@flowx.ai",
"upn": "john.doe@flowx.ai",
"uti": "v3igRE_kEUqZC4nbXII3AA",
"ver": "1.0",
"wids": [
"9b895d92-2cd3-44c7-9d02-a6ac2d5ea5c3",
"fe930be7-5e62-47db-91af-98c3a49a38b1",
"e3973bdf-4987-49ae-837a-ba8e231c7286",
"158c047a-c907-4556-b7ef-446551a6b5f7",
"e8611ab8-c189-46e8-94e1-60213ab1f814",
"b79fbf4d-3ef9-4689-8143-76b194e85509"
]
}
```
## Configure helm charts
This section provides details on configuring Helm charts for FlowX.AI applications, including where to retrieve required values and setting environment variables for different application components.
***
### Where to get the values
* **tenant\_id**: The unique identifier for your Entra ID tenant.

* **client\_id**: The client ID for the specific FlowX.AI application.

* **client\_secret**: The client secret generated during app registration (only visible at creation).

***
### Helm chart values
These configurations are required for different FlowX.AI application components. Substitute ``, ``, and `` with your specific values.
***
#### Designer
For the Designer component, use the following settings:
```yaml theme={"system"}
SKIP_ISSUER_CHECK: true
STRICT_DISCOVERY_DOCUMENT_VALIDATION: false
KEYCLOAK_ISSUER: https://login.microsoftonline.com//v2.0
KEYCLOAK_CLIENT_ID:
KEYCLOAK_SCOPES: "openid profile email offline_access api://rd-e-example-flowx-api/FlowxAI.ReadWrite.All"
KEYCLOAK_REDIRECT_URI: https://flowx.example.az1.cloud.flowxai.dev
```
#### All Java application
```yaml theme={"system"}
SECURITY_TYPE: jwt-public-key
SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_ISSUER_URI: https://sts.windows.net//
SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_JWK_SET_URI: https://login.microsoftonline.com//discovery/v2.0/keys
```
#### Java applications with a Service Principal
These settings apply to Java applications that require a service principal, such as Admin, Integration Designer, Process Engine, Scheduler Core, and Task Management Plugin.
```yaml theme={"system"}
SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_MAINAUTHPROVIDER_TOKEN_URI: https://login.microsoftonline.com//oauth2/v2.0/token
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_MAINIDENTITY_CLIENT_ID:
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_MAINIDENTITY_CLIENT_SECRET:
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_MAINIDENTITY_SCOPE: api://rd-p-example-flowx-api/.default
```
#### Java applications with access to Microsoft Graph API
The following configuration is required for Java applications that need access to the Microsoft Graph API, such as Admin and Task Management Plugin.
```yaml theme={"system"}
OPENID_PROVIDER: entra
OPENID_ENTRA_TENANT_ID:
OPENID_ENTRA_PRINCIPAL_ID:
```
# Permission reference guide
Source: https://docs.flowx.ai/5.1/setup-guides/access-management/permission-reference-guide
Technical reference for FlowX Designer permissions, naming conventions, and UI mappings
**Documentation Navigation:**
* [Workspaces Access Rights](/5.1/setup-guides/access-management/workspaces-access-rights) - Role overview and concepts
* [Complete Permissions Matrix](/5.1/setup-guides/access-management/roles-permissions-matrix) - Detailed permission specifications
* **Permission Reference Guide** (Current) - Technical implementation details
* [Role Selection Guide](/5.1/setup-guides/access-management/role-selection-guide) - Practical scenarios and best practices
This guide provides technical reference information for FlowX Designer permissions, including naming conventions, UI element mappings, and implementation details. Use this guide when you need to understand how permissions work at a technical level.
## Permission naming conventions
### Naming structure
FlowX permissions follow a consistent naming pattern that helps identify scope and purpose:
```
[scope_prefix]_[resource]_[operation]
```
### Scope prefixes
| Prefix | Scope Level | Example Permissions | Usage |
| -------- | ----------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------- |
| `org_` | Organization | `org_admin` | Cross-workspace administration and system-level operations |
| `wks_` | Workspace | `wks_users_read` • `wks_builds_create` • `wks_font_delete` | Workspace-level resources that apply across all projects in the workspace |
| `proj_` | Project | `proj_mediafile_read` • `proj_data_type_edit` | Project-specific resources when disambiguation from workspace resources is needed |
| *(none)* | Context-dependent | `process_read` • `workflow_edit` • `enum_create` | Project-level resources where context is clear from usage |
**Why some project permissions lack the `proj_` prefix:**
Most project-level configuration resources (processes, workflows, enumerations, etc.) don't use the `proj_` prefix because:
* Their context is always project-scoped
* There's no workspace-level equivalent that would create naming conflicts
* Shorter names improve readability
The `proj_` prefix is used when:
* A workspace-level equivalent exists (e.g., `proj_mediafile_*` vs `mediafile_*` for workspace media)
* Disambiguation is necessary (e.g., `proj_data_type_*` for project data model)
### Operation suffixes
| Suffix | Description | Typical Actions | Example Permissions |
| --------- | ------------------------ | ---------------------------------------------------------------- | ------------------------------------------------------------------------ |
| `_read` | View and access resource | • View lists • See details • Export data • Access audit logs | `process_read` • `wks_users_read` • `theme_read` |
| `_edit` | Modify existing resource | • Update properties • Change configurations • Save modifications | `workflow_edit` • `wks_active_policy_edit` • `enum_edit` |
| `_create` | Create new instances | • Add new items • Import data • Duplicate existing items | `project_create` • `wks_builds_create` • `notification_templates_create` |
| `_delete` | Remove resource | • Delete items • Remove from system | `stage_delete` • `wks_groups_delete` • `process_delete` |
| `_admin` | Administrative control | • Grant/revoke access • Manage permissions • Full governance | `projects_admin` • `org_admin` |
### Special naming cases
When a resource property is named "id" or "url" (case insensitive), it must be prefixed with `userDefined:` to avoid conflicts with system properties.
**Examples:**
* `userDefined:URL` - For a custom URL property
* `userDefined:id` - For a custom ID field
This applies when working with:
* Database properties
* Configuration parameters
* Custom data model fields
**Date Properties** are split into multiple permission fields:
```
date:`{property_name}`:start
date:`{property_name}`:end (optional)
date:`{property_name}`:is_datetime (0 or 1)
```
**Place Properties** are split into multiple fields:
```
place:`{property_name}`:name
place:`{property_name}`:address
place:`{property_name}`:latitude
place:`{property_name}`:longitude
place:`{property_name}`:google_place_id (optional)
```
These expanded formats provide granular control over complex property types.
Checkbox properties use special string values instead of boolean:
* `__YES__` for checked
* `__NO__` for unchecked
**Example:**
```json theme={"system"}
{
"Is Complete": "__YES__",
"Requires Approval": "__NO__"
}
```
Number properties must use JavaScript number format, not strings:
**Correct:**
```json theme={"system"}
{"Priority": 5}
```
**Incorrect:**
```json theme={"system"}
{"Priority": "5"}
```
Substitution tags use the enumeration permission set:
* `enum_read`
* `enum_edit`
* `enum_create`
* `enum_delete`
There are no separate `substitution_tags_*` permissions - enumeration permissions cover both resource types.
AI agent permissions deviate from the standard pattern:
* Only `aiagent_edit` exists
* No separate `_read`, `_create`, or `_delete` permissions
* The edit permission grants access to all AI agent functionality (developer, analyst, designer)
### Permission examples by category
| Permission | Scope | Resource | Operation |
| ----------- | ------------ | -------------- | --------------- |
| `org_admin` | Organization | Administration | Admin (special) |
Organization-level permissions are limited in FlowX 5.0. Most administration occurs at workspace level.
| Permission | Scope | Resource | Operation |
| --------------------------------- | --------- | ---------------------- | --------- |
| `wks_users_read` | Workspace | Users | Read |
| `wks_users_create` | Workspace | Users | Create |
| `wks_groups_edit` | Workspace | Groups | Edit |
| `wks_roles_delete` | Workspace | Roles | Delete |
| `wks_builds_create` | Workspace | Builds | Create |
| `wks_active_policy_edit` | Workspace | Active Policy | Edit |
| `wks_config_param_overrides_read` | Workspace | Config Param Overrides | Read |
| `wks_process_instances_edit` | Workspace | Process Instances | Edit |
| `wks_platform_status_read` | Workspace | Platform Status | Read |
| `wks_env_info_edit` | Workspace | Environment Info | Edit |
| `wks_audit_log_read` | Workspace | Audit Log | Read |
| `mediafile_create` | Workspace | Media Files | Create |
| `theme_edit` | Workspace | Themes | Edit |
| `wks_font_delete` | Workspace | Fonts | Delete |
| Permission | Scope | Resource | Operation |
| ------------------------------- | ------- | ----------------------- | --------------- |
| `project_read` | Project | Project/Library | Read |
| `project_owner` | Project | Project/Library | Owner (special) |
| `projects_admin` | Project | Projects | Admin |
| `process_edit` | Project | Processes | Edit |
| `proj_data_type_create` | Project | Data Model | Create |
| `enum_delete` | Project | Enumerations | Delete |
| `proj_mediafile_read` | Project | Media Library | Read |
| `notification_templates_create` | Project | Notification Templates | Create |
| `document_templates_edit` | Project | Document Templates | Edit |
| `task_view_read` | Project | Views | Read |
| `stage_create` | Project | Stages | Create |
| `allocation_rule_edit` | Project | Allocation Rules | Edit |
| `data_source_delete` | Project | Data Sources | Delete |
| `workflow_read` | Project | Workflows | Read |
| `reusable_ui_create` | Project | Reusable UI | Create |
| `reusable_br_edit` | Project | Reusable Business Rules | Edit |
| `dependency_read` | Project | Dependencies | Read |
| `config_param_create` | Project | Config Parameters | Create |
| `version_edit` | Project | Version Settings | Edit |
| `aiagent_edit` | Project | AI Agents | Edit (special) |
## Permission-to-UI action mapping
This section shows how permissions control specific UI elements and actions in FlowX Designer. When a user lacks a permission, the corresponding UI element is hidden or disabled.
### Understanding UI behavior
**Read Permission Behavior:**
* Read permission must be explicitly declared
* Not automatically implied by other permissions
* Exception: `workspace_read` is auto-included with any workspace permission
**UI Display Rules:**
* Missing permission = Hidden UI element
* Read-only permission = View mode with disabled controls
* No error messages shown for hidden elements
### Workspace level permissions
#### Theme Permissions (`theme_*`)
| Permission | UI Actions Enabled | UI Elements |
| -------------- | -------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `theme_read` | • View themes • Export theme | • Theme entry in main menu • Theme list in read-only mode • Export button |
| `theme_edit` | • Modify theme settings • Set as default • Configure theme sections • Copy from other themes | • Configure in contextual menu • Set as default button • Save button • All edit controls in theme sections • Copy from actions |
| `theme_create` | • Create new theme • Import theme • Duplicate existing theme | • Add button • Import action • Duplicate in contextual menu |
| `theme_delete` | • Remove theme | • Delete in contextual menu |
When user has only `theme_read`, the theme page displays in read-only mode with all edit controls disabled.
#### Font Permissions (`wks_font_*`)
| Permission | UI Actions Enabled | UI Elements |
| ----------------- | ----------------------------------------- | ------------------------------------------------------------------------- |
| `wks_font_read` | • View font list • Export fonts | • Fonts entry in main menu • Font list in read-only mode • Export actions |
| `wks_font_create` | • Upload new fonts • Import font packages | • Add button • Import action |
| `wks_font_delete` | • Remove fonts | • Delete icon in contextual menu |
Font editing is implicit with create permission - fonts are replaced rather than edited.
#### Media Library Permissions (`mediafile_*`)
| Permission | UI Actions Enabled | UI Elements |
| ------------------ | --------------------------------------------- | ---------------------------------------------------------------------------------------- |
| `mediafile_read` | • View media assets • Export media files | • Global media library entry in main menu • Media list in read-only mode • Export button |
| `mediafile_edit` | • Update media metadata • Replace media files | • Edit controls for media properties |
| `mediafile_create` | • Upload new media • Import media packages | • Add button • Import action |
| `mediafile_delete` | • Remove media files | • Delete in contextual menu |
#### User Management Permissions (`wks_users_*`)
| Permission | UI Actions Enabled | UI Elements |
| ------------------ | -------------------------------------------------- | -------------------------------------------------------- |
| `wks_users_read` | • View workspace users • See user details | • Users entry in main menu • User list in read-only mode |
| `wks_users_edit` | • Modify user workspace access • Update user roles | • Edit controls for user properties |
| `wks_users_create` | • Add users to workspace • Grant workspace access | • Add button • Grant access action |
| `wks_users_delete` | • Remove workspace access | • Delete in contextual menu |
#### Group Management Permissions (`wks_groups_*`)
| Permission | UI Actions Enabled | UI Elements |
| ------------------- | --------------------------------------------------- | ---------------------------------------------------------- |
| `wks_groups_read` | • View workspace groups • See group members | • Groups entry in main menu • Group list in read-only mode |
| `wks_groups_edit` | • Modify group membership • Update group properties | • Edit controls for groups • Add/remove member actions |
| `wks_groups_create` | • Create new groups | • Add button |
| `wks_groups_delete` | • Remove groups | • Delete in contextual menu |
#### Role Management Permissions (`wks_roles_*`)
| Permission | UI Actions Enabled | UI Elements |
| ------------------ | -------------------------------------------------- | -------------------------------------------------------- |
| `wks_roles_read` | • View workspace roles • See role permissions | • Roles entry in main menu • Role list in read-only mode |
| `wks_roles_edit` | • Modify role permissions • Update role properties | • Edit controls for roles • Permission checkboxes |
| `wks_roles_create` | • Create custom roles • Duplicate existing roles | • Add button • Duplicate action |
| `wks_roles_delete` | • Remove custom roles | • Delete in contextual menu |
Predefined roles (`workspace_admin`, `workspace_user`, etc.) cannot be edited or deleted regardless of permissions.
#### Build Permissions (`wks_builds_*`)
| Permission | UI Actions Enabled | UI Elements |
| ------------------- | ----------------------------------------------------- | --------------------------------------------------------------- |
| `wks_builds_read` | • View all workspace builds • See build details | • Runtime > Builds menu entry • Build list for all libraries |
| `wks_builds_create` | • Import build packages • Create builds from versions | • Import build button • Create build action on library versions |
`wks_builds_read` allows viewing builds from **all** libraries in the workspace, not just accessible projects.
#### Active Policy Permissions (`wks_active_policy_*`)
| Permission | UI Actions Enabled | UI Elements |
| ------------------------ | ---------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `wks_active_policy_read` | • View active policies • See policy configurations • Access audit logs | • Active policy entry in Runtime tab • Policy page in read-only mode • Type and branch selectors disabled • Audit logs in contextual menu |
| `wks_active_policy_edit` | • Select branch/build • Update active policy • Change policy type | • Save button enabled • Branch/build dropdown selectors enabled • Policy type selector enabled |
#### Configuration Parameter Overrides (`wks_config_param_overrides_*`)
| Permission | UI Actions Enabled | UI Elements |
| ----------------------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `wks_config_param_overrides_read` | • View parameter overrides • See override values • Access audit logs | • Configuration parameters overrides menu entry • Override list in read-only mode • View icon on rows • Audit log in contextual menu |
| `wks_config_param_overrides_create` | • Add new overrides | • Add configuration parameter override button |
| `wks_config_param_overrides_edit` | • Modify override values | • Edit icon on table rows • Update override modal |
| `wks_config_param_overrides_delete` | • Remove overrides | • Delete in contextual menu |
### Project level permissions
#### Project Permissions (`project_*`)
| Permission | UI Actions Enabled | UI Elements |
| ---------------- | -------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| `project_read` | • View project details • Copy project UUID • Access audit logs | • Configure (shown as "View") in contextual menu • Copy UUID action • Audit log access • Project details in read-only mode |
| `project_edit` | • Modify project settings • Configure project properties | • Configure in contextual menu • Edit controls enabled • Save button active |
| `project_create` | • Create new projects • Import project versions | • Add button • Import version action |
| `project_delete` | • Remove projects | • Delete in contextual menu |
`project_create` is granted at workspace level. Users create projects within their workspace, not within other projects.
#### Process Permissions (`process_*`)
| Permission | UI Actions Enabled | UI Elements |
| ---------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `process_read` | • View process list • Export processes • Copy to another project • Access audit logs | • Processes list • Export all button • Export in contextual menu • Copy to another project/library action • Audit logs access • Read-only process view |
| `process_edit` | • Modify process definitions • Configure process details • Edit process settings • Clear cache | • Configure details in contextual menu • Edit settings action • Save button • All edit controls on process designer • Clear cache action |
| `process_create` | • Create new processes • Import processes • Duplicate processes | • Add button • Import from ZIP (bulk) • Duplicate in contextual menu |
| `process_delete` | • Remove processes | • Delete in contextual menu |
When user has only `process_read`, the process designer opens in read-only mode with all edit controls disabled.
#### Enumeration Permissions (`enum_*`)
| Permission | UI Actions Enabled | UI Elements |
| ------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `enum_read` | • View enumerations • Export enumerations • See enum values | • Enumerations entry in Project menu • Export to ZIP button • Export to CSV button • Read icon on enum rows • Read-only enum view |
| `enum_edit` | • Modify enum values • Configure enum settings • Add enum values • Create child enums • Remove enum values | • Edit icon on enum rows (replaces read icon) • Configure in contextual menu • Edit icon on enum value rows • Create child enum icon • Delete icon on enum value rows • Add value button |
| `enum_create` | • Create new enumerations • Import enumerations • Duplicate enumerations | • Add button • Import from ZIP • Import from CSV • Duplicate in contextual menu |
| `enum_delete` | • Remove enumerations | • Delete in contextual menu |
The read icon automatically changes to an edit icon when the user has `enum_edit` permission.
#### Workflow Permissions (`workflow_*`)
| Permission | UI Actions Enabled | UI Elements |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `workflow_read` | • View workflows • Export workflows | • Workflows entry in Project menu • Export all (bulk) • Export in contextual menu |
| `workflow_edit` | • Modify workflow logic • Configure workflow settings • Edit workflow details • Clear cache • Delete condition nodes • Save code changes | • Configure in contextual menu • Edit details in resource page contextual menu • Clear cache in resource page contextual menu • Delete icon on Condition type nodes • Save changes in expanded code editor |
| `workflow_create` | • Create new workflows • Import workflows • Duplicate workflows | • Add button • Import from ZIP • Duplicate in contextual menu • Duplicate in resource page contextual menu |
| `workflow_delete` | • Remove workflows | • Delete in contextual menu |
### Permission dependency rules
**Workspace Level:**
`workspace_read` - Automatically included when any other workspace permission is granted. Required for basic workspace visibility and validation.
`workspace_edit` - Should be included when granting any workspace edit permission. Provides general workspace modification context.
**Project Level:**
`project_read` - Automatically sent to backend when any project-level permission is selected, even though not displayed in UI as selectable. Required for basic project access validation.
**Rule:** Read permissions establish the foundation for all other permissions on a resource.
## Groups technical reference
Understanding how groups work at a technical level helps administrators implement effective access control strategies.
### System-managed groups
#### Everyone in workspace group
**Group Identifier:** `all_users_[workspace_name]`
**Display Name:** `Everyone from `
**Automatic Behaviors:**
* Created during workspace provisioning via database trigger
* Membership managed through workspace access events
* Cannot be manually modified via UI or API
* Pre-populated in project access grant interfaces
* Included in user/group search result sets
**Database Relationships:**
```
workspace (1) ←→ (1) all_users_group
user (N) ←→ (M) workspace_access
workspace_access → triggers → all_users_group_membership
```
**Use Cases:**
* Default access patterns for new projects
* Workspace-wide policy application
* Bulk access management operations
* Simplified onboarding workflows
### Custom group architecture
**Group Properties:**
* Unique identifier (UUID)
* Display name (user-defined)
* Description (optional)
* Workspace scope (cannot span workspaces)
* Member list (user IDs)
* Role assignments (workspace-level)
**Group Membership:**
* Direct user assignments
* No nested group support
* Membership changes propagate immediately
* Audit trail maintained for membership changes
**When user has multiple group memberships:**
1. Collect all permissions from all groups
2. Union permissions (more permissive wins)
3. Combine with individual user permissions
4. Apply most permissive result
**Example:**
```
User is member of:
- Group A: project_viewer on Project X
- Group B: project_editor on Project X
Result: User has project_editor access (more permissive)
```
**Individual Override:**
Individual permission assignments take precedence over group-based assignments when more restrictive.
**Optimization Strategies:**
* Group permissions cached per user session
* Membership changes invalidate affected user caches
* Batch operations recommended for large groups
* Avoid excessive group count per user (recommend \< 20)
**Best Practices:**
* Use groups for >5 users with same access pattern
* Prefer groups over individual assignments at scale
* Regular cleanup of unused groups
* Monitor group membership sizes
## Advanced topics
### Permission override scenarios
**Scenario:** User assigned multiple roles at same level
**Resolution:**
* Permissions are combined (union)
* Most permissive permission wins
* Cannot have conflicting restrictions
**Example:**
```
User has both:
- theme_editor (theme permissions)
- workspace_runtime_editor (runtime permissions)
Result: User has both theme AND runtime permissions
```
**Scenario:** Workspace role vs. project role
**Resolution:**
* Project-level permissions are additive to workspace permissions
* Workspace role doesn't auto-grant project access
* Explicit project access required even with workspace admin role
**Example:**
```
User is workspace_admin:
- Has admin rights at workspace level
- Still needs project role to access specific projects
- Project owner can still restrict workspace admin
```
**Scenario:** User has both group-based and individual permissions
**Resolution:**
* Combine all permissions from all sources
* More permissive permission wins
* Individual cannot override to be more restrictive
**Example:**
```
Group A grants: project_viewer
Individual grant: project_editor
Result: User has project_editor (more permissive)
```
### Permission caching and propagation
**Cache Locations:**
* User session cache (browser)
* Backend permission cache (per user)
* Database role definitions (persistent)
**Cache Invalidation:**
* User logout clears session cache
* Role changes propagate within 5 minutes
* Group membership changes immediate
* Manual cache clear via re-login
**Troubleshooting Cache Issues:**
1. User logs out completely
2. Clear browser cache and cookies
3. User logs back in
4. Permissions refresh from database
5. If still not working, check role assignments
## Related documentation
Overview of FlowX workspace access rights and role hierarchy
Detailed permission matrices for all FlowX roles
Practical guidance for choosing and assigning roles
Overview of FlowX access management system
# Role selection & management guide
Source: https://docs.flowx.ai/5.1/setup-guides/access-management/role-selection-guide
Practical guidance for selecting and assigning the right roles in FlowX Designer
**Documentation Navigation:**
* [Workspaces Access Rights](/5.1/setup-guides/access-management/workspaces-access-rights) - Role overview and concepts
* [Complete Permissions Matrix](/5.1/setup-guides/access-management/roles-permissions-matrix) - Detailed permission specifications
* [Permission Reference Guide](/5.1/setup-guides/access-management/permission-reference-guide) - Technical implementation details
* **Role Selection Guide** (Current) - Practical scenarios and best practices
This guide helps you choose the appropriate roles for different users based on their responsibilities, expertise, and access requirements.
## Role selection decision tree
Use this decision tree to quickly identify the appropriate role:
```mermaid theme={"system"}
graph TD
A[Need to assign role] --> B{User manages multiple workspaces?}
B -->|Yes| C[org_admin]
B -->|No| D{User manages workspace resources?}
D -->|Yes, full management| E[workspace_admin]
D -->|No| F{What is user's primary responsibility?}
F -->|Visual design & branding| G[theme_editor]
F -->|Runtime deployments| H[workspace_runtime_editor]
F -->|Project configuration| I{Access level needed?}
F -->|General workspace access| J[workspace_user]
I -->|Full control & ownership| K[project_owner]
I -->|Full configuration access| L[project_editor]
I -->|View only for audit/review| M[project_viewer]
```
## Role selection by persona
### Platform administrators
**Role:** `org_admin`
**Typical Responsibilities:**
* Managing the entire FlowX platform
* Creating and organizing workspaces
* Managing organization-wide users and groups
* Overseeing system health and configurations
* Implementing organization-wide policies
**Example Users:**
* Platform administrators
* IT managers
* System architects
**Key Considerations:**
* Assign sparingly - only to users needing cross-workspace access
* Has access to ALL projects across ALL workspaces
* Should be limited to 2-3 trusted individuals
### Business unit managers
**Role:** `workspace_admin`
**Typical Responsibilities:**
* Managing workspace users and access
* Overseeing all workspace projects
* Managing workspace themes and branding
* Configuring workspace-level settings
* Handling workspace resource allocation
**Example Users:**
* Department heads
* Business unit managers
* Team leads with administrative duties
**Key Considerations:**
* Has admin access to all projects in their workspace
* Cannot access other workspaces without explicit assignment
* Should be assigned to responsible leaders only
### Developers and configurators
**Role:** `project_owner`
**Assignment:** Automatic (assigned to project creator)
**Typical Responsibilities:**
* Complete project governance
* Managing project team access
* Final approval on project changes
* Project lifecycle management
**Example Users:**
* Project leads
* Technical architects
* Product owners
**Key Considerations:**
* Automatically assigned at project creation
* Can transfer ownership to another user
* Only one owner per project
**Role:** `project_editor`
**Typical Responsibilities:**
* Building and configuring processes
* Designing workflows
* Creating UI configurations
* Managing integrations
* Creating builds and deployments
**Example Users:**
* Senior developers
* Business analysts
* Technical configurators
**Key Considerations:**
* Full configuration access without ownership
* Cannot grant/revoke project access
* Standard role for project team members
**Runtime Policy Access:**
* Configurators who need to change active policy should be assigned `workspace_runtime_editor` role in their workspace
* Even if they only have `project_viewer` access on specific projects, the workspace-level runtime role allows policy changes
### Specialized roles
**Role:** `theme_editor`
**Typical Responsibilities:**
* Designing application themes
* Managing brand assets
* Creating and organizing fonts
* Managing media library
* Ensuring visual consistency
**Example Users:**
* UI/UX designers
* Brand managers
* Visual designers
* Marketing team members
**Key Considerations:**
* Extends workspace\_user with design permissions
* Can create projects but focused on visual aspects
* Read-only for projects without explicit access
**Role:** `workspace_runtime_editor`
**Typical Responsibilities:**
* Creating and managing builds
* Configuring runtime environments
* Managing deployment policies
* Overriding configuration parameters
* Monitoring process instances
**Example Users:**
* DevOps engineers
* Release managers
* Technical operations staff
* System administrators
**Key Considerations:**
* Extends workspace\_user with runtime permissions
* Can manage deployments across workspace
* Does not grant automatic project configuration access
### Stakeholders and reviewers
**Role:** `workspace_user`
**Typical Responsibilities:**
* Creating new projects
* Working on assigned projects
* Viewing workspace resources
* Basic workspace participation
**Example Users:**
* Junior developers
* Business analysts
* Process designers
* General team members
**Key Considerations:**
* Default role for most workspace members
* Can create projects (becomes owner automatically)
* Needs explicit project access to work on others' projects
**Role:** `project_viewer`
**Typical Responsibilities:**
* Reviewing project configurations
* Auditing processes and workflows
* Compliance checking
* Documentation and training
**Example Users:**
* Business stakeholders
* Quality assurance personnel
* Compliance officers
* External consultants
* New team members (onboarding)
**Key Considerations:**
* Completely read-only access
* Can test processes through interface
* Safe for sensitive stakeholders
## Common role assignment scenarios
### Scenario 1: New employee onboarding
Assign `workspace_user` role at workspace level
Grant `project_viewer` role for relevant projects
**Rationale:** Allow new employee to explore and learn without risk
Grant `project_editor` role for specific training projects
Keep viewer access for production projects
**Rationale:** Hands-on learning in safe environment
Grant `project_editor` role for assigned projects
Remove training project access
**Rationale:** Ready for production work with appropriate permissions
### Scenario 2: External consultant engagement
**Recommended Role:** `project_viewer`
**Access Pattern:**
* Grant access only to specific projects under review
* No workspace-level role assignment
* Time-bound access (remove after engagement)
**Benefits:**
* Complete visibility for review purposes
* No risk of accidental modifications
* Easy to audit consultant's activities
**Recommended Roles:**
* Workspace level: `workspace_user`
* Project level: `project_editor` for specific projects
**Access Pattern:**
* Create dedicated workspace for consultant projects
* Grant editor access only to contracted projects
* Regular access reviews during engagement
**Benefits:**
* Consultant can work independently
* Clear boundaries on accessible projects
* Easy cleanup after engagement ends
**Recommended Roles:**
* Workspace level: `workspace_user` or specialized role
* Project level: `project_editor` or `project_owner` as needed
**Access Pattern:**
* Treat similar to internal team member
* Consider dedicated workspace for partner projects
* Quarterly access reviews and adjustments
**Benefits:**
* Full integration with team workflows
* Appropriate access for extended engagement
* Maintains security through regular reviews
### Scenario 3: Cross-functional team project
**Team Composition:**
* 1 Project Owner (automatically assigned to creator)
* 2-3 Project Editors (developers/analysts)
* 1 Project Viewer (stakeholder)
**Access Setup:**
```
1. Creator starts project → becomes project_owner
2. Grant project_editor to development team
3. Grant project_viewer to business stakeholder
4. Use "Everyone in workspace" group if all team members need access
```
**Best Practices:**
* Keep team small and roles simple
* Regular sync meetings reduce need for complex permissions
* Document decisions in project comments
**Team Composition:**
* 1 Project Owner (technical lead)
* 5-8 Project Editors (developers, analysts, designers)
* 1 Theme Editor (UI/UX specialist)
* 2-3 Project Viewers (stakeholders, QA)
* 1 Runtime Editor (DevOps)
**Access Setup:**
```
1. Create workspace groups:
- "ProjectName_Developers" → project_editor
- "ProjectName_Stakeholders" → project_viewer
2. Assign specialized workspace roles as needed
3. Use groups for bulk permission management
```
**Best Practices:**
* Use groups instead of individual assignments
* Regular access reviews (monthly)
* Document group purposes clearly
**Team Composition:**
* 1 Project Owner (product owner/architect)
* 10-15 Project Editors (multiple teams)
* 2-3 Theme Editors (design team)
* 1-2 Runtime Editors (DevOps team)
* 5-8 Project Viewers (stakeholders, compliance, QA)
**Access Setup:**
```
1. Create hierarchical groups:
- "ProjectName_Core_Team" → project_editor
- "ProjectName_Design_Team" → theme_editor + project_editor
- "ProjectName_DevOps_Team" → runtime_editor + project_editor
- "ProjectName_Stakeholders" → project_viewer
2. Use workspace admin to manage groups centrally
3. Implement approval workflow for access requests
```
**Best Practices:**
* Dedicated workspace admin for project
* Automated access reviews (bi-weekly)
* Clear escalation path for access issues
* Document architecture decisions and ownership
### Scenario 4: Multi-workspace organization
**Organizational Setup:**
**Organization Level:**
* 2-3 `org_admin` (Platform administrators)
**Workspace Level (per business unit):**
* 1 `workspace_admin` (Business unit manager)
* 15-30 `workspace_user` (Standard members)
* 2-3 `theme_editor` (Design team)
* 1-2 `workspace_runtime_editor` (DevOps team)
**Project Level (varies by project):**
* Projects follow patterns from Scenario 3
**Access Patterns:**
* Each business unit has dedicated workspace
* Cross-workspace collaboration via library sharing
* Central DevOps team has runtime\_editor in all workspaces
* Central design team has theme\_editor in relevant workspaces
**Governance:**
* Monthly access reviews by workspace\_admin
* Quarterly organization-wide audit by org\_admin
* Automated alerts for inactive users
* Clear documentation of cross-workspace access
## Role escalation matrix
When should you upgrade a user's role?
| Current Role | Escalate To | Trigger Conditions | Approval Required |
| ----------------- | ----------------- | -------------------------------------------------------------------------- | -------------------------------- |
| `project_viewer` | `project_editor` | User needs to make configuration changes Completed onboarding period | Project Owner |
| `workspace_user` | `theme_editor` | User assigned to design responsibilities Demonstrated design skills | Workspace Admin |
| `workspace_user` | `runtime_editor` | User assigned to DevOps responsibilities Deployment management needed | Workspace Admin |
| `project_editor` | `project_owner` | Original owner leaving User taking over project leadership | Current Owner or Workspace Admin |
| `workspace_user` | `workspace_admin` | User promoted to management Administrative duties assigned | Organization Admin |
| `workspace_admin` | `org_admin` | User taking platform-wide responsibilities Multi-workspace management | Existing Org Admin + Management |
Always follow the principle of least privilege. Escalate roles only when necessary and document the business justification.
## Role de-escalation and removal
### When to downgrade roles
**Scenario:** Project is completed and moved to maintenance
**Action:**
* Downgrade most `project_editor` to `project_viewer`
* Keep 1-2 editors for maintenance
* Keep project\_owner for governance
**Timing:** At project completion milestone
**Scenario:** User moves to different team or responsibilities
**Action:**
* Remove access to old projects
* Assign appropriate role for new responsibilities
* Transfer project\_owner if applicable
**Timing:** During role transition period
**Scenario:** Contractor engagement ends
**Action:**
* Remove all workspace access
* Document contractor's contributions
* Archive or transfer project ownership if needed
**Timing:** On contractor's last day
**Scenario:** Suspicious activity or policy violation
**Action:**
* Immediate suspension of access
* Investigation by security/admin team
* Appropriate remediation based on findings
**Timing:** Immediately upon detection
### Access removal checklist
* List all workspaces user has access to
* Identify all projects with direct access
* Check group memberships
* Review project ownership assignments
* Transfer project\_owner role if user owns projects
* Update project documentation with new owner
* Notify project stakeholders of change
* Remove from workspace-level roles
* Remove from project-level access
* Remove from all groups
* Verify removal in system
* Document reason for removal
* Update team rosters and directories
* Communicate changes to affected teams
* Archive for compliance if needed
## Role assignment anti-patterns
Avoid these common mistakes when assigning roles:
### Anti-pattern 1: Everyone is an admin
**Problem:**
* Assigning `workspace_admin` or `org_admin` to too many users
* "Just in case" administrative access
**Impact:**
* Reduced security and accountability
* Increased risk of accidental changes
* Difficult to audit who made changes
**Solution:**
* Limit admin roles to actual administrators
* Use `project_editor` or `project_owner` for project-level needs
* Implement proper access request workflow
### Anti-pattern 2: Never updating roles
**Problem:**
* Roles assigned during onboarding never reviewed
* Users retain access after role changes
* Inactive users still have full access
**Impact:**
* Security vulnerabilities accumulate
* Compliance issues with access audits
* Potential data breaches
**Solution:**
* Quarterly access reviews
* Automated inactive user detection
* Role-based access recertification
### Anti-pattern 3: Individual assignments instead of groups
**Problem:**
* Assigning roles to individual users instead of groups
* Not using the "Everyone in workspace" group
* Managing access one user at a time
**Impact:**
* High administrative overhead
* Inconsistent access patterns
* Difficult to scale
**Solution:**
* Create groups for teams and functions
* Use groups for project access
* Individual assignments only for exceptions
### Anti-pattern 4: Too granular or too broad
**Problem:**
* Creating overly complex permission structures
* OR giving everyone the same high-level access
**Impact:**
* Confusion about who can do what
* Either too restrictive or too permissive
* Difficult to maintain
**Solution:**
* Start with predefined roles
* Use workspace/project boundaries naturally
* Add granularity only when truly needed
### Anti-pattern 5: No documentation
**Problem:**
* Access decisions not documented
* No record of why users have certain roles
* No clear ownership of access management
**Impact:**
* Cannot audit access decisions
* Difficult to troubleshoot access issues
* Compliance problems
**Solution:**
* Document all non-standard role assignments
* Maintain role assignment justifications
* Clear ownership of access management process
## Groups and access management
FlowX uses groups to simplify access management across users. Understanding built-in groups and creating custom groups efficiently manages permissions at scale.
### Built-in workspace groups
#### Everyone in workspace group
Every workspace automatically includes a special system-managed group for all workspace members:
**Display Name in UI:** `Everyone from `
**Purpose:**
Provides convenient access management for all users associated with a workspace.
**Automatic Behavior:**
* Created automatically during workspace provisioning
* Cannot be edited, deleted, or duplicated
* Users automatically added when granted workspace access (direct or through another group)
* Users automatically removed when workspace access is revoked
* Pre-selected by default when creating new projects/libraries
* Appears in user/group search results when granting project access
**Common Use Cases:**
* Grant all workspace members read access to reference projects
* Provide baseline visibility across all workspace projects
* Simplify onboarding by giving new users automatic access to shared resources
* Create workspace-wide announcements or shared libraries
**Example:**
```
Workspace: "Product Development"
Auto-created group: "all_users_product_development"
Display name: "Everyone from Product Development"
```
When creating a new project in "Product Development" workspace, the group "Everyone from Product Development" appears pre-selected, allowing immediate assignment of a role (viewer, editor, etc.) to all workspace members.
**Cannot Exclude Individual Members**
The "Everyone in workspace" group includes ALL workspace members without exception. You cannot:
* Remove specific users from this group
* Create exceptions or exclusions
* Modify group membership manually
If you need selective access, create custom groups for specific teams or roles.
### Custom groups
#### When to create custom groups
Create custom groups when you need:
* Team-based access (e.g., "Development Team", "QA Team")
* Role-based access (e.g., "Senior Developers", "Stakeholders")
* Project-specific access (e.g., "Project Alpha Team")
* Cross-functional teams (e.g., "Release Management", "Architecture Board")
#### Group creation best practices
Identify natural team boundaries and access patterns before creating groups.
**Good Examples:**
* `dev_team_frontend`
* `stakeholders_finance_dept`
* `project_phoenix_core_team`
**Poor Examples:**
* `random_users`
* `temp_group_1`
* `johns_team` (too specific, not transferable)
Group names should clearly indicate purpose and membership.
**Naming Convention:**
`[function]_[department/project]_[sub-group]`
**Examples:**
* `developers_mobile_ios`
* `viewers_executive_leadership`
* `editors_project_migration`
Add clear descriptions explaining:
* Who should be members
* What access the group provides
* When to use the group for access grants
Grant groups workspace-level roles, then use groups when assigning project access:
```
1. Create group: "Mobile Development Team"
2. Add members: All mobile developers
3. Grant workspace role: workspace_user
4. Use group for project access: Grant project_editor to "Mobile Development Team" on mobile projects
```
#### Group lifecycle management
**Adding Members:**
* Add users individually
* Bulk import from CSV
* Integrate with identity provider groups (if configured)
**Removing Members:**
* Individual removal
* Automatic removal when user leaves workspace
* Bulk update operations
**Modifying Groups:**
* Update group name and description
* Change group membership
* Review and audit group access
**Deleting Groups Impact**
Deleting a group:
* Removes all access granted through that group
* Does NOT delete the users themselves
* Cannot be undone
* May leave users without expected access
Always verify group usage before deletion:
1. Check which projects use the group
2. Identify affected users
3. Plan alternative access methods
4. Communicate changes to affected users
#### Access patterns using groups
**Pattern 1: Hierarchical Teams**
```
all_users_product_development (workspace)
├── team_backend_developers
├── team_frontend_developers
├── team_qa_engineers
└── team_product_owners
```
Each sub-group receives different project roles based on responsibilities.
**Pattern 2: Project-Based Groups**
```
project_alpha_core_team → project_editor
project_alpha_stakeholders → project_viewer
project_alpha_devops → project_editor + workspace_runtime_editor
```
Groups organized around specific projects for clear access boundaries.
**Pattern 3: Cross-Functional Groups**
```
architecture_review_board → project_viewer on all projects
release_management_team → workspace_runtime_editor
security_team → project_viewer + audit access
```
Groups that span multiple projects with specialized access needs.
**Pattern 4: External Collaboration**
```
external_consultants_acme → project_editor on assigned projects only
external_auditors_bigfour → project_viewer on compliance projects
partners_vendor_xyz → project_viewer on integration projects
```
Separate groups for external parties with time-bound access.
### Group vs. individual assignment decision matrix
| Scenario | Use Group | Use Individual Assignment |
| ---------------------------------------- | --------- | ------------------------- |
| 5+ users need same access | ✅ Yes | ❌ No |
| Access pattern is temporary (\< 1 month) | ❌ No | ✅ Yes |
| Access follows team structure | ✅ Yes | ❌ No |
| One-off exception for specific user | ❌ No | ✅ Yes |
| Access will change frequently | ❌ No | ✅ Yes |
| Multiple projects need same team access | ✅ Yes | ❌ No |
| Executive/stakeholder with unique access | ❌ No | ✅ Yes |
| New team being formed | ✅ Yes | ❌ No |
## Troubleshooting permission issues
Common permission-related issues and their solutions. Use this guide to quickly diagnose and resolve access problems.
### Common error scenarios
**Symptoms:**
* Projects menu entry not visible
* Workspace appears empty
* Cannot navigate to any projects
**Possible Causes:**
1. No workspace access granted
2. Missing `workspace_read` permission
3. Not a member of any workspace
**Solutions:**
Check if user has been granted access to the workspace:
* Contact workspace administrator
* Verify user appears in workspace Users list
* Check group membership if access is group-based
User needs at minimum `workspace_user` role:
* Review user's assigned roles in workspace
* Verify `workspace_read` permission is included
* If missing, workspace admin should assign appropriate role
Sometimes permissions don't update immediately:
* Log out of FlowX Designer
* Clear browser cache
* Log back in
* Check if Projects menu now appears
**Symptoms:**
* Project appears in list
* Can open project but all controls disabled
* Configure shows as "View" instead
* No Save buttons visible
**Possible Causes:**
1. Have `project_viewer` role instead of `project_editor`
2. Have read-only permissions on project
3. Project is locked or archived
**Solutions:**
Verify assigned project role:
* Open project
* Look for edit controls (should be hidden if viewer)
* Check contextual menu (Configure vs View)
Contact project owner to grant edit access:
* Identify project owner (automatic creator or transferred owner)
* Request `project_editor` role
* Provide business justification for edit access
Ensure project is active:
* Check if project is archived
* Verify project version is editable
* Confirm no system locks in place
**Symptoms:**
* No "Create build" button visible
* Import build action missing
* Runtime menu entries not accessible
**Possible Causes:**
1. Missing `wks_builds_create` permission
2. Don't have `workspace_runtime_editor` role
3. Workspace-level runtime access not granted
**Solutions:**
Contact workspace administrator:
* Explain need for build creation
* Request `workspace_runtime_editor` role
* Alternative: Request specific `wks_builds_create` permission
Note that runtime permissions moved to workspace level in v5.0:
* Old: Per-project runtime access
* New: Workspace-wide runtime access
* May need different permission strategy
**Symptoms:**
* User appears in group membership list
* User still cannot access expected resources
* Group-based permissions not applying
**Possible Causes:**
1. Group not assigned to project
2. Group has insufficient permissions
3. Permission cache not refreshed
4. Individual permission overrides group
**Solutions:**
Check where group is used:
* Check project-level access for group
* Verify group has appropriate roles assigned
Understand permission precedence:
* Individual permissions may override group
* Multiple groups combine permissions
* A user's permissions in the context of a project is the reunion of their permissions given though groups or individual assignments
Clear permission cache:
* User logs out completely
* Clear browser cache and cookies
* User logs back in
* Permissions should refresh from backend
Ensure group has correct role:
* Check group's workspace-level role
* Verify group's project-level role
* Confirm role includes needed permissions
**Symptoms:**
* Original project owner no longer with organization
* Cannot grant/revoke project access
* Project governance blocked
**Possible Causes:**
1. Project ownership not transferred
2. No other users have admin rights on project
3. Workspace admin access not configured
**Solutions:**
Workspace admin can help:
* Has `projects_admin` permission
* Can grant access to projects
* Can help identify new owner
Workspace admin or org admin can:
* Assign new project owner
* Transfer governance rights
* Update project documentation
Implement ownership best practices:
* Always have 2+ users with project\_editor minimum
* Document ownership succession plan
* Review project ownership quarterly
* Assign workspace admin as backup owner for critical projects
## Best practices summary
Begin with `project_viewer` or `workspace_user` and escalate as needed based on demonstrated needs
Create and use groups for teams and functions rather than managing individual user access
Quarterly access reviews, remove inactive users, validate permissions match responsibilities
Maintain records of role assignments, especially for elevated privileges and exceptions
Use group memberships and role inheritance to reduce manual access management
Have clear processes for role changes, project ownership transfers, and access removal
## Related documentation
Overview of FlowX workspace access rights and role hierarchy
Detailed permission matrices for all FlowX roles
Technical implementation details, UI mappings, and naming conventions
Overview of FlowX access management system
Setting up identity and access management
Understanding workspaces and organizing projects
# Complete roles & permissions matrix
Source: https://docs.flowx.ai/5.1/setup-guides/access-management/roles-permissions-matrix
Detailed permission matrices for all FlowX roles across organization, workspace, and project levels
**Documentation Navigation:**
* [Workspaces Access Rights](/5.1/setup-guides/access-management/workspaces-access-rights) - Role overview and concepts
* **Complete Permissions Matrix** (Current) - Detailed permission specifications
* [Permission Reference Guide](/5.1/setup-guides/access-management/permission-reference-guide) - Technical implementation details
* [Role Selection Guide](/5.1/setup-guides/access-management/role-selection-guide) - Practical scenarios and best practices
This page provides comprehensive permission matrices for all predefined roles in FlowX 5.0. Use this as a reference when planning access control strategies.
## How to use this reference
Determine whether you need organization, workspace, or project-level access
Review the role descriptions and select the one matching your requirements
Check the detailed permission matrix to ensure it meets your needs
Assign roles according to the principle of least privilege
## Permission legend
The permission matrices use the following symbols:
| Symbol | Meaning |
| ------ | -------------------------------------------- |
| ✅ | Permission is assigned |
| ❌ | Permission is not assigned |
| ⬜ | Permission is not available for this context |
## Organization level permissions
### Organization admin permission matrix
The `org_admin` role has the following permissions:
| Resource | Read | Edit | Create | Delete | Admin | Comments |
| ------------ | ---- | ---- | ------ | ------ | ----- | ------------------------------------ |
| Organization | ⬜ | ✅ | ⬜ | ⬜ | ⬜ | Organization settings management |
| Workspaces | ✅ | ✅ | ✅ | ✅ | ✅ | Complete workspace lifecycle control |
| Users | ✅ | ✅ | ✅ | ✅ | ⬜ | Organization user management |
| Groups | ✅ | ✅ | ✅ | ✅ | ⬜ | User group management |
| Resource | Read | Edit | Create | Delete | Comments |
| ------------- | ---- | ---- | ------ | ------ | ------------------------------- |
| Out of office | ✅ | ✅ | ✅ | ✅ | Out of office policy management |
| Fonts | ✅ | ✅ | ✅ | ✅ | Global font resource management |
| Resource | Read | Edit | Create | Delete | Comments |
| --------------- | ---- | ---- | ------ | ------ | ---------------------------------- |
| Audit logs | ✅ | ❌ | ❌ | ❌ | Read-only access to system audit |
| Platform status | ✅ | ❌ | ❌ | ❌ | System health monitoring |
| Org Env Info | ✅ | ✅ | ❌ | ❌ | Environment information management |
| Org Audit log | ✅ | ❌ | ❌ | ❌ | Organization-specific audit access |
**Management Rules:**
* Cannot be edited, duplicated, or deleted
* Can only be assigned in the Organization admin space
* Hidden from workspace role lists
* Cannot be assigned at workspace level
* Must be assigned to at least one user during initial setup
## Workspace level permissions
### Workspace admin permission matrix
The `workspace_admin` role has the following permissions:
| Resource | Read | Edit | Create | Admin | Delete | Comments |
| -------------------- | ---- | ---- | ------ | ----- | ------ | -------------------------------------------------------------------------------------------------------------------------- |
| Projects & libraries | ⬜ | ⬜ | ✅ | ✅ | ⬜ | Can create projects and has admin rights on projects/libraries in the workspace (even without being given explicit access) |
| Fonts | ✅ | ✅ | ✅ | ⬜ | ✅ | Can see all Fonts available for the workspace but is not allowed to edit or add new ones |
| Global media library | ✅ | ✅ | ✅ | ⬜ | ✅ | Can add new Global media files as well as edit/delete all Global media files available for the workspace |
| Themes | ✅ | ✅ | ✅ | ⬜ | ✅ | Can add new themes as well as edit/delete all themes available for the workspace |
| Workspace audit logs | ✅ | ⬜ | ⬜ | ⬜ | ⬜ | Can see and filter all audit logs for that workspace |
| Resource | Read | Edit | Create | Delete | Comments |
| ---------------------------------- | ---- | ---- | ------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------------- |
| Workspace builds | ✅ | ⬜ | ✅ | ⬜ | Can create a build for any project/library, as well as see and run all builds within the workspace |
| Workspace active policy | ✅ | ✅ | ⬜ | ⬜ | Can add a new active policy override as well as see and edit the active policy and its overrides on all projects/libraries in the workspace |
| Scheduled processes | ✅ | ✅ | ⬜ | ✅ | Can see all scheduled processes on all projects/libraries in the workspace as well as enable/disable them |
| Configuration parameters overrides | ✅ | ✅ | ✅ | ✅ | Can add new configuration parameters overrides as well as see all overrides on all projects/libraries in the workspace |
| Process instances | ✅ | ✅ | ⬜ | ⬜ | Can see and filter all process instances on all projects/libraries in the workspace |
| Tasks | ✅ | ⬜ | ⬜ | ⬜ | Can see and filter all tasks available for them on all projects/libraries in the workspace |
| Resource | Read | Edit | Create | Delete | Comments |
| --------------------------------- | ---- | ---- | ------ | ------ | ----------------------------------------------------------------------------------------------------------------------- |
| Workspace management | ✅ | ✅ | ⬜ | ⬜ | Permission added so that the user can see the resources he creates or is assigned to |
| Users | ✅ | ✅ | ✅ | ✅ | Can see and modify all users assigned to the workspace, as well as their groups and access within the current workspace |
| Workspace groups | ✅ | ✅ | ✅ | ✅ | Can add new groups as well as edit/delete all groups available for the workspace |
| Workspace roles | ✅ | ✅ | ✅ | ✅ | Complete workspace role management |
| Workspace platform status | ✅ | ⬜ | ⬜ | ⬜ | Can see and export the Platform status details |
| Workspace environment information | ✅ | ⬜ | ⬜ | ⬜ | Can view the Environment information and trigger a forced rescan |
**Management Rules:**
* Cannot be edited or deleted (predefined role)
* Listed in workspace role management interfaces
* Can be assigned to users/groups within the workspace
* Can be assigned when granting access to workspace
* Cannot manage organization-wide settings
### Workspace user permission matrix
The `workspace_user` role has the following permissions:
| Resource | Read | Edit | Create | Admin | Delete | Comments |
| -------------------- | ---- | ---- | ------ | ----- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Projects & libraries | ⬜ | ⬜ | ✅ | ⬜ | ⬜ | Can create projects, can edit and see projects/libraries they are given explicit access to or where they are owners. See [Project level](#project-level-permissions) permissions for more details. |
| Fonts | ✅ | ⬜ | ⬜ | ⬜ | ⬜ | Can see all Fonts available for the workspace but is not allowed to edit or add new ones |
| Global media library | ✅ | ⬜ | ⬜ | ⬜ | ⬜ | Is able to view all global media files, but is not allowed to edit or add new files |
| Themes | ✅ | ⬜ | ⬜ | ⬜ | ⬜ | Can see all Themes available for the workspace but is not allowed to edit or add new ones |
| Workspace audit logs | ✅ | ⬜ | ⬜ | ⬜ | ⬜ | Can see and filter all audit logs for that workspace |
| Resource | Read | Edit | Create | Delete | Comments |
| ---------------------------------- | ---- | ---- | ------ | ------ | ---------------------------------------------------------------------------------------------------------------------- |
| Workspace builds | ✅ | ⬜ | ⬜ | ⬜ | Can see and run all builds on projects/libraries they create or they are given explicit access to |
| Workspace active policy | ✅ | ⬜ | ⬜ | ⬜ | Can see the active policy and its overrides on projects/libraries they create or they are given explicit access to |
| Scheduled processes | ✅ | ⬜ | ⬜ | ⬜ | Can see all scheduled processes on projects/libraries they create or they are given explicit access to |
| Configuration parameters overrides | ✅ | ⬜ | ⬜ | ⬜ | Can see all configuration parameters overrides on projects/libraries they create or they are given explicit access to |
| Process instances | ✅ | ⬜ | ⬜ | ⬜ | Can see and filter all process instances on projects/libraries they create or they are given explicit access to |
| Tasks | ✅ | ⬜ | ⬜ | ⬜ | Can see and filter all tasks available for them on projects/libraries they create or they are given explicit access to |
| Resource | Read | Edit | Create | Delete | Comments |
| --------------------------------- | ---- | ---- | ------ | ------ | ------------------------------------------------------------------------------------------------------------ |
| Workspace management | ✅ | ⬜ | ⬜ | ⬜ | Permission added so that the user can see the resources he creates or is assigned to |
| Users | ✅ | ⬜ | ⬜ | ⬜ | Can see all users assigned to the workspace, as well as their groups and access within the current workspace |
| Workspace groups | ✅ | ⬜ | ⬜ | ⬜ | View workspace groups but can't manage |
| Workspace roles | ✅ | ⬜ | ⬜ | ⬜ | View workspace roles but can't manage |
| Workspace platform status | ✅ | ⬜ | ⬜ | ⬜ | Can see and export the Platform status details |
| Workspace environment information | ✅ | ⬜ | ⬜ | ⬜ | Can view the Environment information and trigger a force rescan |
**Management Rules:**
* Cannot be edited or deleted (predefined role)
* Can be duplicated to create custom variations (future feature)
* Default role for most workspace members
* Can be assigned when granting access to workspace
* Limited administrative capabilities
### Theme editor permission matrix
The `theme_editor` role extends `workspace_user` with additional permissions:
| Resource | Read | Edit | Create | Delete | Comments |
| -------------------- | ---- | ---- | ------ | ------ | -------------------------------------------------------------------------------------------------------- |
| Fonts | ✅ | ✅ | ✅ | ✅ | Can see all Fonts available for the workspace but is not allowed to edit or add new ones |
| Global media library | ✅ | ✅ | ✅ | ✅ | Can add new Global media files as well as edit/delete all Global media files available for the workspace |
| Themes | ✅ | ✅ | ✅ | ✅ | Can add new themes as well as edit/delete all themes available for the workspace |
All other permissions are inherited from the `workspace_user` role. See the workspace user permission matrix above for complete details.
**Management Rules:**
* Same base constraints as `workspace_user`
* Cannot be edited or deleted (predefined role)
* Can be duplicated to create custom variations (future feature)
* Specialized role for UI/UX designers and brand managers
### Workspace runtime editor permission matrix
The `workspace_runtime_editor` role extends `workspace_user` with additional permissions:
| Resource | Read | Edit | Create | Delete | Comments |
| ---------------------------------- | ---- | ---- | ------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------------- |
| Workspace builds | ✅ | ⬜ | ✅ | ⬜ | Can create a build for any project/library, as well as see and run all builds within the workspace |
| Workspace active policy | ✅ | ✅ | ⬜ | ⬜ | Can add a new active policy override as well as see and edit the active policy and its overrides on all projects/libraries in the workspace |
| Scheduled processes | ✅ | ✅ | ⬜ | ✅ | Can see all scheduled processes on all projects/libraries in the workspace as well as enable/disable them |
| Configuration parameters overrides | ✅ | ✅ | ✅ | ✅ | Can add new configuration parameters overrides as well as see all overrides on all projects/libraries in the workspace |
| Process instances | ✅ | ✅ | ⬜ | ⬜ | Can see and filter all process instances on all projects/libraries in the workspace |
| Tasks | ✅ | ⬜ | ⬜ | ⬜ | Can see and filter all tasks available for them on all projects/libraries in the workspace |
All other permissions are inherited from the `workspace_user` role. See the workspace user permission matrix above for complete details.
**Management Rules:**
* Same base constraints as `workspace_user`
* Cannot be edited or deleted (predefined role)
* Can be duplicated to create custom variations (future feature)
* Specialized role for DevOps and runtime environment administrators
## Project level permissions
### Project owner permission matrix
The `project_owner` role has the following permissions:
| Resource | Read | Edit | Create | Delete | Admin/Owner | Comments |
| -------------------- | ---- | ---- | ------ | ------ | ----------- | ------------------------------------------------------------------------------ |
| Projects & Libraries | ✅ | ✅ | ⬜ | ✅ | ✅ | Has admin rights on all projects/libraries in the workspace he is the owner of |
| Resource | Read | Edit | Create | Delete | Comments |
| ------------------------------------- | ---- | ---- | ------ | ------ | ------------------------------------------------------- |
| Processes | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Project data model | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Enumerations | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Media library & Document Intelligence | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Notification templates | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Document templates | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Views | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Stages | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Allocation rules | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Data Sources | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Workflow | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Reusable UI | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Reusable Business Rules | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Dependencies | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Configuration parameters | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| AI agents | ⬜ | ✅ | ⬜ | ⬜ | AI agent configuration (read not available, edit only) |
**Management Rules:**
* System-managed role, cannot be edited or deleted
* Automatically assigned to user who creates project
* Hidden from role selection interfaces
* Cannot be manually assigned through UI
* Permanent assignment for project lifecycle
* Can be transferred to another user (ownership transfer)
### Project editor permission matrix
The `project_editor` role has the following permissions:
| Resource | Read | Edit | Create | Delete | Comments |
| -------------------- | ---- | ---- | ------ | ------ | -------------------------------------------------------------------------- |
| Projects & Libraries | ✅ | ✅ | ⬜ | ✅ | Can read, edit, or delete any project for which they are a project\_editor |
| Resource | Read | Edit | Create | Delete | Comments |
| ------------------------------------- | ---- | ---- | ------ | ------ | ------------------------------------------------------- |
| Processes | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Project data model | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Enumerations | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Media library & Document Intelligence | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Notification templates | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Document templates | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Views | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Stages | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Allocation rules | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Data Sources | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Workflow | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Reusable UI | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Reusable Business Rules | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Dependencies | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| Configuration parameters | ✅ | ✅ | ✅ | ✅ | Can create/edit/delete all resources within the project |
| AI agents | ⬜ | ✅ | ⬜ | ⬜ | AI agent configuration (read not available, edit only) |
**Management Rules:**
* Cannot be edited or deleted (predefined role)
* Can be duplicated to create custom variations (future feature)
* Can be assigned to users/groups when granting project access
* Standard role for project team members
* No ownership rights (cannot grant/revoke project access)
### Project viewer permission matrix
The `project_viewer` role has the following permissions:
| Resource | Read | Edit | Create | Delete | Comments |
| -------------------- | ---- | ---- | ------ | ------ | --------------------------------------------------- |
| Projects & Libraries | ✅ | ⬜ | ⬜ | ❌ | Read-only access to project and library information |
| Resource | Read | Edit | Create | Delete | Comments |
| ------------------------------------- | ---- | ---- | ------ | ------ | --------------------------------------------------------------- |
| Processes | ✅ | ❌ | ❌ | ❌ | View process definitions and workflows |
| Project data model | ✅ | ❌ | ❌ | ❌ | Read-only access to project data structure |
| Enumerations | ✅ | ❌ | ❌ | ❌ | View enumeration values and data structures |
| Media library & Document Intelligence | ✅ | ❌ | ❌ | ❌ | View media assets and document intelligence configurations |
| Notification templates | ✅ | ❌ | ❌ | ❌ | View notification template configurations |
| Document templates | ✅ | ❌ | ❌ | ❌ | View document template configurations |
| Views | ✅ | ❌ | ❌ | ❌ | View UI configuration definitions |
| Stages | ✅ | ❌ | ❌ | ❌ | View process stage definitions |
| Allocation rules | ✅ | ❌ | ❌ | ❌ | View task and resource allocation rules |
| Data Sources | ✅ | ❌ | ❌ | ❌ | View system integrations and endpoints |
| Workflow | ✅ | ❌ | ❌ | ❌ | View workflow definitions and configurations |
| Reusable UI | ✅ | ❌ | ❌ | ❌ | Read-only UI component access with permission inheritance |
| Reusable Business Rules | ✅ | ❌ | ❌ | ❌ | Read-only function component access with permission inheritance |
| Dependencies | ✅ | ❌ | ❌ | ❌ | View project and library dependencies |
| Configuration parameters | ✅ | ❌ | ❌ | ❌ | View project configuration parameters |
| AI agents | ⬜ | ❌ | ⬜ | ⬜ | Limited AI agent visibility (read not available) |
**Management Rules:**
* Cannot be edited or deleted (predefined role)
* Can be duplicated to create custom variations (future feature)
* Can be assigned to users/groups when granting project access
* Safe role for stakeholders needing visibility
* No modification capabilities
* Can test processes and workflows through the interface
## Role comparison matrix
### Quick reference: All roles compared
| Permission Category | org\_admin | workspace\_admin | workspace\_user | theme\_editor | runtime\_editor | project\_owner | project\_editor | project\_viewer |
| ------------------------- | ---------- | ---------------- | --------------- | ------------- | --------------- | -------------- | --------------- | --------------- |
| **Workspace Management** | | | | | | | | |
| Create workspace | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Manage workspace users | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Create projects | ✅ | ✅ | ✅ | ✅ | ✅ | N/A | N/A | N/A |
| **Theme & Media** | | | | | | | | |
| Edit themes | ✅ | ✅ | ❌ | ✅ | ❌ | N/A | N/A | N/A |
| Manage fonts | ✅ | ✅ | ❌ | ✅ | ❌ | N/A | N/A | N/A |
| Edit media library | ✅ | ✅ | ❌ | ✅ | ❌ | N/A | N/A | N/A |
| **Runtime Management** | | | | | | | | |
| Create builds | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ |
| Edit active policy | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ |
| Manage config parameters | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ |
| **Project Configuration** | | | | | | | | |
| Edit processes | ✅ | ✅\* | ✅\* | ✅\* | ✅\* | ✅ | ✅ | ❌ |
| Manage templates | ✅ | ✅\* | ✅\* | ✅\* | ✅\* | ✅ | ✅ | ❌ |
| Configure integrations | ✅ | ✅\* | ✅\* | ✅\* | ✅\* | ✅ | ✅ | ❌ |
| **Access Control** | | | | | | | | |
| Grant project access | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
| Manage workspace access | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
\* Workspace-level roles can only edit project resources for projects they have been explicitly granted access to. Having a workspace role does not automatically grant access to all projects.
## Detailed capability breakdown
### Organization-level capabilities
| Capability | org\_admin | Notes |
| -------------------------------- | ---------- | -------------------------------------- |
| **Workspace Operations** | | |
| Create new workspaces | ✅ | No limit on number of workspaces |
| Edit workspace settings | ✅ | Can modify any workspace configuration |
| Delete workspaces | ✅ | Permanent deletion with confirmation |
| View all workspaces | ✅ | Unrestricted visibility |
| **User Management** | | |
| Add organization users | ✅ | Can invite users to organization |
| Remove organization users | ✅ | Can revoke organization access |
| Assign organization roles | ✅ | Can grant org\_admin to other users |
| View all user access | ✅ | Cross-workspace user visibility |
| **System Management** | | |
| Configure organization settings | ✅ | Organization-wide policies |
| Manage global font resources | ✅ | Fonts available to all workspaces |
| Configure out of office policies | ✅ | Organization-level OOO rules |
| **Monitoring** | | |
| View all audit logs | ✅ | Organization and workspace level |
| Monitor platform status | ✅ | System health across organization |
| Access environment information | ✅ | Configuration and deployment details |
### Workspace-level capabilities
| Capability | workspace\_admin | workspace\_user | theme\_editor | runtime\_editor | Notes |
| ----------------------------- | ---------------- | --------------- | ------------- | --------------- | ------------------------------ |
| **Project Management** | | | | | |
| Create projects/libraries | ✅ | ✅ | ✅ | ✅ | All workspace users can create |
| View all workspace projects | ✅ | ❌ | ❌ | ❌ | Only admin sees all projects |
| Admin access to all projects | ✅ | ❌ | ❌ | ❌ | Admin has implicit access |
| **User & Access Management** | | | | | |
| Add workspace users | ✅ | ❌ | ❌ | ❌ | Admin only |
| Remove workspace users | ✅ | ❌ | ❌ | ❌ | Admin only |
| Create/manage groups | ✅ | ❌ | ❌ | ❌ | Admin only |
| Assign workspace roles | ✅ | ❌ | ❌ | ❌ | Admin only |
| **Design & Branding** | | | | | |
| Create themes | ✅ | ❌ | ✅ | ❌ | Admin and theme editor |
| Edit themes | ✅ | ❌ | ✅ | ❌ | Admin and theme editor |
| Delete themes | ✅ | ❌ | ✅ | ❌ | Admin and theme editor |
| Manage fonts | ✅ | ❌ | ✅ | ❌ | Admin and theme editor |
| Manage media library | ✅ | ❌ | ✅ | ❌ | Admin and theme editor |
| **Runtime Operations** | | | | | |
| Create builds | ✅ | ❌ | ❌ | ✅ | Admin and runtime editor |
| Edit active policies | ✅ | ❌ | ❌ | ✅ | Admin and runtime editor |
| Manage scheduled processes | ✅ | ❌ | ❌ | ✅ | Admin and runtime editor |
| Manage config param overrides | ✅ | ❌ | ❌ | ✅ | Admin and runtime editor |
| Edit process instances | ✅ | ❌ | ❌ | ✅ | Admin and runtime editor |
### Project-level capabilities
| Capability | project\_owner | project\_editor | project\_viewer | Notes |
| -------------------------- | -------------- | --------------- | --------------- | ---------------------- |
| **Access Control** | | | | |
| Grant project access | ✅ | ❌ | ❌ | Owner only |
| Revoke project access | ✅ | ❌ | ❌ | Owner only |
| Transfer project ownership | ✅ | ❌ | ❌ | Owner can transfer |
| **Project Administration** | | | | |
| Delete project | ✅ | ❌ | ❌ | Owner only (permanent) |
| Edit project settings | ✅ | ✅ | ❌ | Owner and editor |
| Archive project | ✅ | ❌ | ❌ | Owner only |
| **Process Design** | | | | |
| Create processes | ✅ | ✅ | ❌ | Owner and editor |
| Edit processes | ✅ | ✅ | ❌ | Owner and editor |
| Delete processes | ✅ | ✅ | ❌ | Owner and editor |
| View processes | ✅ | ✅ | ✅ | All roles can view |
| Test processes | ✅ | ✅ | ✅ | All roles can test |
| **Configuration** | | | | |
| Manage enumerations | ✅ | ✅ | ❌ | Owner and editor |
| Configure templates | ✅ | ✅ | ❌ | Owner and editor |
| Set up integrations | ✅ | ✅ | ❌ | Owner and editor |
| Manage workflows | ✅ | ✅ | ❌ | Owner and editor |
| Configure UI components | ✅ | ✅ | ❌ | Owner and editor |
| **Runtime** | | | | |
| Create builds | ✅ | ✅ | ❌ | Owner and editor |
| Manage active policies | ✅ | ✅ | ❌ | Owner and editor |
| View runtime status | ✅ | ✅ | ✅ | All roles |
| **Export & Audit** | | | | |
| Export project | ✅ | ✅ | ❌ | Owner and editor |
| View audit logs | ✅ | ✅ | ✅ | All roles |
## Permission inheritance patterns
### Workspace to project inheritance
Understanding how workspace roles interact with project roles is critical for proper access management.
**Key Principles:**
1. **Workspace roles DO NOT automatically grant project access**
* A user with `workspace_admin` still needs explicit project role to access specific projects
* Exception: `workspace_admin` can grant themselves access via admin privileges
2. **Project roles are additive to workspace permissions**
* User can have `workspace_user` + `project_editor` on specific project
* Permissions combine (union), not override
3. **Most permissive permission wins**
* If user has `project_viewer` via one group and `project_editor` via another, they get editor access
4. **Multiple workspace roles can be assigned simultaneously**
* Users can combine workspace roles for specialized access patterns
* Example: A user can be both `theme_editor` and `runtime_editor` in the same workspace
* Permissions from all assigned roles combine (union), enabling flexible role compositions
**Examples:**
```
Scenario 1: Workspace User Creates Project
- User role: workspace_user
- Action: Creates new project "Project X"
- Result: User automatically becomes project_owner of "Project X"
Scenario 2: Workspace Admin Needs Project Access
- User role: workspace_admin
- Action: Wants to edit "Project Y" (not owner)
- Required: Must be granted project_editor or project_owner role on "Project Y"
- Note: Admin can grant themselves this access via admin privileges
Scenario 3: Multiple Role Assignments
- User role: workspace_user
- Project roles: project_viewer on "Project A", project_editor on "Project B"
- Result: Read-only access to Project A, full edit access to Project B
Scenario 4: Mix and Match Roles (Development Environment)
- User roles: theme_editor + runtime_editor
- Context: Development/QA environments where designers and developers need combined access
- Combined capabilities:
- Full theme management (fonts, media library, theme creation/editing) from theme_editor
- Runtime operations (create builds, edit policies, manage scheduled processes, config parameters) from runtime_editor
- Base workspace capabilities (create projects, view workspace resources) from workspace_user inheritance
- Use case: UI/UX developers working in dev environments who need both design and deployment capabilities
```
### Group-based permission inheritance
**Group Membership Resolution:**
1. User's permissions = Union of (individual permissions + all group permissions)
2. More permissive permission always wins
3. No negative permissions (cannot restrict via groups)
**Example:**
```
User: John
- Individual: project_viewer on Project X
- Group A membership: project_editor on Project X
- Group B membership: workspace_runtime_editor
Result:
- Project X access: project_editor (more permissive than viewer)
- Workspace: workspace_runtime_editor capabilities
- Combined: Full project editing + runtime management
```
## Special permission features
### Read-only view behavior
When a user has read-only permissions (e.g., `project_viewer` role), they experience:
**Visible but Disabled:**
* All configuration elements visible but not editable
* Save buttons hidden or disabled
* Edit controls grayed out or absent
* Delete actions not available
**Available Functionality:**
* Export operations (where applicable)
* Audit log access
* Usage overview and tracking
* Copy operations to other projects/libraries (for reference)
* Process and workflow testing through interface
**UI Indicators:**
* "View" label instead of "Configure" in contextual menus
* Read-only badges or indicators
* No modification prompts or warnings
### Bulk permission selection
When configuring custom roles (future feature), bulk selection streamlines permission assignment.
**Bulk Selection Categories:**
| Category | Applies To | Selectable Operations |
| ------------------------- | ------------------------------------------ | -------------------------- |
| **Workspace Entities** | Projects, Themes, Fonts, Media, Audit Logs | Read, Edit, Create, Delete |
| **Access Management** | Users, Groups, Roles, Platform Status | Read, Edit, Create, Delete |
| **Runtime Permissions** | Builds, Policies, Processes, Config Params | Read, Edit, Create, Delete |
| **Project Configuration** | All project resources | Read, Edit, Create, Delete |
**How Bulk Selection Works:**
1. Select permission category (e.g., "Workspace Entities")
2. Choose operation level (e.g., "Read")
3. All resources in category receive selected permission
4. Individual permissions can be adjusted afterward
5. Saves time when creating roles with consistent patterns
### Permission dependencies
Certain permissions automatically include others to ensure functionality:
**Workspace Level:**
* Any workspace permission → automatically includes `workspace_read`
* Any workspace edit permission → should include `workspace_edit`
**Project Level:**
* Any project permission → automatically includes `project_read` (backend)
* Note: `project_read` not displayed in UI but sent to backend
**Rationale:**
Read permissions provide the foundation for all other operations. Without read access, users cannot see resources to edit, create, or delete them.
## Related documentation
Overview of FlowX workspace access rights and role hierarchy
Technical implementation details, UI mappings, and naming conventions
Practical guidance for choosing and assigning appropriate roles
Overview of authentication and authorization in FlowX
Setting up identity and access management with Keycloak
Understanding workspaces and organizing projects
# Workspaces access rights
Source: https://docs.flowx.ai/5.1/setup-guides/access-management/workspaces-access-rights
Overview of FlowX workspaces access rights and role-based access control
**Documentation Navigation:**
* **Workspaces Access Rights** (Current) - Role overview and concepts
* [Complete Permissions Matrix](/5.1/setup-guides/access-management/roles-permissions-matrix) - Detailed permission specifications
* [Permission Reference Guide](/5.1/setup-guides/access-management/permission-reference-guide) - Technical implementation details
* [Role Selection Guide](/5.1/setup-guides/access-management/role-selection-guide) - Practical scenarios and best practices
FlowX 5.0 introduces a comprehensive role-based access control system with predefined roles at organization, workspace, and project levels.
## Overview of workspaces access rights
FlowX 5.0 provides a structured role hierarchy designed to support multi-tenant workspace architecture while maintaining security and governance. The system includes predefined roles that cannot be modified, ensuring consistent access patterns across all FlowX deployments.

## Authentication and authorization architecture
FlowX 5.0 separates authentication and authorization into distinct systems:
**Handles user identity and login**
* User login and identity verification
* Token generation for authenticated users
* User creation and management in identity provider
* Service account identification with `SA_FLOWX` role
**Manages access control and permissions**
* Endpoint access control within FlowX Designer
* Workspace and project permissions
* Role and group management
* ACL-based fine-grained access control
* Database-stored permissions for better performance
**Designer vs Runtime Permissions**
* **Designer Permissions (New in 5.0)**: Control access to FlowX Designer interface, managed through workspaces and the new role system
* **Runtime Permissions**: Control process execution and data access, continue to be managed through Keycloak roles and remain unchanged from FlowX 4.x
All roles and permissions described in this document apply only to FlowX Designer access.
## Configuration and Runtime access
**Project-level roles for design and building**
* Process and workflow design
* UI templates and integrations
* Project settings and resources
* **Roles**: Owner, Editor, Viewer
* **Scope**: Per-project assignment
**Workspace-level roles for deployment and execution**
* Build creation and deployment
* Process instance management
* Scheduled processes and policies
* Runtime environment overrides
* **Roles**: Runtime Editor, Admin
* **Scope**: Workspace-wide application
**Key Distinction**: Project roles provide **configuration access only**. Runtime operations require separate workspace-level roles like `workspace_runtime_editor`, `workspace_admin` or `workspace_user`, etc.
## User types
FlowX distinguishes between two primary user types, each with different access patterns and authentication requirements:
### Designer users
**Users who access FlowX Designer to configure and manage applications**
**Characteristics:**
* Created in FlowX database upon first login to Designer
* Managed through the workspace and role system described in this document
* Authentication handled by external provider (e.g., Keycloak)
* Authorization controlled by FlowX Designer roles and permissions
**Use Cases:**
* Platform administrators
* Business analysts and configurators
* Process designers and developers
* UI/UX designers and theme editors
### Runtime users
**Users who interact with applications built using FlowX, but do not necessarily have access to FlowX Designer**
**Characteristics:**
* Not created in FlowX database unless they also log into FlowX Designer
* Receive access to applications powered by FlowX via runtime roles and groups from external authentication system (e.g., Keycloak)
* Permissions at runtime (e.g., swimlane access, task management) are granted based on roles/groups parsed from user's access token
* No visibility in Designer unless they have both runtime and Designer access
**Subtypes:**
**Internal staff using FlowX-powered applications**
* Bank tellers, loan officers, branch staff
* Customer service representatives
* Back-office operational teams
* Task management and workflow execution capabilities
* Access granted through organizational roles and group memberships
**Organization's customers interfacing with customer-facing applications**
* External customers using digital banking, insurance, or other services
* Indirect users of FlowX runtime via organization's digital channels
* Typically authenticated through customer identity systems
* Limited to self-service and customer-facing workflows
**User Overlap Between Designer and Runtime**
Users can have both Designer access and Runtime access simultaneously. When this occurs:
* The user is created in FlowX database with Designer roles and permissions
* The same user can also interact with runtime applications using their runtime roles from Keycloak
* Designer permissions control what they can configure in FlowX Designer
* Runtime permissions control what processes and tasks they can access in deployed applications
## Role architecture
Cross-workspace administrative access for managing the entire FlowX organization
**Roles:**
* Organization Admin
Workspace-specific roles for managing resources, users, and configurations within a workspace
**Roles:**
* Workspace Admin
* Workspace User
* Theme Editor
* Workspace Runtime Editor
Project-specific roles for controlling access to individual projects and their resources
**Roles:**
* Project Owner
* Project Editor
* Project Viewer
## Organization level roles
### Organization admin
**Full administrative access across the entire FlowX organization**
**Key Responsibilities:**
* Managing all workspaces across the organization
* Creating and organizing workspace structure
* Managing organization-wide users and groups
* Overseeing system health and platform status
* Implementing organization-wide policies and configurations
**Key Characteristics:**
* Cannot be edited, duplicated, or deleted
* Can only be assigned in the Organization admin interface
* Hidden from workspace role lists
* Highest level of access in the FlowX hierarchy
* Should be limited to 2-3 trusted platform administrators
**Use Cases:**
* Platform administrators managing FlowX deployment
* IT managers responsible for multi-workspace environments
* System architects overseeing enterprise FlowX usage
#### Key permissions summary
✅ Create, edit, and delete workspaces\
✅ Configure organization settings\
✅ Manage organization-wide users and groups\
✅ Access all projects across all workspaces
✅ Manage global font resources\
✅ Configure out of office policies\
✅ Monitor platform status\
✅ Manage environment information
✅ View organization audit logs\
✅ Access all workspace audit logs\
✅ Monitor system health across organization\
❌ Cannot edit or delete audit entries (read-only)
**Critical Security Note**
The Organization Admin role should be assigned sparingly. Organization admins have access to **all projects in all workspaces** without exception. Limit this role to trusted platform administrators only.
For complete permission specifications, see the [Organization Admin Permission Matrix](/5.1/setup-guides/access-management/roles-permissions-matrix#organization-admin-permission-matrix).
## Workspace level roles
### Workspace admin
**Complete control over workspace-level resources and users**
**Key Responsibilities:**
* Managing workspace users, groups, and roles
* Overseeing all projects within the workspace
* Configuring workspace themes and branding
* Managing workspace-level settings and policies
* Handling workspace resource allocation
* Granting and revoking project access
**Key Characteristics:**
* Cannot be edited or deleted (predefined role)
* Can be assigned to users and groups within the workspace
* Listed in workspace role management interfaces
* Cannot manage organization-wide settings
* Has admin access to all projects in their workspace
**Use Cases:**
* Business unit managers
* Department heads overseeing team projects
* Workspace administrators with full workspace responsibility
* Team leads managing workspace access and resources
#### Key permissions summary
✅ Create projects and libraries\
✅ Manage workspace themes and fonts\
✅ Manage global media library\
✅ Configure workspace settings\
✅ View workspace audit logs
✅ Add and remove workspace users\
✅ Create and manage groups\
✅ Assign workspace roles\
✅ Manage user permissions\
❌ Cannot create or delete workspaces
✅ Create and view builds\
✅ Manage active policies\
✅ Configure scheduled processes\
✅ Manage configuration parameter overrides\
✅ View and edit process instances
For complete permission specifications, see the [Workspace Admin Permission Matrix](/5.1/setup-guides/access-management/roles-permissions-matrix#workspace-admin-permission-matrix).
### Workspace user
**Standard workspace access with project creation capabilities**
**Key Responsibilities:**
* Creating new projects within the workspace
* Working on assigned projects with appropriate project-level roles
* Viewing workspace resources (themes, fonts, media)
* Basic workspace participation
**Key Characteristics:**
* Cannot be edited or deleted (predefined role)
* Default role for most workspace members
* Can create projects (becomes project owner automatically)
* Needs explicit project access to work on others' projects
* Limited administrative capabilities
**Use Cases:**
* Business analysts and configurators
* Process designers and developers
* Junior team members
* Team members who build projects within defined boundaries
* General workspace members
#### Key permissions summary
✅ Create projects and libraries\
✅ View workspace themes (read-only)\
✅ View workspace fonts (read-only)\
✅ View global media library (read-only)\
✅ View workspace users, groups, and roles (read-only)\
❌ Cannot manage workspace settings
✅ View builds for accessible projects\
✅ View active policies (read-only)\
✅ View scheduled processes (read-only)\
✅ View configuration parameters (read-only)\
✅ View process instances for accessible projects (read-only)\
❌ Cannot create or modify runtime configurations
✅ Create new projects (becomes owner)\
✅ Access granted projects based on project role (read-only)\
❌ Cannot view all workspace projects by default\
❌ Needs explicit project access from project owner (read-only)
For complete permission specifications, see the [Workspace User Permission Matrix](/5.1/setup-guides/access-management/roles-permissions-matrix#workspace-user-permission-matrix).
### Theme editor
**Specialized role for visual design and branding management**
**Key Responsibilities:**
* Designing and customizing application themes
* Managing workspace fonts and typography
* Organizing and maintaining media library
* Creating visual design assets
* Ensuring brand consistency across projects
**Key Characteristics:**
* Extends workspace\_user with design permissions
* Same base permissions as workspace\_user
* Additional permissions for visual asset management
* Cannot be edited or deleted (predefined role)
* Focused on design and branding elements
**Use Cases:**
* UI/UX designers
* Brand managers ensuring visual consistency
* Visual design specialists
* Marketing team members managing brand assets
* Design teams customizing FlowX applications
#### Key permissions summary
✅ Create, edit, and delete themes\
✅ Manage workspace fonts (full access)\
✅ Manage global media library\
✅ Set default themes\
✅ Configure theme sections
✅ Create projects and libraries\
✅ View workspace resources\
✅ View runtime information (read-only)\
✅ Standard workspace user capabilities
Theme editors have the same project access rules as workspace users. They can create projects but need explicit access to work on others' projects.
For complete permission specifications, see the [Theme Editor Permission Matrix](/5.1/setup-guides/access-management/roles-permissions-matrix#theme-editor-permission-matrix).
### Workspace runtime editor
**Extended workspace user role with runtime configuration capabilities**
**Key Responsibilities:**
* Creating and managing workspace builds
* Configuring runtime environments and deployments
* Managing active policies and deployment strategies
* Overriding configuration parameters for runtime
* Monitoring and managing process instances
* Scheduling process executions
**Key Characteristics:**
* Extends workspace\_user with runtime permissions
* Same base permissions as workspace\_user
* Additional permissions for runtime environment management
* Cannot be edited or deleted (predefined role)
* Focused on deployment and runtime operations
**Use Cases:**
* DevOps engineers managing deployments
* Release managers handling build processes
* Runtime environment administrators
* Technical operations staff
* System administrators with runtime responsibilities
#### Key permissions summary
✅ Create builds from library versions\
✅ Edit active policies\
✅ Manage scheduled processes (activate, deactivate, delete)\
✅ Create, edit, and delete configuration parameter overrides\
✅ Edit process instances
✅ Create projects and libraries\
✅ View workspace resources\
✅ Standard workspace user capabilities
**Runtime Access Scope Change in 5.0**
In FlowX 5.0, runtime permissions moved from project level to workspace level. Users with workspace\_runtime\_editor can manage runtime configurations across **all projects in the workspace**, not just specific projects.
For complete permission specifications, see the [Workspace Runtime Editor Permission Matrix](/5.1/setup-guides/access-management/roles-permissions-matrix#workspace-runtime-editor-permission-matrix).
## Project level roles
### Project owner
**Complete ownership and governance of project resources**
**Key Responsibilities:**
* Full project governance and decision-making authority
* Granting and revoking project access to other users
* Managing all project configurations and resources
* Approving major project changes
* Overseeing project lifecycle
**Key Characteristics:**
* Automatically assigned to project creator
* Cannot be edited, duplicated, deleted, or manually assigned through UI
* Hidden from role selection interfaces
* System-managed role with highest project-level access
* Permanent assignment for project lifecycle
* Only one owner per project
**Automatic Assignment:**
* Automatically granted when creating a project
* Can be transferred to another user (ownership transfer)
* Cannot be removed without transferring to another user
**Use Cases:**
* Project leads with full authority
* Technical architects owning project decisions
* Product owners managing project direction
* Users who created the project
#### Key permissions summary
✅ Complete project ownership and governance\
✅ Grant/revoke project access\
✅ Delete project\
✅ Transfer project ownership\
✅ Full administrative control
✅ All configuration resources (full access)\
✅ Processes, workflows, enumerations\
✅ Templates, media, integrations\
✅ AI agents, reusable resources\
✅ All project settings
**Non-Configurable Permissions**
Project owner permissions are not configurable in the UI. The role automatically includes all project-level permissions without exception.
For complete permission specifications, see the [Project Owner Permission Matrix](/5.1/setup-guides/access-management/roles-permissions-matrix#project-owner-permission-matrix).
### Project editor
**Full project configuration and management capabilities**
**Key Responsibilities:**
* Building and configuring project processes
* Designing workflows and integrations
* Creating UI configurations
* Managing project resources
* Creating builds and deployments
* Day-to-day project development
**Key Characteristics:**
* Can be assigned to users and groups
* Comprehensive project access without ownership rights
* Cannot grant/revoke project access to others
* Standard role for project team members
* Cannot be edited or deleted (predefined role)
**Use Cases:**
* Senior developers and configurators
* Technical leads on project teams
* Business analysts with advanced permissions
* Team members with full project configuration needs
* Development team members
#### Key permissions summary
✅ All configuration resources (full access)\
✅ Processes, workflows, enumerations\
✅ Templates, media, integrations\
✅ AI agents, reusable resources\
✅ All project settings\
❌ Cannot manage project access
❌ Cannot grant/revoke project access\
❌ Cannot delete project\
❌ No administrative rights over project
For complete permission specifications, see the [Project Editor Permission Matrix](/5.1/setup-guides/access-management/roles-permissions-matrix#project-editor-permission-matrix).
### Project viewer
**Read-only access to project configuration and settings**
**Key Responsibilities:**
* Reviewing project configurations
* Auditing processes and workflows
* Compliance checking and documentation
* Understanding project structure for training
* Monitoring project status
**Key Characteristics:**
* Can be assigned when granting project access
* Completely read-only access
* Safe role for stakeholders needing visibility
* No modification capabilities
* Can test processes through interface
* Suitable for audit and review purposes
**Use Cases:**
* Business stakeholders and executives
* Quality assurance team members
* External consultants needing project visibility
* Audit and compliance personnel
* New team members during onboarding
* Documentation and training purposes
#### Key permissions summary
✅ View all configuration resources\
✅ View processes, workflows, enumerations\
✅ View templates, media, integrations\
✅ View project settings and dependencies\
✅ Export project resources
✅ Test processes and workflows
❌ Cannot edit any resources
❌ Cannot create any resources\
❌ Cannot delete any resources\
❌ Cannot modify configurations\
❌ Cannot create builds or deployments
**Testing Capability**
Project viewers can test processes and workflows through the interface, allowing them to understand how processes work without the ability to modify configurations.
For complete permission specifications, see the [Project Viewer Permission Matrix](/5.1/setup-guides/access-management/roles-permissions-matrix#project-viewer-permission-matrix).
## Role comparison matrix
### Quick capability comparison
The following table provides a high-level comparison of key capabilities across all roles:
| Capability | org\_admin | workspace\_admin | workspace\_user | theme\_editor | runtime\_editor | project\_owner | project\_editor | project\_viewer |
| ------------------------- | ---------- | ---------------- | --------------- | ------------- | --------------- | -------------- | --------------- | --------------- |
| **Workspace Management** | | | | | | | | |
| Create workspace | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Manage workspace users | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Create projects | ✅ | ✅ | ✅ | ✅ | ✅ | N/A | N/A | N/A |
| **Design & Branding** | | | | | | | | |
| Edit themes | ✅ | ✅ | ❌ | ✅ | ❌ | N/A | N/A | N/A |
| Manage fonts | ✅ | ✅ | ❌ | ✅ | ❌ | N/A | N/A | N/A |
| **Runtime Operations** | | | | | | | | |
| Create builds | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ |
| Edit active policy | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ |
| Manage config parameters | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ |
| **Project Configuration** | | | | | | | | |
| Edit processes | ✅ | ✅\* | ✅\* | ✅\* | ✅\* | ✅ | ✅ | ❌ |
| Manage templates | ✅ | ✅\* | ✅\* | ✅\* | ✅\* | ✅ | ✅ | ❌ |
| Configure integrations | ✅ | ✅\* | ✅\* | ✅\* | ✅\* | ✅ | ✅ | ❌ |
| **Access Control** | | | | | | | | |
| Grant project access | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
| Manage workspace access | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
\* Workspace-level roles can only edit project resources for projects they have been explicitly granted access to. Having a workspace role does not automatically grant access to all projects.
## Default groups
### Everyone in workspace group
Every workspace automatically includes a special system-managed group for simplified access management to all workspace users.
**Display Name:** Everyone from \
**Purpose:**
Provides convenient access management for all users associated with a workspace, enabling efficient bulk access grants.
**Automatic Behavior:**
* ✅ Created automatically during workspace provisioning
* ✅ Users automatically added when granted workspace access
* ✅ Users automatically removed when workspace access revoked
* ✅ Pre-selected when creating new projects/libraries
* ✅ Appears in user/group search results
* ❌ Cannot be edited, deleted, or duplicated
* ❌ Membership cannot be manually modified
**Common Use Cases:**
* Grant all workspace members read access to reference projects
* Provide baseline visibility across workspace projects
* Simplify onboarding by giving new users automatic access to shared resources
* Create workspace-wide shared libraries
**Example:**
```
Workspace: "Product Development"
Group: "all_users_product_development"
Display: "Everyone from Product Development"
```
**No Individual Exclusions**
The "Everyone in workspace" group includes ALL workspace members without exception. You cannot remove specific users from this group or create exclusions. If you need selective access, create custom groups instead.
### Custom groups
**When to create custom groups:**
* Team-based access (e.g., "Development Team", "QA Team")
* Role-based access (e.g., "Senior Developers", "Stakeholders")
* Project-specific access (e.g., "Project Alpha Team")
* Cross-functional teams (e.g., "Release Management")
**Group naming best practices:**
* Use descriptive names indicating purpose
* Follow consistent naming conventions
* Example format: `[function]_[department]_[sub-group]`
* Good examples: `dev_team_frontend`, `stakeholders_finance`, `editors_project_phoenix`
**Group operations:**
* Add members individually or bulk import
* Assign workspace-level roles to groups
* Use groups when granting project access
* Remove members or delete entire groups
**Best practices:**
* Use groups instead of individual assignments when possible
* Document group purposes clearly
* Review group memberships regularly
* Plan group structure before implementation
For comprehensive groups documentation and strategies, see the [Role Selection & Management Guide](/5.1/setup-guides/access-management/role-selection-guide#groups-and-access-management).
## Quick start guide
### Grant workspace access
Go to your workspace → Access Management → Users
Click "Add" button → Search for user by name or email
Select appropriate role (typically `workspace_user` for standard access) → Confirm
### Assign user to project
Go to project → Settings → Access Management
Click "Grant Access" → Search for user or group
Choose role (`project_editor` for full access, `project_viewer` for read-only) → Confirm
### Create a custom group
Go to workspace → Access Management → Groups
Click "Add" → Enter descriptive group name and description
Add users to group → Assign workspace-level role to group → Save
## Legacy role migration
### FlowX 4.x to 5.0 role mapping
FlowX 4.x roles stored in Keycloak are not automatically migrated. Manual role assignment is required in FlowX 5.0.
| FlowX 4.x Role | FlowX 5.0 Equivalent | Scope Change | Notes |
| --------------------- | ------------------------------------ | -------------------- | ------------------------------- |
| `FLOWX_ADMIN` | `workspace_admin` | Now workspace-scoped | Was global, now per-workspace |
| `FLOWX_CONFIGURATOR` | `workspace_user` or `project_editor` | Depends on needs | Choose based on required access |
| `FLOWX_UI_DESIGNER` | `theme_editor` | Workspace-scoped | Enhanced capabilities |
| `FLOWX_VIEWER` | `project_viewer` | Now project-specific | Was global, now per-project |
| Custom Keycloak roles | Manual review required | N/A | Assess against new structure |
### Key migration considerations
Roles are now workspace-scoped rather than global. Reassign within workspace context.
Runtime permissions moved to workspace level. Use `workspace_runtime_editor` role.
Roles now stored in FlowX database for better performance and control.
New role hierarchy requires review of user access patterns.
For a comprehensive migration guide with step-by-step procedures, see the [Migration Guide: FlowX 4.x to 5.0](/5.1/setup-guides/access-management/role-selection-guide#migration-guide-flowx-4x-to-50).
## Best practices summary
Begin with minimum required access (e.g., `project_viewer`) and escalate as needed based on demonstrated requirements.
Create and use groups for teams and functions rather than managing individual user access.
Conduct quarterly access reviews, remove inactive users, and validate permissions match responsibilities.
Maintain records of role assignments, especially for elevated privileges and exceptions.
Always grant the minimum permissions necessary for users to perform their job functions.
Have clear processes for role changes, project ownership transfers, and access removal.
For detailed best practices and practical scenarios, see the [Role Selection & Management Guide](/5.1/setup-guides/access-management/role-selection-guide#best-practices-summary).
## Current limitations in FlowX 5.1
The following features have specific limitations in FlowX 5.1:
**Role Management:**
* Custom roles not available
* Bulk role assignment tools not available
**Workspace Features:**
* Workspace deletion functionality not available
* Moving projects/libraries between workspaces not supported
**Integration Features:**
* Runtime roles and groups will return errors if Keycloak isn't used as the authentication provider
## Troubleshooting common issues
**Possible Causes:**
* User not assigned to workspace
* No role assigned in workspace
* User not in any workspace groups
**Solutions:**
1. Verify user is in workspace user list
2. Check role assignments
3. Validate group memberships
4. Contact workspace administrator for access
**Possible Causes:**
* No project-level access granted
* Workspace role doesn't auto-grant project access
* Project visibility restrictions
**Solutions:**
1. Contact project owner for access
2. Verify workspace membership
3. Check if project exists in current workspace
4. Request appropriate project role
**Possible Causes:**
* Cached permissions not updated
* User hasn't logged out and back in
* Conflicting role assignments
**Solutions:**
1. Log out completely and log back in
2. Clear browser cache
3. Wait a few minutes for permissions to propagate
4. Contact workspace administrator if issue persists
For comprehensive troubleshooting with detailed diagnostic procedures, see [Troubleshooting Permission Issues](/5.1/setup-guides/access-management/role-selection-guide#troubleshooting-permission-issues).
## Related documentation
Detailed permission specifications for all FlowX roles with comprehensive matrices
Technical implementation details, UI mappings, and permission naming conventions
Practical scenarios, best practices, troubleshooting, and migration guidance
Overview of FlowX access management system and authentication architecture
Setting up identity and access management with Keycloak
Understanding workspaces and their role in organizing projects
# FlowX Admin setup
Source: https://docs.flowx.ai/5.1/setup-guides/admin-setup-guide
Complete configuration reference for the FlowX Admin microservice, including logging, databases, Kafka, and various subsystems.
This guide provides a comprehensive reference for configuring the FlowX Admin microservice using environment variables and configuration files.
## Infrastructure Prerequisites
Before setting up the Admin microservice, ensure the following components are properly set up:
* **Database Instance**: The Admin microservice connects to the same database as the FlowX.AI Engine.
* **MongoDB**: For additional data management.
* **Redis**: For caching and transient data storage.
* **Kafka**: For audit logs, events, and messaging (if using FlowX.AI Audit functionality).
## Core configuration
### Server configuration
| Environment Variable | Description | Default Value |
| ------------------------------------------- | -------------------------------------------------- | ------------- |
| `SERVER_PORT` | Port on which the Admin service will run | `8080` |
| `SPRING_APPLICATION_NAME` | Name of the application used for service discovery | `admin` |
| `SPRING_JACKSON_SERIALIZATION_INDENTOUTPUT` | Enable indented JSON output | `true` |
## Database configuration
The Admin microservice connects to the same PostgreSQL or Oracle database as the FlowX.AI Engine for storing process definitions.
| Environment Variable | Description | Default Value |
| ---------------------------- | -------------------------------- | ---------------------------------------- |
| `SPRING_DATASOURCE_URL` | JDBC URL for database connection | `jdbc:postgresql://localhost:5432/flowx` |
| `SPRING_DATASOURCE_USERNAME` | Database username | `postgres` |
| `SPRING_DATASOURCE_PASSWORD` | Database password | `[your-secure-password]` |
You will need to make sure that the user, password, connection link and database name are configured correctly, otherwise, you will receive errors at start time.
The database schema is managed by a [Liquibase](https://www.liquibase.org/) script provided with the Engine.
## MongoDB configuration
The Admin microservice also connects to a MongoDB database instance for additional data management.
| Environment Variable | Description | Default Value |
| ---------------------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------- |
| `DB_USERNAME` | MongoDB username | `data-model` |
| `DB_PASSWORD` | MongoDB password | `[your-secure-password]` |
| `DB_NAME` | MongoDB database name | `data-model` |
| `SPRING_DATA_MONGODB_URI` | MongoDB connection URI | `mongodb://${DB_USERNAME}:${DB_PASSWORD}@localhost:27017/${DB_NAME}?retryWrites=true` |
| `SPRING_DATA_MONGODB_UUIDREPRESENTATION` | UUID representation format | `standard` |
| `SPRING_DATA_MONGODB_STORAGE` | Storage type (Azure environments) | `mongodb` or `cosmosdb` |
| `MONGOCK_CHANGELOGSSCANPACKAGE_0_` | Mongock changelog scan package | `ai.flowx.admin.data.model.config.mongock` |
| `MONGOCK_TRANSACTIONENABLED` | Enable transactions for Mongock operations | `false` |
Ensure that the MongoDB configuration is compatible with the same database requirements as the FlowX.AI Engine, especially if sharing database instances.
## Redis and caching configuration
Redis is used for caching and storing transient data.
| Environment Variable | Description | Default Value | Status |
| ---------------------------- | --------------------------------- | ------------------------ | ---------------------- |
| `SPRING_DATA_REDIS_HOST` | Redis server hostname | `localhost` | **Recommended** |
| `SPRING_DATA_REDIS_PORT` | Redis server port | `6379` | **Recommended** |
| `SPRING_DATA_REDIS_PASSWORD` | Redis server password | `[your-secure-password]` | **Recommended** |
| `SPRING_REDIS_HOST` | Redis server hostname | `localhost` | **Deprecated** |
| `SPRING_REDIS_PORT` | Redis server port | `6379` | **Deprecated** |
| `SPRING_REDIS_PASSWORD` | Redis server password | `defaultpassword` | **Deprecated** |
| `SPRING_REDIS_TTL` | Default Redis TTL in milliseconds | `5000000` | Used in other settings |
The `SPRING_REDIS_*` variables are deprecated and will be removed in a future FlowX version. Please use the corresponding `SPRING_DATA_REDIS_*` variables instead.
## Kafka configuration
The Admin microservice uses Kafka for sending audit logs, managing scheduled timer events, platform component versions, and start timer event updates.
### General Kafka settings
| Environment Variable | Description | Default Value |
| -------------------------------- | ----------------------------- | ----------------- |
| `SPRING_KAFKA_BOOTSTRAPSERVERS` | Kafka broker addresses | `localhost:9092` |
| `SPRING_KAFKA_SECURITY_PROTOCOL` | Security protocol | `PLAINTEXT` |
| `KAFKA_MESSAGE_MAX_BYTES` | Maximum message size in bytes | `52428800` (50MB) |
### Kafka producer configuration
| Environment Variable | Description | Default Value |
| --------------------------------------- | ---------------------- | ------------------------------------------------------------- |
| `SPRING_KAFKA_PRODUCER_KEYSERIALIZER` | Key serializer class | `org.apache.kafka.common.serialization.StringSerializer` |
| `SPRING_KAFKA_PRODUCER_VALUESERIALIZER` | Value serializer class | `org.springframework.kafka.support.serializer.JsonSerializer` |
| `SPRING_KAFKA_PRODUCER_MAXREQUESTSIZE` | Maximum request size | `52428800` (50MB) |
### Kafka consumer configuration
| Environment Variable | Description | Default Value |
| ----------------------------------------------------------- | ------------------------------------------------------- | ---------------------------------------------- |
| `KAFKA_CONSUMER_GROUPID_GENERICPROCESSING` | Generic processing consumer group | `generic-processing-group` |
| `KAFKA_CONSUMER_THREADS_GENERICPROCESSING` | Generic processing threads | `6` |
| `KAFKA_CONSUMER_GROUPID_PROCESSSYNC` | Process sync consumer group | `process-sync-group` |
| `KAFKA_CONSUMER_THREADS_PROCESSSYNC` | Process sync consumer threads | `6` |
| `KAFKA_CONSUMER_GROUPID_BUSINESSRULESYNC` | Business rule sync consumer group | `business-rule-sync-group` |
| `KAFKA_CONSUMER_THREADS_BUSINESSRULESYNC` | Business rule sync consumer threads | `6` |
| `KAFKA_CONSUMER_GROUPID_REUSABLETEMPLATESYNC` | Reusable template sync consumer group | `reusable-template-sync-group` |
| `KAFKA_CONSUMER_THREADS_REUSABLETEMPLATESYNC` | Reusable template sync consumer threads | `6` |
| `KAFKA_CONSUMER_GROUPID_PROCESSCORRECTIONAFTERAPPOPERATION` | Process correction after app operation consumer group | `process-correction-after-app-operation-group` |
| `KAFKA_CONSUMER_THREADS_PROCESSCORRECTIONAFTERAPPOPERATION` | Process correction after app operation consumer threads | `6` |
| `KAFKA_AUTHEXCEPTIONRETRYINTERVAL` | Auth exception retry interval (seconds) | `10` |
### Topic naming configuration
| Environment Variable | Description | Default Value |
| -------------------------------- | ------------------------------------ | ---------------------------------------------------------------- |
| `DOT` | Reference to the primary separator | `${kafka.topic.naming.separator}` |
| `DASH` | Reference to the secondary separator | `${kafka.topic.naming.separator2}` |
| `KAFKA_TOPIC_NAMING_PACKAGE` | Base package name | `ai${dot}flowx${dot}` |
| `KAFKA_TOPIC_NAMING_ENVIRONMENT` | Environment name | ` ` |
| `KAFKA_TOPIC_NAMING_VERSION` | Topic version | `${dot}v1` |
| `KAFKA_TOPIC_NAMING_SEPARATOR` | Primary separator | `.` |
| `KAFKA_TOPIC_NAMING_SEPARATOR2` | Secondary separator | `-` |
| `KAFKA_TOPIC_NAMING_PREFIX` | Combined prefix | `${kafka.topic.naming.package}${kafka.topic.naming.environment}` |
| `KAFKA_TOPIC_NAMING_SUFFIX` | Combined suffix | `${kafka.topic.naming.version}` |
### Kafka topics configuration
#### Application topics
| Environment Variable | Description | Pattern | Default Value |
| ------------------------------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| `KAFKA_TOPIC_APPLICATION_SYNCRESPONSE` | Sync response topic | `${kafka.topic.naming.prefix}application-version.sync.out${kafka.topic.naming.suffix}` | `ai.flowx.application-version.sync.out.v1` |
| `KAFKA_TOPIC_APPLICATION_PROCESSSYNC` | Process sync topic | `${kafka.topic.naming.prefix}application-version.sync.process.in${kafka.topic.naming.suffix}` | `ai.flowx.application-version.sync.process.in.v1` |
| `KAFKA_TOPIC_APPLICATION_BUSINESSRULESYNC` | Business rule sync topic | `${kafka.topic.naming.prefix}application-version.sync.business-rule.in${kafka.topic.naming.suffix}` | `ai.flowx.application-version.sync.business-rule.in.v1` |
| `KAFKA_TOPIC_APPLICATION_REUSABLETEMPLATESYNC` | Reusable template sync topic | `${kafka.topic.naming.prefix}application-version.sync.reusable-template.in${kafka.topic.naming.suffix}` | `ai.flowx.application-version.sync.reusable-template.in.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCEUPDATEPROPAGATION` | Resource update propagation topic | `${kafka.topic.naming.prefix}application-version.resource.update.propagation${kafka.topic.naming.suffix}` | `ai.flowx.application-version.resource.update.propagation.v1` |
| `KAFKA_TOPIC_APPLICATION_CORRECTIONAFTERAPPOPERATION_IN_PROCESS` | Correction after app operation → process request | `${kafka.topic.naming.prefix}application-version.correction-after-app-operation.process.request${kafka.topic.naming.suffix}` | `ai.flowx.application-version.correction-after-app-operation.process.request.v1` |
| `KAFKA_TOPIC_APPLICATION_CORRECTIONAFTERAPPOPERATION_IN_BUSINESSRULE` | Correction after app operation → business rule | `${kafka.topic.naming.prefix}application-version.correction-after-app-operation.business-rule.request${kafka.topic.naming.suffix}` | `ai.flowx.application-version.correction-after-app-operation.business-rule.request.v1` |
| `KAFKA_TOPIC_APPLICATION_CORRECTIONAFTERAPPOPERATION_IN_REUSABLETEMPLATE` | Correction after app operation → reusable template | `${kafka.topic.naming.prefix}application-version.correction-after-app-operation.reusable-template.request${kafka.topic.naming.suffix}` | `ai.flowx.application-version.correction-after-app-operation.reusable-template.request.v1` |
| `KAFKA_TOPIC_APPLICATION_CORRECTIONAFTERAPPOPERATION_OUT` | Correction after app operation response topic | `${kafka.topic.naming.prefix}application-version.correction-after-app-operation.response${kafka.topic.naming.suffix}` | `ai.flowx.application-version.correction-after-app-operation.response.v1` |
#### Audit topics
| Environment Variable | Description | Pattern | Default Value |
| ----------------------- | ------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------- |
| `KAFKA_TOPIC_AUDIT_OUT` | Audit output topic | `${kafka.topic.naming.prefix}core${dot}trigger${dot}save${dot}audit${kafka.topic.naming.suffix}` | `ai.flowx.core.trigger.save.audit.v1` |
#### Platform Topics
| Environment Variable | Description | Pattern | Default Value |
| -------------------------------------------- | --------------------------------- | -------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- |
| `KAFKA_TOPIC_PLATFORM_COMPONENTSVERSIONS_IN` | Components versions caching topic | `${kafka.topic.naming.prefix}core${dot}trigger${dot}platform${dot}versions${dot}caching${kafka.topic.naming.suffix}` | `ai.flowx.core.trigger.platform.versions.caching.v1` |
#### Events gateway topics
| Environment Variable | Description | Pattern | Default Value |
| --------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- |
| `KAFKA_TOPIC_EVENTSGATEWAY_OUT_MESSAGE` | Commands message output topic | `${kafka.topic.naming.prefix}eventsgateway${dot}process${dot}commands${dot}message${kafka.topic.naming.suffix}` | `ai.flowx.eventsgateway.process.commands.message.v1` |
#### Build topics
| Environment Variable | Description | Pattern | Default Value |
| ------------------------------------------------ | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------- |
| `KAFKA_TOPIC_BUILD_RUNTIMEDATA` | Build runtime data topic | `${kafka.topic.naming.prefix}build${dot}runtime-data${kafka.topic.naming.suffix}` | `ai.flowx.build.runtime-data.v1` |
| `KAFKA_TOPIC_BUILD_STARTTIMEREVENTS_OUT_UPDATES` | Start timer events updates topic | `${kafka.topic.naming.prefix}build${dot}start${dash}timer${dash}events${dot}updates${dot}in${kafka.topic.naming.suffix}` | `ai.flowx.build.start-timer-events.updates.in.v1` |
#### Resource topics
| Environment Variable | Description | Pattern | Default Value |
| ------------------------------------- | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- |
| `KAFKA_TOPIC_RESOURCESUSAGES_REFRESH` | Resources usages refresh topic | `${kafka.topic.naming.prefix}application${dash}version${dot}resources${dash}usages${dot}refresh${kafka.topic.naming.suffix}` | `ai.flowx.application-version.resources-usages.refresh.v1` |
### OAuth authentication for Kafka
When using the `kafka-auth` profile, the following variables configure OAuth for Kafka:
| Environment Variable | Description | Default Value |
| -------------------------------- | ------------------------ | ---------------------- |
| `KAFKA_OAUTH_CLIENTID` | OAuth client ID | `kafka` |
| `KAFKA_OAUTH_CLIENTSECRET` | OAuth client secret | `kafka-secret` |
| `KAFKA_OAUTH_TOKEN_ENDPOINT_URI` | OAuth token endpoint URI | `kafka.auth.localhost` |
When using the `kafka-auth` profile, the security protocol will automatically be set to `SASL_PLAINTEXT` and the SASL mechanism will be set to `OAUTHBEARER`.
## CAS lib configuration
| Environment Variable | Description | Default Value |
| --------------------- | ---------------------------- | --------------- |
| `FLOWX_SPICEDB_HOST` | SpiceDB server hostname | `spicedb` |
| `FLOWX_SPICEDB_PORT` | SpiceDB server port | `50051` |
| `FLOWX_SPICEDB_TOKEN` | SpiceDB authentication token | `spicedb-token` |
## Logging configuration
The FlowX Admin microservice provides granular control over logging levels for different components:
| Environment Variable | Description | Default Value | |
| -------------------- | ------------------------------------------- | ------------- | - |
| `LOGGING_LEVEL_ROOT` | Log level for root Spring Boot microservice | `INFO` | |
| `LOGGING_LEVEL_APP` | Log level for application-specific code | `DEBUG` | |
## Localization settings
| Environment Variable | Description | Default Value |
| ------------------------------ | ---------------------------------- | ------------- |
| `APPLICATION_DEFAULTLOCALE` | Default locale for the application | `en` |
| `APPLICATION_SUPPORTEDLOCALES` | List of supported locales | `en, ro` |
## Health monitoring
| Environment Variable | Description | Default Value |
| ---------------------------------------------- | ---------------------------------------- | --------------------------------------- |
| `MANAGEMENT_HEALTH_DB_ENABLED` | Enable database health checks | `true` |
| `MANAGEMENT_HEALTH_KAFKA_ENABLED` | Enable Kafka health checks | `true` |
| `MANAGEMENT_SERVER_ADDRESS` | Management server bind address | `0.0.0.0` |
| `MANAGEMENT_SERVER_PORT` | Management server port | `8081` |
| `MANAGEMENT_SERVER_BASEPATH` | Base path for management endpoints | `/manage` |
| `MANAGEMENT_SECURITY_ENABLED` | Enable security for management endpoints | `false` |
| `MANAGEMENT_ENDPOINTS_WEB_BASEPATH` | Base path for actuator endpoints | `/actuator` |
| `MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE` | Endpoints to expose | `health,info,metrics,metric,prometheus` |
| `MANAGEMENT_ENDPOINT_HEALTH_PROBES_ENABLED` | Enable Kubernetes probes | `true` |
| `MANAGEMENT_ENDPOINT_HEALTH_SHOWDETAILS` | Show health check details | `always` |
| `MANAGEMENT_METRICS_EXPORT_PROMETHEUS_ENABLED` | Enable Prometheus metrics export | `false` |
### Platform health configuration
| Environment Variable | Description | Default Value |
| ----------------------------------------- | --------------------------------------------- | --------------------------------------- |
| `FLOWX_PLATFORMHEALTH_NAMESPACE` | Kubernetes namespace for health checks | `flowx` |
| `FLOWX_PLATFORMHEALTH_MANAGEMENTBASEPATH` | Base path for management endpoints | `${management.server.base-path}` |
| `FLOWX_PLATFORMHEALTH_ACTUATORBASEPATH` | Base path for actuator endpoints | `${management.endpoints.web.base-path}` |
| `FLOWX_PLATFORMHEALTH_ANNOTATIONNAME` | Kubernetes annotation name for health checks | `flowx.ai/health` |
| `FLOWX_PLATFORMHEALTH_ANNOTATIONVALUE` | Kubernetes annotation value for health checks | `true` |
## Multi-edit and undo/redo configuration
| Environment Variable | Description | Default Value |
| --------------------------------------- | ----------------------------------------------- | ------------- |
| `FLOWX_MULTIEDIT_TTL` | Time-to-live for multi-edit sessions in seconds | `45` |
| `FLOWX_UNDOREDO_TTL` | Time-to-live for undo/redo actions in seconds | `86400` |
| `FLOWX_UNDOREDO_CLEANUP_CRONEXPRESSION` | Cron expression for undo/redo cleanup | `0 0 2 ?` |
| `FLOWX_UNDOREDO_CLEANUP_DAYS` | Days to keep deleted undo/redo items | `2` |
## Resources usage configuration
| Environment Variable | Description | Default Value |
| ------------------------------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------- |
| `FLOWX_LIB_RESOURCESUSAGES_ENABLED` | Enable resources usage tracking | `true` |
| `FLOWX_LIB_RESOURCESUSAGES_REFRESHLISTENER_ENABLED` | Enable listener for resource usage refreshes | `true` |
| `FLOWX_LIB_RESOURCESUSAGES_REFRESHLISTENER_COLLECTOR_THREADCOUNT` | Thread count for resource usage collector | `5` |
| `FLOWX_LIB_RESOURCESUSAGES_REFRESHLISTENER_COLLECTOR_MAXBATCHSIZE` | Maximum batch size for resource usage collection | `1000` |
| `FLOWX_LIB_RESOURCESUSAGES_KAFKA_CONSUMER_GROUPID_RESOURCESUSAGESREFRESH` | Consumer group ID for resource usage refresh | `adminResourcesUsagesRefreshGroup` |
| `FLOWX_LIB_RESOURCESUSAGES_KAFKA_CONSUMER_THREADS_RESOURCESUSAGESREFRESH` | Number of consumer threads for resource usage refresh | `3` |
| `FLOWX_LIB_RESOURCESUSAGES_KAFKA_TOPIC_RESOURCE_USAGES_REFRESH` | Kafka topic for resource usage refresh | `${kafka.topic.resources-usages.refresh}` |
| `FLOWX_LIB_RESOURCESUSAGES_KAFKA_AUTHEXCEPTIONRETRYINTERVAL` | Retry interval in seconds after auth exceptions | `3` |
## Authentication and Authorization Configuration
The FlowX Admin microservice supports authentication and authorization through OpenID Connect (with Keycloak as the default provider) and allows detailed role-based access control.
### OpenID Connect Configuration
| Environment Variable | Description | Default Value |
| ------------------------------------- | ----------------------------- | ------------- |
| `SECURITY_TYPE` | Security type | `oauth2` |
| `SECURITY_OAUTH2CLIENT` | Enable OAuth2 client | `enabled` |
| `SECURITY_OAUTH2_BASESERVERURL` | Base URL of the OAuth2 server | |
| `SECURITY_OAUTH2_REALM` | OAuth2 realm name | |
| `SECURITY_OAUTH2_CLIENT_CLIENTID` | OAuth2 client ID | |
| `SECURITY_OAUTH2_CLIENT_CLIENTSECRET` | OAuth2 client secret | |
### Service Account Configuration
The following service account configuration is deprecated but still supported for backward compatibility.
| Environment Variable | Description | Default Value |
| ---------------------------------------------------- | ----------------------------- | ------------------------------------- |
| `SECURITY_OAUTH2_SERVICE_ACCOUNT_ADMIN_CLIENTID` | Service account client ID | `flowx-${SPRING_APPLICATION_NAME}-sa` |
| `SECURITY_OAUTH2_SERVICE_ACCOUNT_ADMIN_CLIENTSECRET` | Service account client secret | `client-secret` |
### Spring Security OAuth2 Client Configuration
| Environment Variable | Description | Default Value |
| -------------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------------------------------------------------------------------------- |
| `SPRING_SECURITY_OAUTH2_RESOURCESERVER_OPAQUETOKEN_INTROSPECTIONURI` | Token introspection URI | `${SECURITY_OAUTH2_BASESERVERURL}/realms/${SECURITY_OAUTH2_REALM}/protocol/openid-connect/token/introspect` |
| `SPRING_SECURITY_OAUTH2_RESOURCESERVER_OPAQUETOKEN_CLIENTID` | Resource server client ID | `${SECURITY_OAUTH2_CLIENT_CLIENTID}` |
| `SPRING_SECURITY_OAUTH2_RESOURCESERVER_OPAQUETOKEN_CLIENTSECRET` | Resource server client secret | `${SECURITY_OAUTH2_CLIENT_CLIENTSECRET}` |
| `SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_MAINIDENTITY_PROVIDER` | Identity provider name | `mainAuthProvider` |
| `SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_MAINIDENTITY_CLIENTNAME` | Client name | `mainIdentity` |
| `SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_MAINIDENTITY_CLIENTID` | Client ID | `${SECURITY_OAUTH2_SERVICEACCOUNT_ADMIN_CLIENTID}` |
| `SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_MAINIDENTITY_CLIENTSECRET` | Client secret | `${SECURITY_OAUTH2_SERVICEACCOUNT_ADMIN_CLIENTSECRET}` |
| `SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_MAINIDENTITY_AUTHORIZATIONGRANTTYPE` | Authorization grant type | `client_credentials` |
| `SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_MAINIDENTITY_CLIENT_AUTHENTICATION_METHOD` | Client authentication method | `client_secret_post` |
| `SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_MAINAUTHPROVIDER_TOKENURI` | Provider token URI | `${SECURITY_OAUTH2_BASESERVERURL}/realms/${SECURITY_OAUTH2_REALM}/protocol/openid-connect/token` |
### Identity Provider Configuration
| Environment Variable | Description | Default Value |
| ----------------------------- | ------------------------------------ | ------------------------------------------------- |
| `OPENID_PROVIDER` | OpenID provider type | `keycloak` (possible values: `keycloak`, `entra`) |
| `FLOWX_AUTHENTICATE_CLIENTID` | Client ID for authentication service | `flowx-platform-authenticate` |
| `FLOWX_PROCESS_DEFAULTROLES` | Default roles for processes | `FLOWX_ROLE` |
#### Keycloak Configuration
| Environment Variable | Description | Default Value |
| -------------------------------------- | ---------------------- | ------------------------------------------------------- |
| `OPENID_KEYCLOAK_BASE_SERVER_URL` | Keycloak server URL | `${SECURITY_OAUTH2_BASESERVERURL}` |
| `OPENID_KEYCLOAK_REALM` | Keycloak realm | `${SECURITY_OAUTH2_REALM}` |
| `OPENID_KEYCLOAK_CLIENT_CLIENT_ID` | Keycloak client ID | `${SECURITY_OAUTH2_SERVICE_ACCOUNT_ADMIN_CLIENTID}` |
| `OPENID_KEYCLOAK_CLIENT_CLIENT_SECRET` | Keycloak client secret | `${SECURITY_OAUTH2_SERVICE_ACCOUNT_ADMIN_CLIENTSECRET}` |
#### Microsoft Entra ID configuration
| Environment Variable | Description | Default Value |
| ---------------------------- | ----------------------------- | ------------------------------------------------------------------------- |
| `OPENID_ENTRA_GRAPH_SCOPE` | Microsoft Graph API scope | `https://graph.microsoft.com/.default` |
| `OPENID_ENTRA_TENANT_ID` | Microsoft Entra tenant ID | |
| `OPENID_ENTRA_CLIENT_ID` | Microsoft Entra client ID | `${SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_MAINIDENTITY_CLIENTID}` |
| `OPENID_ENTRA_CLIENT_SECRET` | Microsoft Entra client secret | `${SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_MAINIDENTITY_CLIENTSECRET}` |
| `OPENID_ENTRA_PRINCIPAL_ID` | Microsoft Entra principal ID | |
The role-based access control is configured in the application YAML and grants specific permissions for platform management, user management, process management, integrations management, and configuration management.
In production environments, never use the default service account credentials. Always configure secure, environment-specific credentials for authentication.
Sensitive information such as passwords and client secrets should be managed securely using environment variables or a secrets management solution in production environments.
# FlowX Advancing Controller setup
Source: https://docs.flowx.ai/5.1/setup-guides/advancing-controller-setup-guide
This guide provides step-by-step instructions to help you configure and deploy the Advancing Controller effectively.
## Infrastructure prerequisites
Before setting up the Advancing Controller, ensure the following components are properly set up:
* **FlowX.AI Engine Deployment**: The Advancing Controller depends on the FlowX Engine and must be deployed in the same environment. Refer to the FlowX Engine [**setup guide**](./flowx-engine-setup-guide/engine-setup) for more information on setting up the Engine.
* **Database Instance**: The Advancing Controller uses a PostgreSQL or Oracle Database instance as its database.
## Dependencies
Ensure the following dependencies are met:
* [Database](#database-configuration): Properly configured database instance.
* [Datasource](#configuring-datasource): Configuration details for connecting to the database.
* [FlowX.AI Engine](./flowx-engine-setup-guide/engine-setup): Must be set up and running. Refer to the FlowX Engine setup guide.
### Database compatibility
The Advancing Controller supports both PostgreSQL and Oracle databases. However, the FlowX.AI Engine and the Advancing Controller must be configured to use the same type of database at any given time. The FlowX.AI Engine employs two databases: one shared with the FlowX.AI Admin microservice for process metadata and instances, and the other dedicated to advancement.
Mixing PostgreSQL and Oracle Database is not supported; both databases must be of the same type.
## Database configuration
### PostgreSQL
A basic PostgreSQL configuration for Advancing.
If the parallel advancing configuration already exists, you must reset the 'advancing' database by executing the SQL command `DROP DATABASE advancing;`. Once the database has been dropped, the Liquibase script will automatically re-enable it.
## Configuration
The Advancing Controller uses a PostgreSQL or an Oracle database as a dependency.
* Ensure that the user, password, connection link, and database name are correctly configured. If these details are not configured correctly, errors will occur at startup.
* The datasource is configured automatically via a Liquibase script inside the engine. All updates will include migration scripts.
### Configuring datasource
If you need to change the datasource configuration detail, you can use the following environment variables:
| Variable | Description | Default Value |
| ------------------------------------------------ | --------------------------------------------------------- | --------------------------------------------------- |
| `SPRING_DATASOURCE_URL` | JDBC URL for database connection | `jdbc:postgresql://jx-onboardingdb:5432/onboarding` |
| `SPRING_DATASOURCE_DRIVERCLASSNAME` | JDBC driver class name | `org.postgresql.Driver` |
| `SPRING_DATASOURCE_USERNAME` | Database username | `postgres` |
| `SPRING_DATASOURCE_PASSWORD` | Database password | `[your-secure-password]` |
| `SPRING_JPA_DATABASE` | Database type (accepted values: `oracle` or `postgresql`) | `postgresql` |
| `SPRING_JPA_SHOWSQL` | Toggle SQL query logging | `false` |
| `SPRING_JPA_PROPERTIES_HIBERNATE_DEFAULT_SCHEMA` | Default database schema (❗️only for Oracle DBs) | `public` |
| `SPRING_LIQUIBASE_CHANGELOG` | Path to Liquibase changelog for database migrations | `classpath:config/liquibase/master.xml` |
It's important to keep in mind that the Advancing Controller is tightly integrated with the FlowX.AI Engine. Therefore, it is crucial to ensure that both the Engine and the Advancing Controller are configured correctly and are in sync.
## Health monitoring
| Variable | Description | Default Value |
| ------------------------------ | ----------------------------- | ------------- |
| `MANAGEMENT_HEALTH_DB_ENABLED` | Enable database health checks | `true` |
# Application Manager setup
Source: https://docs.flowx.ai/5.1/setup-guides/application-manager
The Application Manager is a backend microservice for managing FlowX applications, libraries, versions, manifests, configurations, and builds. This guide provides detailed instructions for setting up the service and configuring its components through environment variables.
The Application Manager is a backend microservice in FlowX.AI that:
✅ Manages FlowX applications, versions, manifests, and configurations.\
✅ Acts as a proxy for front-end resource requests.
## Infrastructure prerequisites
Before you start setting up the Application Manager service, ensure the following infrastructure components are in place:
| Component | Purpose |
| ------------- | -------------------------- |
| PostgreSQL | Storing application data |
| MongoDB | Managing runtime builds |
| Redis | Caching needs |
| Kafka | Event-driven communication |
| OAuth2 Server | Authentication |
Ensure that the database for storing application data is properly set up and configured before starting the service.
## Dependencies
The Application Manager relies on other FlowX services and components to function properly:
* [**Database configuration**](#database-configuration): For storing application details, manifests, and configurations.
* [**Authorization & Access Management**](#authentication-configuration): For securing access to resources and managing roles.
* [**Kafka Event Bus**](#kafka-configuration): For enabling event-driven operations.
* [**Resource Proxy**](#resource-proxy-configuration): To forward resource-related requests to appropriate services.
## Core configuration environment variables
### Basic service configuration
| Environment Variable | Description | Default Value |
| ---------------------------- | -------------------------- | -------------------- |
| `MULTIPART_MAX_FILE_SIZE` | Maximum file upload size | `25MB` |
| `MULTIPART_MAX_REQUEST_SIZE` | Maximum request size | `25MB` |
| `LOGGING_CONFIG_FILE` | Logging configuration file | `logback-spring.xml` |
### Database configuration
#### PostgreSQL configuration
| Environment Variable | Description | Default Value |
| ----------------------------------- | ------------------- | ----------------------------------------------- |
| `SPRING_DATASOURCE_URL` | PostgreSQL JDBC URL | `jdbc:postgresql://postgresql:5432/app_manager` |
| `SPRING_DATASOURCE_USERNAME` | Database username | `flowx` |
| `SPRING_DATASOURCE_PASSWORD` | Database password | `password` |
| `SPRING_DATASOURCE_DRIVERCLASSNAME` | JDBC driver class | `org.postgresql.Driver` |
#### MongoDB configuration
The Application Manager requires MongoDB to store runtime build information. Use the following environment variables for configuration:
| Environment Variable | Description | Default Value |
| ----------------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `SPRING_DATA_MONGODB_URI` | MongoDB connection URI | `mongodb://${DB_USERNAME}:${DB_PASSWORD}@mongodb-0.mongodb-headless,mongodb-1.mongodb-headless,mongodb-arbiter-0.mongodb-arbiter-headless:27017/app-runtime?retryWrites=false` |
| `DB_USERNAME` | MongoDB username | `app-runtime` |
| `DB_PASSWORD` | MongoDB password | `password` |
| `SPRING_DATA_MONGODB_STORAGE` | Storage type (Azure environments only) | `mongodb` (alternative: `cosmosdb`) |
## Redis configuration
If caching is required, configure Redis using the following environment variables:
| Environment Variable | Description | Default Value |
| ---------------------------- | --------------------------------- | -------------- |
| `SPRING_DATA_REDIS_HOST` | Redis server hostname | `redis-master` |
| `SPRING_DATA_REDIS_PASSWORD` | Redis password | `password` |
| `SPRING_DATA_REDIS_PORT` | Redis server port | `6379` |
| `SPRING_REDIS_TTL` | Default Redis TTL in milliseconds | `5000000` |
## Kafka configuration
### Kafka connection and security variables
| Environment Variable | Description | Default Value |
| -------------------------------- | ---------------------- | ---------------------------------- |
| `SPRING_KAFKA_BOOTSTRAPSERVERS` | Kafka broker addresses | `kafka-flowx-kafka-bootstrap:9092` |
| `SPRING_KAFKA_SECURITY_PROTOCOL` | Security protocol | `PLAINTEXT` |
| `KAFKA_MESSAGE_MAX_BYTES` | Maximum message size | `52428800` (50MB) |
| `FLOWX_KAFKA_PAYLOADSIZELIMIT` | Payload size limit | `512000` (500KB) |
### Kafka producer configuration
| Environment Variable | Description | Default Value |
| --------------------------------------------------- | -------------------- | -------------------------------------------------------- |
| `SPRING_KAFKA_PRODUCER_KEYSERIALIZER` | Key serializer class | `org.apache.kafka.common.serialization.StringSerializer` |
| `SPRING_KAFKA_PRODUCER_PROPERTIES_MAX_REQUEST_SIZE` | Maximum request size | `52428800` (50MB) |
### OAuth authentication variables (when using SASL\_PLAINTEXT)
| Environment Variable | Description | Default Value |
| -------------------------------- | -------------------- | ----------------------------------------------------------------- |
| `KAFKA_OAUTH_CLIENTID` | OAuth client ID | `flowx-service-client` |
| `KAFKA_OAUTH_CLIENTSECRET` | OAuth client secret | `flowx-service-client-secret` |
| `KAFKA_OAUTH_TOKEN_ENDPOINT_URI` | OAuth token endpoint | `{baseUrl}/auth/realms/kafka-authz/protocol/openid-connect/token` |
### Kafka consumer configuration
| Environment Variable | Description | Default Value |
| ------------------------------------------------------------------------ | --------------------------------------------- | ------------------------------------------ |
| `KAFKA_CONSUMER_GROUPID_APPLICATION_RESOURCE_EXPORT` | Application export consumer group | `app-resource-export-group` |
| `KAFKA_CONSUMER_GROUPID_APPLICATION_RESOURCE_IMPORT` | Application import consumer group | `app-resource-import-group` |
| `KAFKA_CONSUMER_GROUPID_APPLICATION_RESOURCE_USAGES` | Resource usages consumer group | `app-resource-usages-group` |
| `KAFKA_CONSUMER_GROUPID_APPLICATION_RESOURCE_RESELEMUSAGEVALIDATIONRESP` | Resource element validation group | `app-resource-elem-usage-validation-resp` |
| `KAFKA_CONSUMER_GROUPID_APPLICATION_RESOURCE_COPY` | Resource copy consumer group | `app-resource-copy-group` |
| `KAFKA_CONSUMER_GROUPID_APPLICATION_RESOURCE_SYNC` | Resource sync consumer group | `app-resource-sync-group` |
| `KAFKA_CONSUMER_GROUPID_APPLICATION_RESOURCE_UPDATEPROPAGATION` | Resource update propagation consumer group | `app-resource-update-propagation-group` |
| `KAFKA_CONSUMER_GROUPID_APPLICATION_CORRECTIONAFTERAPPOPERATION` | Correction after app operation consumer group | `app-correction-after-app-operation-group` |
| `KAFKA_CONSUMER_GROUPID_APPLICATION_MERGE` | Application merge consumer group | `app-merge-item-group` |
| `KAFKA_CONSUMER_GROUPID_BUILD_CREATE` | Build create consumer group | `build-create-group` |
| `KAFKA_CONSUMER_GROUPID_BUILD_UPDATE` | Build update consumer group | `buildUpdateGroup` |
| `KAFKA_CONSUMER_GROUPID_BUILD_RESOURCE_EXPORT` | Build export consumer group | `buildResourceExportGroup` |
| `KAFKA_CONSUMER_GROUPID_BUILD_RESOURCE_IMPORT` | Build import consumer group | `buildResourceImportGroup` |
| `KAFKA_CONSUMER_GROUPID_BUILD_RUNTIMEDATA` | Build runtime data consumer group | `buildRuntimeDataGroup` |
| `KAFKA_CONSUMER_GROUPID_BUILD_STARTTIMEREVENTS_UPDATES` | Build timer events updates consumer | `buildStartTimerEventsUpdatesGroup` |
| `KAFKA_CONSUMER_GROUPID_PROCESS_START` | Process start consumer group | `processStartGroup` |
| `KAFKA_AUTH_EXCEPTION_RETRY_INTERVAL` | Auth exception retry interval (seconds) | `10` |
### Kafka consumer threads configuration
| Environment Variable | Description | Default Value |
| ------------------------------------------------------------------------ | ----------------------------------------------- | ------------- |
| `KAFKA_CONSUMER_THREADS_APPLICATION_RESOURCE_EXPORT` | Application export consumer threads | `3` |
| `KAFKA_CONSUMER_THREADS_APPLICATION_RESOURCE_IMPORT` | Application import consumer threads | `3` |
| `KAFKA_CONSUMER_THREADS_APPLICATION_RESOURCE_USAGES` | Resource usages consumer threads | `3` |
| `KAFKA_CONSUMER_THREADS_APPLICATION_RESOURCE_RESELEMUSAGEVALIDATIONRESP` | Resource validation response threads | `3` |
| `KAFKA_CONSUMER_THREADS_APPLICATION_RESOURCE_COPY` | Resource copy consumer threads | `3` |
| `KAFKA_CONSUMER_THREADS_APPLICATION_RESOURCE_SYNC` | Resource sync consumer threads | `3` |
| `KAFKA_CONSUMER_THREADS_APPLICATION_UPDATEPROPAGATION` | Resource update propagation consumer threads | `3` |
| `KAFKA_CONSUMER_THREADS_APPLICATION_MERGE` | Application merge consumer threads | `3` |
| `KAFKA_CONSUMER_THREADS_APPLICATION_CORRECTIONAFTERAPPOPERATION` | Correction after app operation consumer threads | `3` |
| `KAFKA_CONSUMER_THREADS_BUILD_CREATE` | Build create consumer threads | `2` |
| `KAFKA_CONSUMER_THREADS_BUILD_UPDATE` | Build update consumer threads | `4` |
| `KAFKA_CONSUMER_THREADS_BUILD_RUNTIMEDATA` | Build runtime data consumer threads | `3` |
| `KAFKA_CONSUMER_THREADS_BUILD_RESOURCE_EXPORT` | Build export consumer threads | `3` |
| `KAFKA_CONSUMER_THREADS_BUILD_RESOURCE_IMPORT` | Build import consumer threads | `3` |
| `KAFKA_CONSUMER_THREADS_BUILD_STARTTIMEREVENTS_UPDATES` | Build timer events updates consumer threads | `3` |
### Topic naming convention and pattern creation
The Application Manager uses a sophisticated topic naming convention that follows a structured pattern. This ensures consistency across environments and makes topics easily identifiable.
### Topic naming components
| Component | Default Value | Environment Variable | Description |
| ------------- | ---------------------------------------------------------------- | -------------------------------- | ------------------------------------- |
| `package` | `ai.flowx.` | `KAFKA_TOPIC_NAMING_PACKAGE` | Base package identifier |
| `environment` | ` ` | `KAFKA_TOPIC_NAMING_ENVIRONMENT` | Deployment environment |
| `version` | `.v1` | `KAFKA_TOPIC_NAMING_VERSION` | Topic version |
| `separator` | `.` | `KAFKA_TOPIC_NAMING_SEPARATOR` | Main separator (referred to as `dot`) |
| `separator2` | `-` | `KAFKA_TOPIC_NAMING_SEPARATOR2` | Secondary separator (as `dash`) |
| `prefix` | `${KAFKA_TOPIC_NAMING_PACKAGE}${KAFKA_TOPIC_NAMING_ENVIRONMENT}` | `KAFKA_TOPIC_NAMING_PREFIX` | Combined `package` and `environment` |
| `suffix` | `${KAFKA_TOPIC_NAMING_VERSION}` | `KAFKA_TOPIC_NAMING_SUFFIX` | The version suffix |
### Topic pattern creation
Topics are constructed using the following pattern:
```
{prefix} + service + {separator/dot} + action + {separator/dot} + detail + {suffix}
```
For example, a typical topic might look like:
```
ai.flowx.application-version.export.v1
```
Where:
* `ai.flowx` is the prefix (package + environment)
* `application-version` is the service
* `export` is the action
* `.v1` is the suffix (version)
For more complex topics, additional components are added:
```
ai.flowx.application-version.resources-usages.sub-res-validation.response.v1
```
Where:
* `resources-usages` represents the resource type
* `sub-res-validation` represents the operation type
* `response` indicates it's a response message
### Kafka topic configuration
#### Application resource topics
| Environment Variable | Description | Default Pattern |
| ----------------------------------------------------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_EXPORT` | Application resource export topic | `ai.flowx.application-version.export.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_IMPORT` | Application resource import topic | `ai.flowx.application-version.import.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_USAGES_IN` | Resource usages in topic | `ai.flowx.application-version.resources-usages.operations.bulk.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_USAGES_OUT` | Resource usages out topic | `ai.flowx.application-version.resources-usages.operations.bulk.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_USAGES_REFRESH` | Resource usages refresh topic | `ai.flowx.application-version.resources-usages.refresh.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_RESELEMUSAGEVALIDATION_RESPONSE` | Resource element usage validation response | `ai.flowx.application-version.resources-usages.sub-res-validation.response.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_RESELEMUSAGEVALIDATION_OUT_INTEGRATION` | Resource validation integration topic | `ai.flowx.application-version.resources-usages.sub-res-validation.request-integration.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_RESELEMUSAGEVALIDATION_OUT_CMS` | Resource validation CMS topic | `ai.flowx.application-version.resources-usages.sub-res-validation.cms.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_COPY` | Resource copy topic | `ai.flowx.application-version.copy-resource.v1` |
| `KAFKA_TOPIC_APPLICATION_MERGE` | Application merge topic | `ai.flowx.application-version.merge.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_CORRECTIONAFTERAPPOPERATION_IN` | Correction after app operation response (in) | `ai.flowx.application-version.correction-after-app-operation.response.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_CORRECTIONAFTERAPPOPERATION_OUT_PROCESS` | Correction after app operation → process request | `ai.flowx.application-version.correction-after-app-operation.process.request.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_CORRECTIONAFTERAPPOPERATION_OUT_BUSINESSRULE` | Correction after app operation → business-rule request | `ai.flowx.application-version.correction-after-app-operation.business-rule.request.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_CORRECTIONAFTERAPPOPERATION_OUT_REUSABLETEMPLATE` | Correction after app operation → reusable-template request | `ai.flowx.application-version.correction-after-app-operation.reusable-template.request.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_OUT_PROCESS` | Sync → process (in) | `ai.flowx.application-version.sync.process.in.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_OUT_BUSINESSRULE` | Sync → business-rule (in) | `ai.flowx.application-version.sync.business-rule.in.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_OUT_REUSABLETEMPLATE` | Sync → reusable-template (in) | `ai.flowx.application-version.sync.reusable-template.in.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_IN` | Sync in (general response channel) | `ai.flowx.application-version.sync.out.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_UPDATEPROPAGATION` | Resource update propagation | `ai.flowx.application-version.resource.update.propagation.v1` |
#### Build resource topics
| Environment Variable | Description | Default Pattern |
| ----------------------------------------------- | -------------------------- | ------------------------------------------------- |
| `KAFKA_TOPIC_BUILD_UPDATE` | Build update topic | `ai.flowx.build.update.v1` |
| `KAFKA_TOPIC_BUILD_CREATE` | Build create topic | `ai.flowx.build.create.v1` |
| `KAFKA_TOPIC_BUILD_RESOURCE_EXPORT` | Build export topic | `ai.flowx.build.export.v1` |
| `KAFKA_TOPIC_BUILD_RESOURCE_IMPORT` | Build import topic | `ai.flowx.build.import.v1` |
| `KAFKA_TOPIC_BUILD_STARTTIMEREVENTS_IN_UPDATES` | Timer events updates topic | `ai.flowx.build.start-timer-events.updates.in.v1` |
| `KAFKA_TOPIC_BUILD_RUNTIMEDATA` | Build runtime data topic | `ai.flowx.build.runtime-data.v1` |
#### Process topics
| Environment Variable | Description | Default Pattern |
| --------------------------------------------------- | ------------------------------- | ---------------------------------------------------- |
| `KAFKA_TOPIC_PROCESS_STARTFOREVENT_IN` | Process start for event topic | `ai.flowx.core.trigger.start-for-event.process.v1` |
| `KAFKA_TOPIC_PROCESS_STARTBYNAME_IN` | Process start by name topic | `ai.flowx.core.trigger.start-by-name.process.v1` |
| `KAFKA_TOPIC_PROCESS_STARTBYNAME_OUT` | Process start by name out topic | `ai.flowx.core.trigger.start-by-name.process.out.v1` |
| `KAFKA_TOPIC_PROCESS_SCHEDULEDTIMEREVENTS_OUT_SET` | Set timer schedule topic | `ai.flowx.core.trigger.set.timer-event-schedule.v1` |
| `KAFKA_TOPIC_PROCESS_SCHEDULEDTIMEREVENTS_OUT_STOP` | Stop timer schedule topic | `ai.flowx.core.trigger.stop.timer-event-schedule.v1` |
#### Other topics
| Environment Variable | Description | Default Pattern |
| --------------------------------------- | ----------------------------- | ------------------------------------------------ |
| `KAFKA_TOPIC_AUDIT_OUT` | Audit topic | `ai.flowx.core.trigger.save.audit.v1` |
| `KAFKA_TOPIC_EVENTSGATEWAY_OUT_MESSAGE` | Events gateway messages topic | `ai.flowx.eventsgateway.receive.copyresource.v1` |
These Kafka topics use predefined naming conventions for ease of use. Optional adjustments may be made if the desired topic name cannot be achieved with the standard structure.
## Authentication configuration
### OpenID Connect configuration
| Environment Variable | Description | Default Value |
| ----------------------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------- |
| `SECURITY_TYPE` | Security type | `oauth2` |
| `SECURITY_OAUTH2_CLIENT` | Enable OAuth2 client | `enabled` |
| `SECURITY_OAUTH2_BASE_SERVER_URL` | OAuth2 server base URL | |
| `SECURITY_OAUTH2_REALM` | OAuth2 realm name | |
| `SECURITY_OAUTH2_CLIENT_CLIENTID` | OAuth2 client ID | |
| `SECURITY_OAUTH2_CLIENT_CLIENTSECRET` | OAuth2 client secret | |
| `SECURITY_OAUTH2_CLIENT_ACCESS_TOKEN_URI` | OAuth2 access token URI | `${SECURITY_OAUTH2_BASE_SERVER_URL}/realms/${SECURITY_OAUTH2_REALM}/protocol/openid-connect/token` |
### Service account configuration
| Environment Variable | Description | Default Value |
| ---------------------------------------------------- | ----------------------------- | -------------------------- |
| `SECURITY_OAUTH2_SERVICE_ACCOUNT_ADMIN_CLIENTID` | Service account client ID | `flowx-runtime-manager-sa` |
| `SECURITY_OAUTH2_SERVICE_ACCOUNT_ADMIN_CLIENTSECRET` | Service account client secret | |
### Spring security OAuth2 client configuration
| Environment Variable | Description | Default Value |
| -------------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------- |
| `SPRING_SECURITY_OAUTH2_RESOURCE_SERVER_OPAQUE_TOKEN_INTROSPECTION_URI` | Token introspection URI | `${SECURITY_OAUTH2_BASE_SERVER_URL}/realms/${SECURITY_OAUTH2_REALM}/protocol/openid-connect/token/introspect` |
| `SPRING_SECURITY_OAUTH2_RESOURCE_SERVER_OPAQUE_TOKEN_CLIENTID` | Resource server client ID | `${SECURITY_OAUTH2_CLIENT_CLIENTID}` |
| `SPRING_SECURITY_OAUTH2_RESOURCE_SERVER_OPAQUE_TOKEN_CLIENTSECRET` | Resource server client secret | `${SECURITY_OAUTH2_CLIENT_CLIENTSECRET}` |
| `SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_MAINIDENTITY_PROVIDER` | Identity provider name | `mainAuthProvider` |
| `SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_MAINIDENTITY_CLIENT_NAME` | Client name | `mainIdentity` |
| `SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_MAINIDENTITY_CLIENTID` | Client ID | `${SECURITY_OAUTH2_SERVICE_ACCOUNT_ADMIN_CLIENTID}` |
| `SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_MAINIDENTITY_CLIENTSECRET` | Client secret | `${SECURITY_OAUTH2_SERVICE_ACCOUNT_ADMIN_CLIENTSECRET}` |
| `SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_MAINIDENTITY_AUTHORIZATION_GRANT_TYPE` | Authorization grant type | `client_credentials` |
| `SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_MAINIDENTITY_CLIENT_AUTHENTICATION_METHOD` | Client authentication method | `client_secret_post` |
| `SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_MAINAUTHPROVIDER_TOKEN_URI` | Provider token URI | `${SECURITY_OAUTH2_BASE_SERVER_URL}/realms/${SECURITY_OAUTH2_REALM}/protocol/openid-connect/token` |
The Application Manager requires proper authentication settings to secure access to application resources and APIs. By default, the service is configured to use Keycloak as the OpenID provider, but it can be adapted to work with other OAuth2-compatible providers.
Refer to the dedicated section for configuring user roles and access rights:
## File storage configuration
S3 is used in the Application Manager for:
* Storing imported and exported resources
* Storing application versions and builds that are imported or exported
| Environment Variable | Description | Default Value | Default |
| ---------------------------------------------- | ---------------------- | ------------------------------------------ | --------------------- |
| `APPLICATION_FILESTORAGE_S3_SERVERURL` | S3 server URL | `http://minio:9000` | None |
| `APPLICATION_FILESTORAGE_S3_ACCESSKEY` | S3 access key | `Ha0wvtOE9gQ2NSzghEcs` | None |
| `APPLICATION_FILESTORAGE_S3_SECRETKEY` | S3 secret key | `jY7nYLVtNh9JzMflliQKu3noPpjxD3prxIkliErX` | None |
| `APPLICATION_FILESTORAGE_TYPE` | Storage type | `s3` | `s3` |
| `APPLICATION_FILESTORAGE_DELETIONSTRATEGY` | File deletion strategy | `delete` | `delete` |
| `APPLICATION_FILESTORAGE_S3_ENABLED` | Enable S3 storage | `true` | `true` |
| `APPLICATION_FILESTORAGE_S3_ENCRYPTIONENABLED` | Enable S3 encryption | `false` | `false` |
| `APPLICATION_FILESTORAGE_S3_BUCKETPREFIX` | S3 bucket name prefix | `applications-bucket` | `applications-bucket` |
## Monitoring and health check configuration
| Environment Variable | Description | Default Value | Default |
| ---------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------- | ------- |
| `MANAGEMENT_METRICS_EXPORT_PROMETHEUS_ENABLED` | Prometheus metrics | `true` | `false` |
| `MANAGEMENT_HEALTH_KUBERNETES_ENABLED` | Kubernetes health check | `false` | `true` |
| `MANAGEMENT_HEALTH_REDIS_ENABLED` | Redis health check | `false` | `true` |
| `MANAGEMENT_HEALTH_KAFKA_ENABLED` | Kafka health check | `true` | `true` |
| `MANAGEMENT_HEALTH_LIVENESSSTATE_ENABLED` | Liveness state | `true` | `false` |
| `MANAGEMENT_HEALTH_READINESSSTATE_ENABLED` | Readiness state | `true` | `false` |
| `MANAGEMENT_ENDPOINT_HEALTH_GROUP_LIVENESS_INCLUDE` | Liveness probes | `ping,diskSpace,accessInfo,buildInfo,db,mongo,kafkaClusterHealthCheckIndicator` | `ping` |
| `MANAGEMENT_ENDPOINT_HEALTH_GROUP_READINESS_INCLUDE` | Readiness probes | `ping,diskSpace,accessInfo,buildInfo` | `ping` |
## Resource proxy configuration
The Resource Proxy module forwards resource-related requests to appropriate services, handling CRUD operations on the manifest. It requires proper configuration of proxy endpoints:
| Environment Variable | Description | Default Value | Default |
| ------------------------------------------------------- | ---------------------------------- | ---------------- | --------- |
| `RESOURCE_PROXY_MANIFEST_URL` | Manifest URL for resource proxy | URL value | None |
| `RESOURCE_PROXY_TARGET_URL` | Target URL for resource forwarding | URL value | None |
| `FLOWX_RESOURCEPROXY_RETRYGETRESOURCETIMEOUTMS` | Resource retrieval timeout | `500` | `500` |
| `FLOWX_RESOURCEPROXY_RETRYGETRESOURCEMAXCOUNT` | Maximum resource retrieval retries | `10` | `10` |
| `FLOWX_RESOURCEPROXY_WEBCLIENT_RETRYATTEMPTS` | Web client retry attempts | `2` | `2` |
| `FLOWX_RESOURCEPROXY_WEBCLIENT_RETRYBACKOFF` | Retry backoff time (seconds) | `1` | `1` |
| `FLOWX_RESOURCEPROXY_WEBCLIENT_MAXINMEMORYSIZE` | Maximum in-memory size | `5MB` | `5MB` |
| `FLOWX_RUNTIMEEXECUTIONPROXY_WEBCLIENT_MAXINMEMORYSIZE` | Maximum REST request size | `5242880` (5 MB) | `5242880` |
`FLOWX_RUNTIMEEXECUTIONPROXY_WEBCLIENT_MAXINMEMORYSIZE` - Specifies the maximum size (in bytes) of in-memory data for REST requests. This is particularly useful when dealing with large payloads to prevent excessive memory consumption.
* Default Value: 5242880 (5 MB)
* Usage Example: Set to 10485760 (10 MB) to allow larger in-memory request sizes.
## Scheduler configuration
The Application Manager scheduler supports retrying failed deployments and master election for better coordination of tasks across instances:
| Environment Variable | Description | Default Value | Default |
| ----------------------------------------------- | ---------------------------- | ---------------- | ------- |
| `FLOWX_SCHEDULER_RETRYFAILEDDEPLOYMENTSCRON` | Failed deployment retry cron | `0 * * * * *` | None |
| `FLOWX_SCHEDULER_MASTERELECTION_ENABLED` | Enable master election | `true` | `false` |
| `FLOWX_SCHEDULER_MASTERELECTION_CRONEXPRESSION` | Master election cron | `*/30 * * * * *` | None |
| `FLOWX_SCHEDULER_MASTERELECTION_PROVIDER` | Election provider | `redis` | None |
### Retry failed deployments
Configures a cron job to retry updating builds in the runtime database every minute when previous attempts have failed.
### Master election
Enables master election for improved scheduling coordination when multiple instances of the Application Manager are running, ensuring that scheduled tasks are only executed once.
## Configuring logging
To control the logging levels for the Application Manager, use the following environment variables:
| Environment Variable | Description | Default Value |
| -------------------- | ------------------------------- | ------------- |
| `LOGGING_LEVEL_ROOT` | Root Spring Boot logs level | `INFO` |
| `LOGGING_LEVEL_APP` | Application-level logs level | `INFO` |
| `LOGGING_LEVEL_DB` | Database interactions log level | `INFO` |
## CAS lib configuration
| Environment Variable | Description | Default Value |
| --------------------- | ---------------------------- | --------------- |
| `FLOWX_SPICEDB_HOST` | SpiceDB server hostname | `spicedb` |
| `FLOWX_SPICEDB_PORT` | SpiceDB server port | `50051` |
| `FLOWX_SPICEDB_TOKEN` | SpiceDB authentication token | `spicedb-token` |
## Data model overview
The Application Manager stores application data using a relational database schema, with key entities such as application, application\_version, and application\_manifest. Below are descriptions of primary entities:
* **Application** - Defines an application with its details like name, type, and metadata.
* **Application Branch** - Represents branches for versioning within an application.
* **Application Version** - Keeps track of each version of an application, including committed and WIP statuses.
* **Application Manifest** - Contains the list of resources associated with a specific application version.
## Ingress configuration
Configure ingress to control external access to Application Manager:
```yaml theme={"system"}
ingress:
enabled: true
public:
enabled: false
admin:
enabled: true
hostname: "{{ .Values.flowx.ingress.admin }}"
path: /appmanager(/|$)(.*)
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/cors-allow-headers: DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization,flowx-platform,Fx-Workspace-Id
```
# Audit setup
Source: https://docs.flowx.ai/5.1/setup-guides/audit-setup-guide
This guide will walk you through the process of setting up the Audit service and configuring it to meet your needs.
## Infrastructure prerequisites
The Audit service requires the following components to be set up before it can be started:
* **Docker engine**
* **Kafka**
* **Elasticsearch**
## Dependencies
The Audit service is built as a Docker image and runs on top of Kafka and Elasticsearch. Therefore, these services must be set up and running before starting the Audit service.
* [**Kafka configuration**](./setup-guides-overview#kafka)
* [**Authorization & access roles**](./setup-guides-overview#authorization--access-roles)
* [**Elasticsearch**](#configuring-elasticsearch)
* [**Logging**](./setup-guides-overview#logging)
## Configuration
### Configuring Kafka
To configure the Kafka server for the Audit service, set the following environment variables:
#### Connection settings
| Variable | Description | Default Value |
| ------------------------------- | ----------------------------------------- | ---------------- |
| `SPRING_KAFKA_BOOTSTRAPSERVERS` | Address of the Kafka server(s) | `localhost:9092` |
| `SPRING_KAFKA_SECURITYPROTOCOL` | Protocol used to communicate with brokers | `PLAINTEXT` |
#### Consumer configuration
| Variable | Description | Default Value |
| ------------------------------------------------------------ | ------------------------------------------- | ------------------------------------- |
| `SPRING_KAFKA_CONSUMER_GROUPID` | Consumer group ID for audit logs | `audit-gid` |
| `SPRING_KAFKA_CONSUMER_PROPERTIES_MAX_PARTITION_FETCH_BYTES` | Maximum data size per partition | `${KAFKA_MESSAGE_MAX_BYTES:52428800}` |
| `KAFKA_CONSUMER_THREADS` | Number of consumer threads | `1` |
| `KAFKA_AUTHEXCEPTIONRETRYINTERVAL` | Retry interval after auth failure (seconds) | `10` |
#### Topic naming configuration
| Variable | Description | Default Value |
| -------------------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------ |
| `DOT` | Reference to primary separator | `${kafka.topic.naming.separator}` |
| `DASH` | Reference to secondary separator | `${kafka.topic.naming.separator2}` |
| `KAFKA_TOPIC_NAMING_SEPARATOR` | Primary separator for topic names | `.` |
| `KAFKA_TOPIC_NAMING_SEPARATOR2` | Secondary separator for topic names | `-` |
| `KAFKA_TOPIC_NAMING_PACKAGE` | Base namespace for topics | `ai${dot}flowx${dot}` |
| `KAFKA_TOPIC_NAMING_ENVIRONMENT` | Environment indicator | ` ` |
| `KAFKA_TOPIC_NAMING_VERSION` | Version component | `${dot}v1` |
| `KAFKA_TOPIC_NAMING_PREFIX` | Combined prefix | `${kafka.topic.naming.package}${kafka.topic.naming.environment}` |
| `KAFKA_TOPIC_NAMING_SUFFIX` | Combined suffix | `${kafka.topic.naming.version}` |
| `KAFKA_TOPIC_AUDIT_IN` | Topic for receiving audit logs | `${kafka.topic.naming.prefix}core${dot}trigger${dot}save${dot}audit${kafka.topic.naming.suffix}` |
With default settings, the `KAFKA_TOPIC_AUDIT_IN` resolves to: `ai.flowx.dev.core.trigger.save.audit.v1`
### Configuring Elasticsearch
Configure Elasticsearch connection for audit data storage:
| Variable | Description | Default Value |
| ----------------------------------------------- | ------------------------------------------- | ------------- |
| `SPRING_ELASTICSEARCH_REST_PROTOCOL` | Connection protocol | `https` |
| `SPRING_ELASTICSEARCH_REST_URIS` | URL(s) of Elasticsearch nodes (no protocol) | - |
| `SPRING_ELASTICSEARCH_REST_DISABLESSL` | Disable SSL verification | `false` |
| `SPRING_ELASTICSEARCH_REST_USERNAME` | Authentication username | - |
| `SPRING_ELASTICSEARCH_REST_PASSWORD` | Authentication password | - |
| `SPRING_ELASTICSEARCH_INDEXSETTINGS_DATASTREAM` | Audit data stream name | `audit-logs` |
| `SPRING_ELASTICSEARCH_INDEXSETTINGS_SHARDS` | Number of primary shards | `2` |
| `SPRING_ELASTICSEARCH_INDEXSETTINGS_REPLICAS` | Number of replica shards | `2` |
The Elasticsearch index settings determine how your audit data is distributed and replicated across the cluster. The number of shards affects search performance and indexing, while replicas provide redundancy.
### CAS lib configuration
| Environment Variable | Description | Default Value |
| --------------------- | ---------------------------- | --------------- |
| `FLOWX_SPICEDB_HOST` | SpiceDB server hostname | `spicedb` |
| `FLOWX_SPICEDB_PORT` | SpiceDB server port | `50051` |
| `FLOWX_SPICEDB_TOKEN` | SpiceDB authentication token | `spicedb-token` |
### Configuring logging
To control the log levels, set the following environment variables:
| Variable | Description | Default Value |
| -------------------- | -------------------------- | ------------- |
| `LOGGING_LEVEL_ROOT` | Log level for root service | `INFO` |
| `LOGGING_LEVEL_APP` | Log level for application | `INFO` |
# Authorization system setup
Source: https://docs.flowx.ai/5.1/setup-guides/authorization-setup-guide
Configure these environment variables for the authorization-system microservice deployment.
The authorization-system microservice provides centralized authorization services for the FlowX.AI platform, managing workspaces, users, groups, roles, and permissions. It works alongside SpiceDB to deliver fine-grained access control and supports the Workspaces feature.
## Database configuration
The authorization-system **must** use a dedicated PostgreSQL database. Do not share with other FlowX.AI services.
```bash Environment Variables theme={"system"}
SPRING_DATASOURCE_URL=jdbc:postgresql://postgresql:5432/authorization_system
SPRING_DATASOURCE_USERNAME=flowx
SPRING_DATASOURCE_PASSWORD= # Use Kubernetes Secret
```
**Requirements:**
* Database user needs full access to `authorization_system` database
* PostgreSQL must be available before service startup
## CAS client library configuration
The authorization-system uses the CAS client library to communicate with SpiceDB for ACL operations.
```bash Environment Variables theme={"system"}
FLOWX_SPICEDB_HOST=spicedb
FLOWX_SPICEDB_PORT=50051
FLOWX_SPICEDB_TOKEN= # Use Kubernetes Secret
```
The SpiceDB token must match the `preshared_key` value from the [SpiceDB Kubernetes secret](./spicedb#step-3-create-kubernetes-secret). This same value is used as:
* `preshared_key` in the SpiceDB Kubernetes secret
* `SPICEDB_GRPC_PRESHARED_KEY` for SpiceDB configuration
* `FLOWX_SPICEDB_TOKEN` for FlowX services
**Configuration Parameters:**
* **SpiceDB Host**: Service hostname (typically `spicedb`)
* **SpiceDB Port**: gRPC port (standard: `50051`)
* **SpiceDB Token**: Authentication token for SpiceDB access
## OAuth2/Keycloak configuration
```bash Environment Variables theme={"system"}
SECURITY_OAUTH2_BASE_SERVER_URL=https://auth.yourcompany.com/auth
SECURITY_OAUTH2_REALM=flowx
SECURITY_OAUTH2_CLIENT_CLIENT_ID=flowx-platform-authorize
SECURITY_OAUTH2_CLIENT_CLIENT_SECRET= # Use Kubernetes Secret
SECURITY_OAUTH2_SERVICE_ACCOUNT_ADMIN_CLIENT_SECRET= # Use Kubernetes Secret
```
Must be configured in Keycloak with appropriate scopes for platform access
Requires admin privileges in Keycloak for user management operations
## Redis configuration
```bash Environment Variables theme={"system"}
SPRING_REDIS_HOST=redis-master
SPRING_REDIS_PASSWORD= # Use Kubernetes Secret
```
## Management
```bash Environment Variables theme={"system"}
MANAGEMENT_SERVER_PORT=8081
```
## Organization admin bootstrap
The authorization-system uses a fallback mechanism to create the first organization administrator when no admin users exist.
### Primary method (recommended)
Set `SPRING_LIQUIBASE_PARAMETERS_DEFAULTORGADMINUSERNAME` (default: `admin@flowx.ai`)
**Process:**
* System searches for this username in Keycloak
* Copies the user's `sub_id` (subject ID) to authorization-system database
* Grants organization admin privileges automatically
### Fallback method
Set `SPRING_LIQUIBASE_PARAMETERS_DEFAULTORGADMINUSERSUBJECTID` with a specific Keycloak subject ID
**Process:**
* Creates user directly in authorization-system database
* Assigns organization admin roles
* Used when username method fails or is set to null
### Error handling
**If incorrect subject\_id is provided:**
* Login will fail
* No org-admin privileges granted
* Manual database correction required
If you've deployed with an incorrect subject\_id, use this SQL script to fix it:
```sql theme={"system"}
-- Replace the incorrect subject_id with the correct one from Keycloak
UPDATE public.cas_user
SET subject_id = 'PASTE_CORRECT_SUBJECT_ID_FROM_KEYCLOAK_HERE'
WHERE id = '00000000-0000-0000-0000-100000000001';
```
The first organization administrator always has the ID `00000000-0000-0000-0000-100000000001` in the authorization-system database.
## Customer-specific variables
**Required Customization**: These variables must be updated for each deployment environment.
* `SECURITY_OAUTH2_BASE_SERVER_URL` - Your Keycloak server URL
* `SECURITY_OAUTH2_REALM` - Your Keycloak realm name
* `SECURITY_OAUTH2_CLIENT_CLIENT_ID` - Your OAuth2 client identifier
* `SPRING_DATASOURCE_URL` - Your PostgreSQL connection details
* Service hostnames - Update to match your Kubernetes service names
## Secrets management
**Security**: Always use Kubernetes Secrets for sensitive configuration values.
**Required Kubernetes Secrets:**
* `SPRING_DATASOURCE_PASSWORD`
* `FLOWX_SPICEDB_TOKEN`
* `SPRING_REDIS_PASSWORD`
* `SECURITY_OAUTH2_CLIENT_CLIENT_SECRET`
* `SECURITY_OAUTH2_SERVICE_ACCOUNT_ADMIN_CLIENT_SECRET`
## Deployment prerequisites
* PostgreSQL with `authorization_system` database
* SpiceDB with authentication configured
* Redis for caching
* Keycloak with configured realm
* OAuth2 clients created
* Admin user exists in Keycloak
## Architecture notes
**Database Access Control**: Only authorization-system has direct write access to the CAS PostgreSQL database. Other services communicate via REST APIs only.
**SpiceDB Integration**: Uses PostgreSQL as backend storage and communicates via gRPC through the CAS client library.
# FlowX CMS setup
Source: https://docs.flowx.ai/5.1/setup-guides/cms-setup
The CMS service is a microservice designed for managing taxonomies and content inside an application. Delivered as a Docker image, it simplifies content editing and analysis. This guide provides step-by-step instructions for setting up the service and configuring it to suit your needs.
Ensure the following infrastructure components are available before starting the CMS service:
* **MongoDB**
* **Redis**
* **Kafka**
* **Elasticsearch**
The service is pre-configured with most default values. However, some environment variables require customization during setup.
## Dependencies overview
* [**MongoDB instance**](#mongodb-database)
* [**Authorization & access roles**](#configuring-authorization-access-roles)
* [**Redis**](#configuring-redis)
* [**Kafka**](#configuring-kafka)
## Configuration
### Set application defaults
Define the default application name for retrieving content:
```yaml theme={"system"}
application:
defaultApplication: ${DEFAULT_APPLICATION:flowx}
```
If this configuration is not provided, the default value will be set to `flowx`.
## Configuring authorization & access roles
Connect the CMS to an OAuth 2.0 identity management platform by setting the following variables:
| Environment variable | Description |
| ------------------------------------- | ------------------------------------------------ |
| `SECURITY_OAUTH2_BASESERVERURL` | Base URL for the OAuth 2.0 Authorization Server |
| `SECURITY_OAUTH2_CLIENT_CLIENTID` | Unique identifier for the client application |
| `SECURITY_OAUTH2_CLIENT_CLIENTSECRET` | Secret key to authenticate client requests |
| `SECURITY_OAUTH2_REALM` | Realm name for OAuth 2.0 provider authentication |
## Configuring Runtime Manager service account
The CMS service requires access to the Runtime Manager service account for operations such as merging media file updates, managing builds, and handling application version transitions.
| Environment variable | Description | Default value |
| -------------------------------- | ------------------------------------------------------- | -------------------------- |
| `APPLICATION_FLOWXRUNTIMESANAME` | Name of the Runtime Manager service account in Keycloak | `flowx-runtime-manager-sa` |
This service account is required for CMS to perform operations like merging media file updates and coordinating with the Runtime Manager service. The service account must exist in Keycloak with the appropriate roles assigned.
## Configuring MongoDB
The CMS requires MongoDB for taxonomy and content storage. Configure MongoDB with the following variables:
| Environment variable | Description | Default value |
| ---------------------------- | --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| `SPRING_DATA_MONGODB_URI` | URI for connecting to the CMS MongoDB instance | Format: `mongodb://${DB_USERNAME}:${DB_PASSWORD}@,,:/${DB_NAME}?retryWrites=false` |
| `DB_USERNAME` | MongoDB username | `cms-core` |
| `DB_NAME` | MongoDB database name | `cms-core` |
| `DB_PASSWORD` | MongoDB password | |
| `MONGOCK_TRANSACTIONENABLED` | Enables transactions in MongoDB for Mongock library | `false` (Set to `false` to support successful migrations) |
Set `MONGOCK_TRANSACTIONENABLED` to `false` due to known issues with transactions in MongoDB version 5.
### Configuring MongoDB (runtime database - additional data)
CMS also connects to a Runtime MongoDB instance for operational data:
| Environment variable | Description | Default value |
| --------------------------------- | ---------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| `SPRING_DATA_MONGODB_RUNTIME_URI` | URI for connecting to Runtime MongoDB | Format: `mongodb://${RUNTIME_DB_USERNAME}:${RUNTIME_DB_PASSWORD}@,,:/${RUNTIME_DB_NAME}?retryWrites=false` |
| `RUNTIME_DB_USERNAME` | Runtime MongoDB username | `app-runtime` |
| `RUNTIME_DB_NAME` | Runtime MongoDB database name | `app-runtime` |
| `RUNTIME_DB_PASSWORD` | Runtime MongoDB password | |
| `SPRING_DATA_MONGODB_STORAGE` | Storage type for Runtime MongoDB (Azure environments only) | `mongodb` (Options: `mongodb`, `cosmosdb`) |
## Configuring Redis
The service can use the same Redis component deployed for the engine. See [Redis Configuration](./setup-guides-overview#redis-configuration).
| Environment variable | Description |
| ---------------------------- | ------------------------------------------------------ |
| `SPRING_DATA_REDIS_HOST` | Hostname or IP of the Redis server |
| `SPRING_DATA_REDIS_PASSWORD` | Authentication password for Redis |
| `SPRING_REDIS_TTL` | Maximum time-to-live for Redis cache keys (in seconds) |
## Configuring Kafka
### Connection settings
| Environment variable | Description | Default value |
| -------------------------------- | --------------------------- | ---------------- |
| `SPRING_KAFKA_BOOTSTRAPSERVERS` | Address of the Kafka server | `localhost:9092` |
| `SPRING_KAFKA_SECURITY_PROTOCOL` | Security protocol for Kafka | `"PLAINTEXT"` |
### Auth and retry configuration
| Environment variable | Description | Default value |
| ---------------------------------- | ----------------------------------------------- | ----------------- |
| `KAFKA_AUTHEXCEPTIONRETRYINTERVAL` | Retry interval after an authorization exception | `10` |
| `KAFKA_MESSAGE_MAX_BYTES` | Maximum message size in bytes | `52428800` (50MB) |
### Consumer group configuration
| Environment variable | Description | Default value |
| ------------------------------------------- | -------------------------------------- | -------------------------------- |
| `KAFKA_CONSUMER_GROUPID_CONTENTTRANSLATE` | Group ID for content translation | `cms-consumer-preview` |
| `KAFKA_CONSUMER_GROUPID_RESUSAGEVALIDATION` | Group ID for resource usage validation | `cms-res-usage-validation-group` |
### Consumer thread configuration
| Environment variable | Description | Default value |
| ------------------------------------------- | ------------------------------------- | ------------- |
| `KAFKA_CONSUMER_THREADS_CONTENTTRANSLATE` | Threads for content translation | `1` |
| `KAFKA_CONSUMER_THREADS_RESUSAGEVALIDATION` | Threads for resource usage validation | `2` |
### Topic configuration
The default topic pattern naming convention:
```yaml theme={"system"}
topic:
naming:
package: "ai.flowx."
environment: ""
version: ".v1"
prefix: ${kafka.topic.naming.package}${kafka.topic.naming.environment}
suffix: ${kafka.topic.naming.version}
engineReceivePattern: engine.receive.
```
### Content request topics
| Environment variable | Description | Default value |
| --------------------------------- | --------------------------------------------- | ---------------------------------------------------------------- |
| `KAFKA_TOPIC_REQUEST_CONTENT_IN` | Topic for incoming content retrieval requests | `ai.flowx.plugin.cms.trigger.retrieve.content.v1` |
| `KAFKA_TOPIC_REQUEST_CONTENT_OUT` | Topic for content retrieval results | `ai.flowx.engine.receive.plugin.cms.retrieve.content.results.v1` |
### Audit topics
| Environment variable | Description | Default value |
| ----------------------- | ---------------------------- | ------------------------------------- |
| `KAFKA_TOPIC_AUDIT_OUT` | Topic for sending audit logs | `ai.flowx.core.trigger.save.audit.v1` |
### Application resource usage validation
| Environment variable | Description | Default value |
| ----------------------------------------------- | ----------------------------------- | ------------------------------------------------------------------------- |
| `KAFKA_TOPIC_APPLICATION_IN_RESUSAGEVALIDATION` | Topic for resource usage validation | `ai.flowx.application-version.resources-usages.sub-res-validation.cms.v1` |
All actions that match a configured pattern will be consumed by the engine.
### Inter-Service topic coordination
When configuring Kafka topics in the FlowX ecosystem, it's critical to ensure proper coordination between services:
1. **Topic name matching**: Output topics from one service must match the expected input topics of another service.
For example:
* `KAFKA_TOPIC_APPLICATION_RESOURCE_RESELEMUSAGEVALIDATION_OUT_CMS` on Application Manager must match `KAFKA_TOPIC_APPLICATION_IN_RESUSAGEVALIDATION` on CMS
2. **Pattern consistency**: The pattern values must be consistent across services:
* Process Engine listens to topics matching: `ai.flowx.engine.receive.*`
* Integration Designer listens to topics matching: `ai.flowx.integration.receive.*`
3. **Communication flow**:
* Other services write to topics matching the Engine's pattern → Process Engine listens
* Process Engine writes to topics matching the Integration Designer's pattern → Integration Designer listens
The exact pattern value isn't critical, but it must be identical across all connected services. Some deployments require manually creating Kafka topics in advance rather than dynamically. In these cases, all topic names must be explicitly defined and coordinated.
### Kafka authentication
For secure environments, enable OAuth authentication with the following configuration:
```yaml theme={"system"}
spring.config.activate.on-profile: kafka-auth
spring:
kafka:
security.protocol: "SASL_PLAINTEXT"
properties:
sasl:
mechanism: "OAUTHBEARER"
jaas.config: "org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required oauth.client.id=\"${KAFKA_OAUTH_CLIENT_ID:kafka}\" oauth.client.secret=\"${KAFKA_OAUTH_CLIENT_SECRET:kafka-secret}\" oauth.token.endpoint.uri=\"${KAFKA_OAUTH_TOKEN_ENDPOINT_URI:kafka.auth.localhost}\" ;"
login.callback.handler.class: io.strimzi.kafka.oauth.client.JaasClientOauthLoginCallbackHandler
```
## CAS lib configuration
| Environment Variable | Description | Default Value |
| --------------------- | ---------------------------- | --------------- |
| `FLOWX_SPICEDB_HOST` | SpiceDB server hostname | `spicedb` |
| `FLOWX_SPICEDB_PORT` | SpiceDB server port | `50051` |
| `FLOWX_SPICEDB_TOKEN` | SpiceDB authentication token | `spicedb-token` |
## Configuring logging
| Environment variable | Description |
| -------------------- | --------------------------------------- |
| `LOGGING_LEVEL_ROOT` | Log level for root service logs |
| `LOGGING_LEVEL_APP` | Log level for application-specific logs |
## Configuring file storage
### Public storage
| Environment variable | Description |
| ------------------------------------------ | ------------------------------------------------------- |
| `APPLICATION_FILESTORAGE_S3_SERVERURL` | URL of S3 server for file storage |
| `APPLICATION_FILESTORAGE_S3_BUCKETNAME` | S3 bucket name |
| `APPLICATION_FILESTORAGE_S3_ROOTDIRECTORY` | Root directory in S3 bucket |
| `APPLICATION_FILESTORAGE_S3_CREATEBUCKET` | Auto-create bucket if it doesn't exist (`true`/`false`) |
| `APPLICATION_FILESTORAGE_S3_PUBLICURL` | Public URL for accessing files |
#### Private storage
Private CMS securely stores uploaded documents and AI-generated documents, ensuring they are accessible only via authenticated endpoints.
Private CMS ensures secure file storage by keeping documents hidden from the Media Library and accessible only through authenticated endpoints with access token permissions. Files can be retrieved using tags (e.g., ai\_document, ref:UUID\_doc) and are excluded from application builds.
| Environment variable | Description |
| ------------------------------------------------ | ------------------------------------------- |
| `APPLICATION_FILESTORAGE_S3_PRIVATESERVERURL` | URL of S3 server for private storage |
| `APPLICATION_FILESTORAGE_S3_PRIVATEBUCKETNAME` | S3 bucket name for private storage |
| `APPLICATION_FILESTORAGE_S3_PRIVATECREATEBUCKET` | Auto-create private bucket (`true`/`false`) |
| `APPLICATION_FILESTORAGE_S3_PRIVATEACCESSKEY` | Access key for private S3 server |
| `APPLICATION_FILESTORAGE_S3_PRIVATESECRETKEY` | Secret key for private S3 server |
## Configuring file upload size
| Environment variable | Description | Default value |
| ----------------------------------------- | -------------------------------- | ------------- |
| `SPRING_SERVLET_MULTIPART_MAXFILESIZE` | Maximum file size for uploads | `50MB` |
| `SPRING_SERVLET_MULTIPART_MAXREQUESTSIZE` | Maximum request size for uploads | `50MB` |
Setting high file size limits may increase vulnerability to potential attacks. Consider security implications before increasing these limits.
## Configuring application management
The following configuration from versions before 4.1 will be deprecated in version 5.0:
* `MANAGEMENT_METRICS_EXPORT_PROMETHEUS_ENABLED`: Enables or disables Prometheus metrics export.
Starting from version 4.1, use the following configuration. This setup is backwards compatible until version 5.0.
| Environment variable | Description | Default value |
| ---------------------------------------------- | --------------------------------- | ------------- |
| `MANAGEMENT_PROMETHEUS_METRICS_EXPORT_ENABLED` | Enables Prometheus metrics export | `false` |
# Data-Sync job setup
Source: https://docs.flowx.ai/5.1/setup-guides/data-sync
Comprehensive guide for configuring and deploying the Data-Sync Job in your Kubernetes environment
## Overview
The Data-Sync Job synchronizes data across multiple databases to maintain consistency and up-to-date information throughout your system. It operates by connecting to various databases, retrieving data, and synchronizing changes across them. The job logs all actions and can be scheduled to run at regular intervals.
## Quick Start
```bash theme={"system"}
# 1. Configure your environment variables in a data-sync-job.yaml file
# 2. Apply the configuration
kubectl apply -f data-sync-job.yaml
# 3. Monitor the job status
kubectl get jobs
# 4. Check logs if needed
kubectl logs job/data-sync-job
```
## Required environment variables
### Core configuration
| Variable | Description | Example |
| ------------------------------- | --------------------------------------------------------------- | ------------------------------------- |
| `FLOWX_SKIPPEDRESOURCESERVICES` | Comma-separated list of services to skip during synchronization | `document-plugin,notification-plugin` |
> ⚠️ **Warning**: Do not include spaces in the `FLOWX_SKIPPEDRESOURCESERVICES` value.
### Database connections
The Data-Sync Job requires connection details for multiple databases. Configure the following sections based on your deployment.
#### MongoDB connections
Each MongoDB-based service requires the following variables:
| Component | Required Variables |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **CMS** | `FLOWX_DATASOURCE_CMS_URI`, `CMS_MONGO_USERNAME`, `CMS_MONGO_PASSWORD`, `CMS_MONGO_DATABASE` |
| **Scheduler** | `FLOWX_DATASOURCE_SCHEDULER_URI`, `SCHEDULER_MONGO_USERNAME`, `SCHEDULER_MONGO_PASSWORD`, `SCHEDULER_MONGO_DATABASE` |
| **Task Manager** | `FLOWX_DATASOURCE_TASKMANAGER_URI`, `TASKMANAGER_MONGO_USERNAME`, `TASKMANAGER_MONGO_PASSWORD`, `TASKMANAGER_MONGO_DATABASE` |
| **Document Plugin** | `FLOWX_DATASOURCE_DOCUMENTPLUGIN_URI`, `DOCUMENTPLUGIN_MONGO_USERNAME`, `DOCUMENTPLUGIN_MONGO_PASSWORD`, `DOCUMENTPLUGIN_MONGO_DATABASE` |
| **Notification Plugin** | `FLOWX_DATASOURCE_NOTIFICATIONPLUGIN_URI`, `NOTIFICATIONPLUGIN_MONGO_USERNAME`, `NOTIFICATIONPLUGIN_MONGO_PASSWORD`, `NOTIFICATIONPLUGIN_MONGO_DATABASE` |
| **App Runtime** | `FLOWX_DATASOURCE_APPRUNTIME_URI`, `APPRUNTIME_MONGO_USERNAME`, `APPRUNTIME_MONGO_PASSWORD`, `APPRUNTIME_MONGO_DATABASE` |
| **Integration Designer** | `FLOWX_DATASOURCE_INTEGRATIONDESIGNER_URI`, `INTEGRATIONDESIGNER_MONGO_USERNAME`, `INTEGRATIONDESIGNER_MONGO_PASSWORD`, `INTEGRATIONDESIGNER_MONGO_DATABASE` |
| **Admin** | `FLOWX_DATASOURCE_ADMIN_URI`, `ADMIN_MONGO_USERNAME`, `ADMIN_MONGO_PASSWORD`, `ADMIN_MONGO_DATABASE` |
##### MongoDB URI format
```
mongodb://${USERNAME}:${PASSWORD}@mongodb-0.mongodb-headless,mongodb-1.mongodb-headless,mongodb-arbiter-0.mongodb-arbiter-headless:27017/${DATABASE}
```
#### PostgreSQL connections
| Component | Required Variables |
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Process Engine** | `FLOWX_DATASOURCE_ENGINE_URL`, `FLOWX_DATASOURCE_ENGINE_USERNAME`, `FLOWX_DATASOURCE_ENGINE_PASSWORD`, `FLOWX_DATASOURCE_ENGINE_DRIVERCLASSNAME` |
| **Application Manager** | `FLOWX_DATASOURCE_APPMANAGER_URL`, `FLOWX_DATASOURCE_APPMANAGER_USERNAME`, `FLOWX_DATASOURCE_APPMANAGER_PASSWORD`, `FLOWX_DATASOURCE_APPMANAGER_DRIVERCLASSNAME` |
| **Authentication System** | `FLOWX_DATASOURCE_AUTHSYSTEM_URL`, `FLOWX_DATASOURCE_AUTHSYSTEM_USERNAME`, `FLOWX_DATASOURCE_AUTHSYSTEM_PASSWORD` |
| | |
##### Driver class names
* PostgreSQL: `org.postgresql.Driver`
* Oracle: `oracle.jdbc.OracleDriver`
### Additional configuration
| Variable | Description |
| ----------------------------------------------- | ----------------------------------------------------------- |
| `SPRING_JPA_DATABASE` | Database type for Spring JPA (e.g., `postgresql`, `oracle`) |
| `SPRING_JPA_PROPERTIES_HIBERNATE_DEFAULTSCHEMA` | Default schema for Hibernate |
| `LOGGING_CONFIG_FILE` | Path to logging configuration file |
## Service to database mapping
Each service in your environment corresponds to specific database datasources:
| Service | Datasources |
| ------------------------ | ------------------------ |
| `scheduler-core` | scheduler |
| `cms-core` | cms |
| `task-management-plugin` | task-manager |
| `document-plugin` | document-plugin |
| `notification-plugin` | notification-plugin |
| `runtime-manager` | app-runtime, app-manager |
| `integration-designer` | integration-designer |
| `admin` | admin, engine |
| `process-engine` | engine |
| `application-manager` | app-manager |
| `authorization-system` | auth-system |
## Sample configuration
```yaml theme={"system"}
apiVersion: batch/v1
kind: Job
metadata:
name: data-sync-job
spec:
template:
spec:
containers:
- name: data-sync
image: your-registry/data-sync:latest
env:
- name: FLOWX_SKIPPEDRESOURCESERVICES
value: "document-plugin,notification-plugin"
# MongoDB connections
- name: FLOWX_DATASOURCE_CMS_URI
value: "mongodb://${CMS_MONGO_USERNAME}:${CMS_MONGO_PASSWORD}@mongodb-0.mongodb-headless:27017/${CMS_MONGO_DATABASE}"
# Add all other required environment variables
restartPolicy: Never
backoffLimit: 3
```
## SpiceDB configuration
| Environment Variable | Description | Default Value |
| --------------------- | ---------------------------- | --------------- |
| `FLOWX_SPICEDB_HOST` | SpiceDB server hostname | `spicedb` |
| `FLOWX_SPICEDB_PORT` | SpiceDB server port | `50051` |
| `FLOWX_SPICEDB_TOKEN` | SpiceDB authentication token | `spicedb-token` |
## Troubleshooting
### Common issues
1. **Database connection failures**:
* Verify MongoDB and PostgreSQL connection strings
* Check that database credentials are correct
* Ensure network connectivity between the job pod and databases
2. **Missing Required Variables**:
* Ensure all required environment variables are properly set
* Check for typos in environment variable names
3. **Service Synchronization Failures**:
* If a service isn't installed but data-sync is attempting to sync it, add it to `FLOWX_SKIPPEDRESOURCESERVICES`
### Logs
Monitor the Data-Sync Job logs to diagnose issues:
```bash theme={"system"}
kubectl logs job/data-sync-job
```
## Best practices
1. Store sensitive credentials in Kubernetes Secrets and reference them in your deployment
2. Include the Data-Sync Job in your CI/CD pipeline for automated deployment
3. Schedule regular runs using a Kubernetes CronJob for periodic synchronization
4. Monitor job execution and set up alerts for failures
## Next steps
After successfully configuring and deploying the Data-Sync Job:
1. Verify data consistency across databases
2. Set up monitoring and alerting for job status
3. Consider automating deployment through your CI/CD pipeline
# FlowX Designer setup
Source: https://docs.flowx.ai/5.1/setup-guides/designer-setup-guide
To set up FlowX Designer in your environment, follow this guide.
## Prerequisites Management
### NGINX
For optimal operation the FlowX.AI Designer should use a separate [NGINX](../docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-nginx) load balancer from the **FlowX Engine**. This routing mechanism handles API calls from the [SPA](./designer-setup-guide#for-configuring-the-spa) (single page application) to the backend service, to the engine and to various plugins.
Here's an example/suggestion of an NGINX setup:
#### For routing calls to plugins:
```jsx theme={"system"}
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-methods: GET, PUT, POST, DELETE, PATCH
nginx.ingress.kubernetes.io/cors-allow-origin: "http://localhost:4200,http://localhost:80,http://localhost:8080"
nginx.ingress.kubernetes.io/rewrite-target: /$2
name: flowx-admin-plugins-subpaths
spec:
rules:
- host: {{host}}
http:
paths:
- path: /notification(/|$)(.*)
backend:
serviceName: notification
servicePort: 80
- path: /document(/|$)(.*)
backend:
serviceName: document
servicePort: 80
tls:
- hosts:
- {{host}}
secretName: {{tls secret}}
```
#### For routing calls to the engine
Three different configurations are needed:
1. For viewing the current instances of processes running in the Engine:
```jsx theme={"system"}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /api/instances/$2
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-methods: GET, PUT, POST, DELETE, PATCH
nginx.ingress.kubernetes.io/cors-allow-origin: "http://localhost:4200,http://localhost:80,http://localhost:8080"
name: flowx-admin-engine-instances
spec:
rules:
- host: {{host}}
http:
paths:
- path: /api/instances(/|$)(.*)
backend:
serviceName: {{engine-service-name}}
servicePort: 80
```
2. For testing process definitions from the FLOWX Designer, route API calls and SSE communication to the Engine backend.
Setup for routing REST calls:
```jsx theme={"system"}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /api/$2
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-methods: GET, PUT, POST, DELETE, PATCH
nginx.ingress.kubernetes.io/cors-allow-origin: "http://localhost:4200,http://localhost:80,http://localhost:8080"
name: flowx-admin-engine-rest-api
spec:
rules:
- host: {{host}}
http:
paths:
- path: /{{PROCESS_API_PATH}}/api(/|$)(.*)
backend:
serviceName: {{engine-service-name}}
servicePort: 80
```
Setup for routing SSE communication:
```jsx theme={"system"}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/cors-allow-headers: ""
name: flowx-public-subpath-events-rewrite
spec:
rules:
- host: {{host}}
http:
paths:
- backend:
service:
name: events-gateway
port:
name: http
path: /api/events(/|$)(.*)
```
3. For accessing the REST API of the backend microservice
```jsx theme={"system"}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/proxy-body-size: "4m"
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-methods: GET, PUT, POST, DELETE, PATCH
nginx.ingress.kubernetes.io/cors-allow-origin: "http://localhost:4200,http://localhost:80,http://localhost:8080"
name: flowx-admin-api
spec:
rules:
- host: {{host}}
http:
paths:
- path: /
backend:
serviceName: {{flowx-admin-service-name}}
servicePort: 80
tls:
- hosts:
- {{host}}
secretName: {{tls secret}}
```
#### For configuring the SPA
```jsx theme={"system"}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
certmanager.k8s.io/issuer: letsencrypt-prod
kubernetes.io/ingress.class: nginx
ingress.kubernetes.io/affinity: cookie
name: flowx-designer-spa
spec:
rules:
- host: {{host of web app}}
http:
paths:
- backend:
serviceName: {{flowx-designer-service-name}}
servicePort: 80
tls:
- hosts:
- {{host of web app}}
secretName: {{tls secret}}
```
## Steps to deploy Frontend app
The FlowX.AI Designer is an SPA application that is packaged in a docker image with `nginx:1.19.10`. The web application allows an authenticated user to administrate the FLOWX platform.
In order to configure the docker image you need to configure the next parameters:
```yaml theme={"system"}
flowx-process-renderer:
env:
BASE_API_URL: {{the one configured as host in the nginx}}
PROCESS_API_PATH: {{something like /engine}}
KEYCLOAK_ISSUER: {{openid provider - ex: https://something/auth/realms/realmName}}
KEYCLOAK_REDIRECT_URI: {{url of the SPA}}
KEYCLOAK_CLIENT_ID: {{client ID}}
STATIC_ASSETS_PATH: {{mediaLibrary.s3.publicUrl }}/{{env}}
```
# Documents plugin setup
Source: https://docs.flowx.ai/5.1/setup-guides/documents-plugin-setup
The Documents plugin provides functionality for generating, persisting, combining, and manipulating documents within the FlowX.AI system.
The plugin is available as a docker image.
## Dependencies
Before setting up the plugin, ensure that you have the following dependencies installed and configured:
* [PostgreSQL](https://www.postgresql.org/) Database: You will need a PostgreSQL database to store data related to document templates and documents.
* [MongoDB](https://www.mongodb.com/2) Database: MongoDB is required for the HTML templates feature of the plugin.
* Kafka: Establish a connection to the Kafka instance used by the FlowX.AI engine.
* [Redis](https://redis.io/): Set up a Redis instance for caching purposes.
* S3-Compatible File Storage Solution: Deploy an S3-compatible file storage solution, such as [Min.io](https://min.io/), to store document files.
## Configuration
The plugin comes with pre-filled configuration properties, but you need to set up a few custom environment variables to tailor it to your specific setup. Here are the key configuration steps:
### Redis server
The plugin can utilize the [Redis component](https://app.gitbook.com/@flowx-ai/s/flowx-docs/flowx-engine/setup-guide#2-redis-server) already deployed for the FLOWX.AI engine. Make sure it is configured properly.
### Authorization configuration
To connect to the identity management platform, set the following environment variables:
| Environment Variable | Description | Default Value |
| ------------------------------------- | ----------------------------------------- | ----------------------------------- |
| `SECURITY_OAUTH2_BASESERVERURL` | Base URL of the OAuth2/OIDC server | `https://keycloak.example.com/auth` |
| `SECURITY_OAUTH2_CLIENT_CLIENTID` | OAuth2 client ID for the Documents Plugin | `document-plugin` |
| `SECURITY_OAUTH2_CLIENT_CLIENTSECRET` | OAuth2 client secret | `secret` |
| `SECURITY_OAUTH2_REALM` | OAuth2 realm name | `flowx` |
### Document processing configuration
| Environment Variable | Description | Default Value |
| ----------------------------------- | --------------------------------------- | ----------------------------------------------------------- |
| `FLOWX_DEFAULTCLIENTTYPE` | Default client type | `PF` |
| `FLOWX_HTML_TEMPLATES_ENABLED` | Enable HTML templates feature | `false` |
| `FLOWX_HTML_TEMPLATES_PDFFONTPATHS` | Paths to fonts for HTML templates | `/statics/fonts/Calibri.ttf, /statics/fonts/DejaVuSans.ttf` |
| `FLOWX_CONVERT_DPI` | DPI setting for PDF to image conversion | `150` |
Set the `FLOWX_HTML_TEMPLATES_PDFFONTPATHS` config to select the font used for generating documents based on PDF templates.
If you want to use specific fonts in your PDF templates, override the `FLOWX_HTML_TEMPLATES_PDFFONTPATHS` config. By default, Calibri and DejaVuSans are available fonts.
`FLOWX_CONVERT_DPI`: Sets the DPI (dots per inch) for PDF to JPEG conversion. Higher values result in higher resolution images. (Default value: `150`).
After making these configurations, the fonts will be available for use within PDF templates.
### Database configuration
#### SQL database (PostgreSQL)
The Documents Plugin uses a PostgreSQL database for relational data storage.
#### Primary MongoDB configuration
| Environment Variable | Description | Default Value |
| ----------------------------------------- | -------------------------- | ------------------------------------------------------------- |
| `SPRING_DATA_MONGODB_URI` | MongoDB connection URI | `mongodb://flowx:password@jx-document-mongodb:27017/document` |
| `MONGODB_USERNAME` | MongoDB username | `flowx` |
| `MONGODB_PASSWORD` | MongoDB password | `password` |
| `SPRING_DATA_MONGODB_UUID_REPRESENTATION` | UUID representation format | `standard` |
| `SPRING_DATA_MONGODB_STORAGE` | MongoDB storage type | `mongodb` |
#### Runtime MongoDB configuration
| Environment Variable | Description | Default Value |
| ------------------------------------------------ | ------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| `SPRING_DATA_MONGODB_RUNTIME_ENABLED` | Enable runtime MongoDB connection | `true` |
| `SPRING_DATA_MONGODB_RUNTIME_URI` | Runtime MongoDB connection URI | `mongodb://${MONGODB_USERNAME:flowx}:${MONGODB_PASSWORD:password}@jx-document-mongodb:27017/document` |
| `MONGODB_USERNAME` | Runtime MongoDB username | `paperflow` |
| `MONGODB_PASSWORD` | Runtime MongoDB password | `password` |
| `SPRING_DATA_MONGODB_RUNTIME_AUTOINDEXCREATION` | Enable automatic index creation | `false` |
| `SPRING_DATA_MONGODB_RUNTIME_UUIDREPRESENTATION` | UUID representation format for runtime connection | `standard` |
### Redis configuration
Set the following values with the corresponding Redis-related values:
| Environment Variable | Description | Default Value |
| ---------------------------- | ---------------------------------- | ----------------------- |
| `SPRING_DATA_REDIS_HOST` | Hostname of the Redis server | `localhost` |
| `SPRING_DATA_REDIS_PORT` | Port number of the Redis server | `6379` |
| `SPRING_DATA_REDIS_PASSWORD` | Password for Redis authentication | `defaultpassword` |
| `REDIS_TTL` | Time-to-live (TTL) for Redis cache | `5000000` (miliseconds) |
### Multipart upload configuration
| Environment Variable | Description | Default Value |
| ----------------------------------------- | ------------------------------------------ | ------------- |
| `SPRING_SERVLET_CONTEXTPATH` | Servlet context path | `/` |
| `SPRING_SERVLET_MULTIPART_MAXFILESIZE` | Maximum file size for uploads | `50MB` |
| `SPRING_SERVLET_MULTIPART_MAXREQUESTSIZE` | Maximum request size for multipart uploads | `50MB` |
## Basic Kafka configuration
| Environment Variable | Description | Default Value |
| ---------------------------------- | ---------------------------------- | ----------------------------------------- |
| `SPRING_KAFKA_BOOTSTRAPSERVERS` | Address of Kafka server(s) | `localhost:9092` |
| `SPRING_KAFKA_SECURITY_PROTOCOL` | Security protocol for Kafka | `PLAINTEXT` |
| `SPRING_KAFKA_CONSUMER_GROUPID` | Consumer group ID for the service | `kafka-svc-document-consumer-local-test2` |
| `KAFKA_MESSAGE_MAX_BYTES` | Maximum message size in bytes | `52428800` (50MB) |
| `KAFKA_AUTHEXCEPTIONRETRYINTERVAL` | Retry interval for auth exceptions | `10` (seconds) |
## Topic naming configuration
| Environment Variable | Description | Default Value |
| -------------------------------- | ----------------------------------- | ------------- |
| `KAFKA_TOPIC_NAMING_SEPARATOR` | Primary separator for topic names | `.` |
| `KAFKA_TOPIC_NAMING_SEPARATOR2` | Secondary separator for topic names | `-` |
| `KAFKA_TOPIC_NAMING_PACKAGE` | Package prefix for topic names | `ai.flowx.` |
| `KAFKA_TOPIC_NAMING_ENVIRONMENT` | Environment segment for topic names | ` ` |
| `KAFKA_TOPIC_NAMING_VERSION` | Version suffix for topic names | `.v1` |
## Thread configuration
| Environment Variable | Description | Default Value |
| --------------------------------------------------------------------------------------------- | ------------------------------------ | ------------- |
| `KAFKA_CONSUMER_THREADPOOLS_THREADPOOLGENERIC_THREADCOUNTPERCONTAINER_DOCUMENTGENERATEHTMLIN` | Threads for HTML document generation | `5` |
| `KAFKA_CONSUMER_THREADPOOLS_THREADPOOLGENERIC_THREADCOUNTPERCONTAINER_DOCUMENTPERSISTIN` | Threads for document persistence | `5` |
| `KAFKA_CONSUMER_THREADPOOLS_THREADPOOLGENERIC_THREADCOUNTPERCONTAINER_DOCUMENTSPLITTIN` | Threads for document splitting | `5` |
| `KAFKA_CONSUMER_THREADPOOLS_THREADPOOLGENERIC_THREADCOUNTPERCONTAINER_DOCUMENTGETURLSIN` | Threads for document URL retrieval | `5` |
| `KAFKA_CONSUMER_THREADPOOLS_THREADPOOLGENERIC_THREADCOUNTPERCONTAINER_OCRIN` | Threads for OCR processing | `5` |
| `KAFKA_CONSUMER_THREADPOOLS_THREADPOOLGENERIC_THREADCOUNTPERCONTAINER_FILEDELETEIN` | Threads for file deletion | `5` |
| `KAFKA_CONSUMER_THREADPOOLS_THREADPOOLGENERIC_THREADCOUNTPERCONTAINER_FILEUPDATEIN` | Threads for file updates | `5` |
| `KAFKA_CONSUMER_THREADPOOLS_THREADPOOLGENERIC_THREADCOUNTPERCONTAINER_FILECONVERTIN` | Threads for file conversion | `5` |
| `KAFKA_CONSUMER_THREADPOOLS_THREADPOOLGENERIC_THREADCOUNTPERCONTAINER_FILEPERSISTIN` | Threads for file persistence | `5` |
| `KAFKA_CONSUMER_THREADPOOLS_THREADPOOLGENERIC_THREADCOUNTPERCONTAINER_FILECOMBINEIN` | Threads for file combining | `5` |
## Document topics
### Generate HTML documents
| Environment Variable | Description | Default Value |
| ---------------------------------------- | ------------------------------------------- | ---------------------------------------------------------------------- |
| `KAFKA_TOPIC_DOCUMENT_GENERATE_HTML_IN` | Topic for incoming HTML generation requests | `ai.flowx.dev.plugin.document.trigger.generate.html.v1` |
| `KAFKA_TOPIC_DOCUMENT_GENERATE_HTML_OUT` | Topic for HTML generation results | `ai.flowx.dev.engine.receive.plugin.document.generate.html.results.v1` |
### Document persistence
| Environment Variable | Description | Default Value |
| ---------------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------- |
| `KAFKA_TOPIC_DOCUMENT_PERSIST_IN` | Topic for incoming document persistence requests | `ai.flowx.dev.plugin.document.trigger.persist.document.v1` |
| `KAFKA_TOPIC_DOCUMENT_PERSIST_OUT` | Topic for document persistence results | `ai.flowx.dev.engine.receive.plugin.document.persist.document.results.v1` |
### Document splitting
| Environment Variable | Description | Default Value |
| -------------------------------- | ---------------------------------------------- | ----------------------------------------------------------------------- |
| `KAFKA_TOPIC_DOCUMENT_SPLIT_IN` | Topic for incoming document splitting requests | `ai.flowx.dev.plugin.document.trigger.split.document.v1` |
| `KAFKA_TOPIC_DOCUMENT_SPLIT_OUT` | Topic for document splitting results | `ai.flowx.dev.engine.receive.plugin.document.split.document.results.v1` |
### Document URL retrieval
| Environment Variable | Description | Default Value |
| ----------------------------------- | ----------------------------------------- | ------------------------------------------------------------- |
| `KAFKA_TOPIC_DOCUMENT_GET_URLS_IN` | Topic for incoming URL retrieval requests | `ai.flowx.dev.plugin.document.retrieve.urls.v1` |
| `KAFKA_TOPIC_DOCUMENT_GET_URLS_OUT` | Topic for URL retrieval results | `ai.flowx.dev.engine.receive.plugin.document.urls.results.v1` |
### OCR processing
| Environment Variable | Description | Default Value |
| --------------------- | -------------------------------- | ------------------------------------------------------------ |
| `KAFKA_TOPIC_OCR_IN` | Topic for incoming OCR requests | `ai.flowx.dev.plugin.document.store.ocr.v1` |
| `KAFKA_TOPIC_OCR_OUT` | Topic for OCR processing results | `ai.flowx.dev.engine.receive.plugin.document.ocr.results.v1` |
## File operation topics
### File deletion
| Environment Variable | Description | Default Value |
| ----------------------------- | ----------------------------------------- | -------------------------------------------------------------------- |
| `KAFKA_TOPIC_FILE_DELETE_IN` | Topic for incoming file deletion requests | `ai.flowx.dev.plugin.document.trigger.delete.file.v1` |
| `KAFKA_TOPIC_FILE_DELETE_OUT` | Topic for file deletion results | `ai.flowx.dev.engine.receive.plugin.document.delete.file.results.v1` |
### File update
| Environment Variable | Description | Default Value |
| ----------------------------- | --------------------------------------- | -------------------------------------------------------------------- |
| `KAFKA_TOPIC_FILE_UPDATE_IN` | Topic for incoming file update requests | `ai.flowx.dev.plugin.document.trigger.update.file.v1` |
| `KAFKA_TOPIC_FILE_UPDATE_OUT` | Topic for file update results | `ai.flowx.dev.engine.receive.plugin.document.update.file.results.v1` |
### File conversion
| Environment Variable | Description | Default Value |
| ------------------------------ | --------------------------------- | --------------------------------------------------------------------- |
| `KAFKA_TOPIC_FILE_CONVERT_OUT` | Topic for file conversion results | `ai.flowx.dev.engine.receive.plugin.document.convert.file.results.v1` |
### File persistence
| Environment Variable | Description | Default Value |
| ------------------------------ | -------------------------------------------- | --------------------------------------------------------------------- |
| `KAFKA_TOPIC_FILE_PERSIST_IN` | Topic for incoming file persistence requests | `ai.flowx.dev.plugin.document.trigger.persist.file.v1` |
| `KAFKA_TOPIC_FILE_PERSIST_IN` | Topic for incoming file persistence requests | `ai.flowx.dev.plugin.document.trigger.persist.file.v1` |
| `KAFKA_TOPIC_FILE_PERSIST_OUT` | Topic for file persistence results | `ai.flowx.dev.engine.receive.plugin.document.persist.file.results.v1` |
### File combination
| Environment Variable | Description | Default Value |
| ------------------------------ | -------------------------------------------- | --------------------------------------------------------------------- |
| `KAFKA_TOPIC_FILE_COMBINE_IN` | Topic for incoming file combination requests | `ai.flowx.dev.plugin.document.trigger.combine.file.v1` |
| `KAFKA_TOPIC_FILE_COMBINE_OUT` | Topic for file combination results | `ai.flowx.dev.engine.receive.plugin.document.combine.file.results.v1` |
## Audit
| Environment Variable | Description | Default Value |
| ----------------------- | ---------------------------- | ----------------------------------------- |
| `KAFKA_TOPIC_AUDIT_OUT` | Topic for sending audit logs | `ai.flowx.dev.core.trigger.save.audit.v1` |
### General storage configuration
| Environment Variable | Description | Default Value |
| -------------------------------------------- | ------------------------------------------------------------------------------------------- | ----------------- |
| `APPLICATION_DEFAULTLOCALE` | Default locale for the application | `en` |
| `APPLICATION_SUPPORTEDLOCALES` | Comma-separated list of supported locales | `en, ro` |
| `APPLICATION_FILESTORAGE_TYPE` | Storage type to use (`s3` or `fileSystem`) | `s3` |
| `APPLICATION_FILESTORAGE_DISKDIRECTORY` | Directory for file storage when using filesystem | `MS_SVC_DOCUMENT` |
| `APPLICATION_FILESTORAGE_PARTITIONSTRATEGY` | Strategy for file organization (`NONE` or `PROCESS_DATE`) | `NONE` |
| `APPLICATION_FILESTORAGE_DELETIONSTRATEGY` | Strategy for deleting files (`delete`, `disabled`, or `deleteBypassingGovernanceRetention`) | `delete` |
| `APPLICATION_FILE_STORAGE_TEST_FILES_BUCKET` | Custom bucket name for test files (overrides default `-test-documents` suffix) | `-test-documents` |
`APPLICATION_FILESTORAGE_DELETIONSTRATEGY`:
* `disabled`: This will disable entirely the deletion of temporary files from the temporary bucket, and the responsibility to delete and clean up the bucket will move in the ownership of the admins of the implementing project.
* `deleteBypassingGovernanceRetention`: This will still delete the temporary files and further more will add in the delete request the header: `x-amz-bypass-governance-retention:true` , to enable deletion of governed files, in case the s3 configured user for document-plugin, will have the `s3:BypassGovernanceRetention` permission.
`APPLICATION_FILE_STORAGE_TEST_FILE_BUCKET`: This variable allows you to override the default `-test-documents` bucket suffix. You can configure a custom bucket name or use the same bucket as the main storage if needed. This is particularly useful when the client environment has restrictions on bucket naming conventions or doesn't have permissions to create new buckets.
## S3-Compatible storage configuration
| Environment Variable | Description | Default Value |
| ---------------------------------------------- | ------------------------------------------------- | ----------------------------- |
| `APPLICATION_FILESTORAGE_S3_ENABLED` | Enable S3-compatible storage | `true` |
| `APPLICATION_FILESTORAGE_S3_SERVERURL` | URL of MinIO or S3-compatible server | `http://minio-service:9000` |
| `APPLICATION_FILESTORAGE_S3_ACCESSKEY` | Access key for MinIO/S3 | `minio` |
| `APPLICATION_FILESTORAGE_S3_SECRETKEY` | Secret key for MinIO/S3 | `secret` |
| `APPLICATION_FILESTORAGE_S3_BUCKETPREFIX` | Prefix for bucket names | `qdevlocal-preview-paperflow` |
| `APPLICATION_FILESTORAGE_S3_TEMPBUCKET` | Name of temporary bucket for initial file uploads | `temp-bucket` |
| `APPLICATION_FILESTORAGE_S3_ENCRYPTIONENABLED` | Enable server-side encryption | `false` |
Make sure to follow the recommended [bucket naming rules](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html) when choosing the bucket prefix name.
## CAS lib configuration
| Environment Variable | Description | Default Value |
| --------------------- | ---------------------------- | --------------- |
| `FLOWX_SPICEDB_HOST` | SpiceDB server hostname | `spicedb` |
| `FLOWX_SPICEDB_PORT` | SpiceDB server port | `50051` |
| `FLOWX_SPICEDB_TOKEN` | SpiceDB authentication token | `spicedb-token` |
## Logging configuration
| Environment Variable | Description | Default Value |
| ---------------------------- | ------------------------------------------- | ------------- |
| `LOGGING_LEVEL_APP` | Log level for application logs | `DEBUG` |
| `LOGGING_LEVEL_MONGO_DRIVER` | Log level for MongoDB driver | `INFO` |
| `LOGGING_LEVEL_LIQUIBASE` | Log level for Liquibase database migrations | `INFO` |
| `LOGGING_LEVEL_REDIS` | Log level for Redis/Lettuce client | `OFF` |
| `LOGGING_LEVEL_ROOT` | Root logging level for the application | - |
# FlowX Events Gateway setup
Source: https://docs.flowx.ai/5.1/setup-guides/events-gateway-setup
This guide will walk you through the process of setting up the events-gateway service.
## Infrastructure prerequisites
Before proceeding with the setup, ensure that the following components have been set up:
* **Redis**
* **Kafka**
## Configuration
### Configuring Kafka
Set the following Kafka-related configurations using environment variables:
* `SPRING_KAFKA_BOOTSTRAPSERVERS` - the address of the Kafka server, it should be in the format "host:port"
#### Groupd IDs
The configuration parameters "KAFKA\_CONSUMER\_GROUPID\_\*" are used to set the consumer group name for Kafka consumers that consume messages from topics. Consumer groups in Kafka allow for parallel message processing by distributing the workload among multiple consumer instances. By configuring the consumer group ID, you can specify the logical grouping of consumers that work together to process messages from the same topic, enabling scalable and fault-tolerant message consumption in your Kafka application.
| Configuration Parameter | Default value | Description |
| --------------------------------------------------------- | ---------------------------------- | -------------------------------------------------------------------- |
| `KAFKA_CONSUMER_GROUPID_PROCESSENGINECOMMANDS_MESSAGE` | `engine-commands-message` | Consumer group ID for processing engine commands messages |
| `KAFKA_CONSUMER_GROUPID_PROCESSENGINECOMMANDS_DISCONNECT` | `engine-commands-disconnect` | Consumer group ID for processing engine commands disconnect messages |
| `KAFKA_CONSUMER_GROUPID_PROCESSENGINECOMMANDS_CONNECT` | `engine-commands-connect` | Consumer group ID for processing engine commands connect messages |
| `KAFKA_CONSUMER_GROUPID_PROCESS_TASKCOMMANDS_MESSAGE` | `task-commands-message` | Consumer group ID for processing task commands |
| `KAFKA_CONSUMER_GROUPID_PROCESSVERSIONCOMMANDS_MESSAGE` | `process-version-commands-message` | Consumer group ID for processing process version commands messages |
| `KAFKA_CONSUMER_GROUPID_GENERICCOMMANDS` | `generic-commands-message` | Consumer group ID for processing generic commands messages |
| `KAFKA_CONSUMER_GROUPID_USERBROADCASTCOMMANDS` | `user-broadcast-commands-message` | Consumer group ID for processing user broadcast commands messages |
#### Threads
The configuration parameters "KAFKA\_CONSUMER\_THREADS\_\*" are utilized to specify the number of threads assigned to Kafka consumers for processing messages from topics. These parameters allow you to fine-tune the concurrency and parallelism of your Kafka consumer application, enabling efficient and scalable message consumption from Kafka topics.
| Configuration Parameter | Default value | Description |
| --------------------------------------------------------- | ------------- | -------------------------------------------------------------------- |
| `KAFKA_CONSUMER_THREADS_PROCESSENGINECOMMANDS_MESSAGE` | 10 | Number of threads for processing engine commands messages |
| `KAFKA_CONSUMER_THREADS_PROCESSENGINECOMMANDS_DISCONNECT` | 5 | Number of threads for processing engine commands disconnect messages |
| `KAFKA_CONSUMER_THREADS_PROCESSENGINECOMMANDS_CONNECT` | 5 | Number of threads for processing engine commands connect messages |
| `KAFKA_CONSUMER_THREADS_TASKCOMMANDS` | 10 | Number of threads for task commands |
| `KAFKA_CONSUMER_THREADS_PROCESSVERSIONCOMMANDS` | 10 | Number of threads for processing process version commands messages |
| `KAFKA_CONSUMER_THREADS_GENERICCOMMANDS` | 10 | Number of threads for processing generic commands messages |
| `KAFKA_CONSUMER_THREADS_USERBROADCASTCOMMANDS` | 10 | Number of threads for processing user broadcast commands messages |
#### Kafka topics related to process instances
| Configuration Parameter | Default value |
| --------------------------------------------------------- | ---------------------------------------------------------- |
| `KAFKA_TOPIC_EVENTSGATEWAY_PROCESSINSTANCE_IN_MESSAGE` | `ai.flowx.dev.eventsgateway.engine.commands.message.v1` |
| `KAFKA_TOPIC_EVENTSGATEWAY_PROCESSINSTANCE_IN_DISCONNECT` | `ai.flowx.dev.eventsgateway.engine.commands.disconnect.v1` |
| `KAFKA_TOPIC_EVENTSGATEWAY_PROCESSINSTANCE_IN_CONNECT` | `ai.flowx.dev.eventsgateway.engine.commands.connect.v1` |
#### Kafka topics related to process versions
| Configuration Parameter | Default value |
| ----------------------------------------------------- | ---------------------------------------------------------------- |
| `KAFKA_TOPIC_EVENTSGATEWAY_PROCESSVERSION_IN_MESSAGE` | `ai.flowx.dev.eventsgateway.process-version-commands.message.v1` |
#### Kafka topics related to user messages
| Configuration Parameter | Default value |
| --------------------------------------------------- | ------------------------------------------------- |
| `KAFKA_TOPIC_EVENTSGATEWAY_USERMESSAGES_IN_MESSAGE` | `ai.flowx.dev.core.designer.notification.user.v1` |
### Configuring authorization & access roles
Set the following environment variables to connect to the identity management platform:
| Configuration Parameter | Description |
| ------------------------------------- | --------------------------------------- |
| `SECURITY_OAUTH2_BASESERVERURL` | Base URL of the OAuth2 server |
| `SECURITY_OAUTH2_CLIENT_CLIENTID` | Client ID for OAuth2 authentication |
| `SECURITY_OAUTH2_CLIENT_CLIENTSECRET` | Client secret for OAuth2 authentication |
| `SECURITY_OAUTH2_REALM` | Realm for OAuth2 authentication |
### Redis configuration
FlowX Events Gateway supports three Redis deployment modes. The process engine sends messages to the events-gateway, which is responsible for sending them to Redis.
#### Standalone mode (default)
For single Redis instance deployments:
| Configuration Parameter | Description |
| ---------------------------- | ---------------------------- |
| `SPRING_DATA_REDIS_HOST` | Hostname of the Redis server |
| `SPRING_DATA_REDIS_PASSWORD` | Password for Redis server |
| `SPRING_DATA_REDIS_PORT` | Connect to the Redis server |
#### Sentinel mode
For high-availability Redis with automatic failover:
| Configuration Parameter | Description | Example Value |
| ----------------------------------- | -------------------------------------- | ------------------------------------- |
| `SPRING_DATA_REDIS_SENTINEL_MASTER` | Name of the Redis master instance | `mymaster` |
| `SPRING_DATA_REDIS_SENTINEL_NODES` | Comma-separated list of Sentinel nodes | `host1:26379,host2:26379,host3:26379` |
| `SPRING_DATA_REDIS_PASSWORD` | Password for Redis authentication | |
#### Cluster mode
For Redis cluster deployments with data sharding:
| Configuration Parameter | Description | Example Value |
| --------------------------------- | ------------------------------------- | ---------------------------------- |
| `SPRING_DATA_REDIS_CLUSTER_NODES` | Comma-separated list of cluster nodes | `host1:6379,host2:6379,host3:6379` |
| `SPRING_DATA_REDIS_PASSWORD` | Password for Redis authentication | `yourpassword` |
Starting with FlowX 5.x, Master-Replica mode is no longer supported. Use Sentinel mode for high availability with automatic failover, or Cluster mode for horizontal scaling.
**Redis Deployment Modes:**
* **Standalone**: Single Redis instance (suitable for development and low-traffic environments)
* **Sentinel**: High availability with automatic failover (recommended for production)
* **Cluster**: Horizontal scaling with data sharding (for high-throughput applications)
Choose the appropriate mode based on your availability and scalability requirements.
### Events
This configuration helps manage how event data is stored and accessed in Redis.
| Configuration Parameter | Default | Description |
| ------------------------------ | ------- | ----------------------------------------------------------------------------------------------------- |
| `EVENTS_REDIS_FREQUENCYMILLIS` | 200 | Time interval (in milliseconds) between Redis queries by the events gateway to check for new messages |
| `EVENTS_REDIS_TTLHOURS` | 4 | Sets the time-to-live for events in Redis to 4 hours |
### Configuring logging
The following environment variables could be set in order to control log levels:
| Configuration Parameter | Description |
| ----------------------- | -------------------------------------------------------- |
| `LOGGING_LEVEL_ROOT` | Logging level for the root Spring Boot microservice logs |
| `LOGGING_LEVEL_APP` | Logging level for the application-level logs |
# Configuring access roles for processes
Source: https://docs.flowx.ai/5.1/setup-guides/flowx-engine-setup-guide/configuring-access-roles-for-processes
Learn how to set up user role-based access control for process definitions using swimlanes, business filters, and permissions configuration.
Process access control in FlowX.AI is managed through a flexible role-based system that allows you to control who can access, view, and interact with different parts of your processes. This guide covers the complete setup and configuration of access roles for processes.
## Overview
FlowX.AI provides two main mechanisms for controlling process access:
* **Swimlanes**: Group process nodes by participants and control access at the node level
* **Business filters**: Restrict access based on dynamic business rules and user attributes
Both mechanisms work together to provide granular control over process security and user permissions.
## Prerequisites
Before configuring process access roles, ensure you have:
1. **Identity Provider Setup**: A configured identity provider (Keycloak, Entra ID, etc.) with user roles defined
2. **Service Account**: A service account with appropriate permissions in your identity provider
3. **Platform Configuration**: Proper platform configuration to connect to your identity provider
Complete guide for setting up identity provider integration
## Access Control with Swimlanes
### What are Swimlanes?
Swimlanes provide a way of grouping process nodes by process participants. They allow you to ensure that only users with specific roles can access certain process nodes.
**Key characteristics:**
* By default, all process nodes belong to the same swimlane
* When a token moves between swimlanes, user access is evaluated
* Users without access to a swimlane will see the process in read-only mode
* Users receive notifications when access changes
### Configuring Swimlanes
#### Step 1: Set Up Roles in Identity Provider
First, configure the desired user roles in your identity provider solution and assign users to the appropriate roles.
Use the **Access Management** tab under **General Settings** in FlowX Designer to administrate all roles and view their current assignments.

#### Step 2: Configure Service Account
A [service account](../access-management/configuring-an-iam-solution#process-engine-service-account) with appropriate permissions must be configured in your identity provider to allow FlowX.AI to access role information.
#### Step 3: Configure Swimlane Permissions
Navigate to your process definition and access the **Permissions** tab in the process settings panel. Here you can configure access for each swimlane.
After defining roles in your identity provider solution, they will be available in the process definition settings panel for configuring swimlane access. When you create a new swimlane, it automatically comes with two default permissions assigned.
### Default Swimlane Permissions
Every process comes with a **Default** swimlane that includes two standard permissions:

* **Execute**: Users can start process instances and run actions on them
* **Self-assign**: Users can assign process instances to themselves and begin working on them
These default permissions are available in FlowX.AI platform version **2.11.0 and later**.
### Swimlane Execution Control
#### Allow Multiple Swimlane Executors
For each swimlane, you can control execution permissions by switching between:
* **Swimlane owner + multiple executors** (default)
* **Only Swimlane Owner**
This setting can be configured individually for each swimlane in your process definition.

When **multiple executors** is enabled, you gain additional flexibility to configure permissions at the UI Element level within User Tasks for the selected swimlane.

This granular control allows you to:
* Assign different UI elements to different roles within the same swimlane
* Create more complex permission structures for sophisticated workflows
* Maintain security while enabling collaborative work on process instances
### Additional Permissions
You can manually add additional permissions based on your specific requirements:
#### Core Permissions
* **View**: Users can view process instance data
* **Execute**: Users can start process instances and run actions
* **Self-assign**: Users can assign process instances to themselves
#### Task Management Permissions
These permissions are specifically for use with the [Task Management plugin](/platform-deep-dive/plugins/custom-plugins/task-management/task-management-overview):
* **Assign**: Assign tasks to other users
* **Unassign**: Remove task assignments from other users
* **Hold**: Mark process instances as on hold
* **Unhold**: Remove hold status from process instances
* **Change Priority**: Modify task priority levels

**Version Compatibility**:
* **2.11.0+**: Specific roles must be configured for each operation, otherwise restrictions will be applied
* **\< 2.11.0**: If no role is configured, no restrictions are applied
## Access Control with Business Filters
### What are Business Filters?
Business filters allow you to restrict process access based on dynamic business rules. For example, you might want only users from a specific bank branch to view process instances started from that branch.
### How Business Filters Work
Business filters use attributes that are:
1. Configured in your identity management platform
2. Made available on the authorization token
3. Assigned to application users
4. Stored in process instance parameters
When a business filter is applied, only users with matching attributes can interact with the process instance.
### Configuring Business Filters
#### Step 1: Identity Provider Configuration
Configure business filter attributes in your identity provider as:
* A list of filters on the authorization token
* Attributes assigned to specific users
#### Step 2: Process Definition Setup
In your process definition, include nodes with actions that store the current business filter value to:
```
task.businessFilters
```
This value must be set in the process instance parameters.
#### Step 3: Runtime Behavior
Once configured, only users with the correct business filter attribute can interact with process instances that have the filter applied.
Detailed guide on implementing business filters
## Configuration Examples
### Standard User Configuration
For regular users who need basic process interaction:

```yaml theme={"system"}
Permissions:
- execute: USER_ROLE
- self-assign: USER_ROLE
- view: USER_ROLE
```
### Administrator Configuration
For administrators who need full process management capabilities:

```yaml theme={"system"}
Permissions:
- execute: ADMIN_ROLE
- self-assign: ADMIN_ROLE
- view: ADMIN_ROLE
- assign: ADMIN_ROLE
- unassign: ADMIN_ROLE
- hold: ADMIN_ROLE
- unhold: ADMIN_ROLE
- change-priority: ADMIN_ROLE
```
### Team Lead Configuration
For team leads who can manage their team's tasks:
```yaml theme={"system"}
Permissions:
- execute: TEAM_LEAD_ROLE
- self-assign: TEAM_LEAD_ROLE
- view: TEAM_LEAD_ROLE
- assign: TEAM_LEAD_ROLE
- unassign: TEAM_LEAD_ROLE
```
## Platform Configuration
### Engine Configuration
Configure the FlowX Engine with the necessary environment variables for your identity provider:
#### Required Variables
```bash theme={"system"}
SECURITY_OAUTH2_BASE_SERVER_URL=https://your-keycloak-server.com
SECURITY_OAUTH2_CLIENT_CLIENT_ID=your-client-id
SECURITY_OAUTH2_CLIENT_CLIENT_SECRET=your-client-secret
SECURITY_OAUTH2_REALM=your-realm
```
#### Optional Variables
```bash theme={"system"}
# Default role for process access (default: FLOWX_ROLE)
FLOWX_PROCESS_DEFAULTROLES=CUSTOM_ROLE
# Data anonymization for sensitive information
FLOWX_DATA_ANONYMIZATION=true
```
### REST API Access Control
To restrict API calls by user role, configure path authorizations:
```yaml theme={"system"}
security:
pathAuthorizations:
- path: "/api/**"
rolesAllowed: "ANY_AUTHENTICATED_USER"
- path: "/api/admin/**"
rolesAllowed: "ADMIN_ROLE"
```
## Process Instance Management
### Viewing Process Instances
Users can view active process instances and their data from FlowX Designer if they have the appropriate role (default: `FLOWX_ROLE`).
**Data Privacy**: Use the `FLOWX_DATA_ANONYMIZATION` environment variable to configure whether sensitive user data should be hidden in process views.
### Starting Processes
The `FLOWX_ROLE` (or your configured default role) is required for users to start new process instances.
## Troubleshooting
### Common Issues
**Users can't see processes**: Verify that users have the correct roles assigned in your identity provider and that the service account is properly configured.
**Permission denied errors**: Check that the required permissions are configured for the specific operations and that users have the appropriate roles.
**Business filters not working**: Ensure that business filter attributes are properly configured in the identity provider and available on the authorization token.
### Version-Specific Considerations
**Platform Version \< 2.11.0**: If no role is configured on an operation, no restrictions will be applied. This behavior changed in version 2.11.0 where explicit role configuration became mandatory.
## Best Practices
1. **Principle of Least Privilege**: Only grant the minimum permissions necessary for users to perform their tasks
2. **Role Hierarchy**: Design roles hierarchically (e.g., Admin > Team Lead > User) to simplify management
3. **Regular Audits**: Periodically review role assignments and permissions to ensure they remain appropriate
4. **Documentation**: Maintain clear documentation of what each role can do and who should have each role
5. **Testing**: Always test permission changes in a non-production environment first
6. **Business Filters**: Use business filters for dynamic, data-driven access control rather than static role-based restrictions
## Related Topics
Detailed swimlanes configuration guide
Advanced business rules for access control
Task management features and permissions
Complete identity provider configuration
# Configuring Elasticsearch indexing
Source: https://docs.flowx.ai/5.1/setup-guides/flowx-engine-setup-guide/configuring-elasticsearch-indexing/elasticsearch-indexing
This guide shows you how to enable process instance indexing using either Kafka or HTTP transport strategies.
## Before you start
* **Read the prerequisites**: Review the [Intro to Elasticsearch](../../../docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-elasticsearch) section first
* **Choose your strategy**: Decide between Kafka (recommended for production) or HTTP indexing based on your infrastructure
* **Check permissions**: Ensure you have access to modify process-engine configurations
## Quick decision: Kafka vs HTTP
| Strategy | Best for | Pros | Cons |
| ----------------------- | -------------------------------------------- | -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- |
| **Kafka** (recommended) | Production environments with high throughput | Fire-and-forget communication, time-based partitioning, better performance, decoupled architecture | Requires Kafka Connect setup |
| **HTTP** | Development or simple setups | Direct connection, easier setup | Blocking operations, no time-based partitioning, tighter coupling |
**Why Kafka is recommended**: The Kafka strategy allows for fire-and-forget communication, eliminating the need for the process engine to wait for indexing requests to complete. This significantly improves performance in high-throughput scenarios.
**Critical difference**: Only the Kafka strategy provides out-of-the-box support for time-based partitioning through the `transforms.routeTS.timestamp.format` configuration (see later in this guide). The HTTP strategy does not support time-based partitioning as a built-in feature.
***
## Configuration overview
All indexing is controlled by these core settings:
### Global indexing control
```bash theme={"system"}
FLOWX_INDEXING_ENABLED=false # Set only when you want to disable indexing
```
`FLOWX_INDEXING_ENABLED` defaults to true. Only set this variable if you want to disable indexing by setting it to false.
### Strategy selection
```bash theme={"system"}
FLOWX_INDEXING_TYPE=kafka # Options: kafka, http, no-indexing
```
### Performance considerations (FlowX defaults)
**Default configuration:**
* **Monthly indices**: `yyyyMM` format for time-based partitioning (Kafka only)
* **2 shards + 2 replicas**: Handles up to 200k process instances per day
* **Total shards per month**: 6 (2 primary + 4 replica shards)
* **Annual impact**: 72 shards per year (well under Elasticsearch's 1000 shard default limit)
**Scaling guidelines:**
* **If indexing becomes slow**: Check physical resources and shard size
* **If monthly indices become too large**: Switch to weekly indices (`yyyyww`)
* **For high parallel indexing load**: Add more primary shards
* **High availability**: The default 2 replicas provide good redundancy
**Important**: Each replica is applied per shard, so monitor resource usage when increasing replicas.
### HTTP-only setting
```bash theme={"system"}
FLOWX_INDEXING_OPTIMISTICLOCKINGRETRIES=3 # Only used with HTTP strategy
```
***
## Setup: Kafka indexing (recommended)
### Step 1: Configure the process engine
Add these environment variables to your process-engine configuration:
```bash theme={"system"}
# Elasticsearch connection settings
SPRING_ELASTICSEARCH_REST_PROTOCOL=https
SPRING_ELASTICSEARCH_REST_URIS=elasticsearch:9200
SPRING_ELASTICSEARCH_REST_DISABLESSL=false
SPRING_ELASTICSEARCH_REST_USERNAME=
SPRING_ELASTICSEARCH_REST_PASSWORD=
# Use Kafka strategy
FLOWX_INDEXING_TYPE=kafka
# Index settings (optional - these are the defaults)
FLOWX_ELASTICSEARCH_INDEXSETTINGS_NAME=process_instance
FLOWX_ELASTICSEARCH_INDEXSETTINGS_SHARDS=2
FLOWX_ELASTICSEARCH_INDEXSETTINGS_REPLICAS=0
```
### Step 2: Deploy Kafka Connect
**Prerequisites:**
* Kafka cluster (installed with Strimzi operator)
* Elasticsearch cluster (installed with eck-operator)
* Convert ES certificates to JKS format (see commands below)
**Certificate conversion commands:**
```bash theme={"system"}
# 1. Extract the CA certificate
kubectl get secret elasticsearch-es-http-certs-public -n flowx \
-o jsonpath='{.data.ca\.crt}' | base64 --decode > es-ca.crt
# 2. Create JKS keystore
keytool -importcert -alias elasticsearch -file es-ca.crt \
-keystore keystore.jks -storepass flowx123456 -noprompt
# 3. Create Kubernetes secret
kubectl -n flowx create secret generic kafka-connect-elastic-jks --from-file=keystore.jks
```
**Deploy KafkaConnect:**
```yaml theme={"system"}
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
metadata:
name: flowx-elasticsearch-kafka-connect
annotations:
strimzi.io/use-connector-resources: "true"
spec:
version: 3.9.0 # Match your Kafka cluster version
replicas: 1
bootstrapServers: flowx-kafka-bootstrap:9092
# OAuth configuration (if using Keycloak)
authentication:
type: oauth
clientId: flowx-service-client
clientSecret:
secretName: keycloak-kafka-cluster-client
key: KEYCLOAK_KAFKA_CLUSTER_CLIENT_SECRET
tokenEndpointUri: https://YOUR_KEYCLOAK_URL/auth/realms/YOUR_REALM/protocol/openid-connect/token
tlsTrustedCertificates:
- secretName: self-signed-certificate
certificate: tls.crt
disableTlsHostnameVerification: true
config:
group.id: flowx-kafka-connect-es-plugin
offset.storage.topic: ai.flowx.kafka-connect-cluster-offsets
config.storage.topic: ai.flowx.kafka-connect-cluster-configs
status.storage.topic: ai.flowx.kafka-connect-cluster-status
config.storage.replication.factor: -1
offset.storage.replication.factor: -1
status.storage.replication.factor: -1
topic.creation.enable: true
config.providers: env
config.providers.env.class: org.apache.kafka.common.config.provider.EnvVarConfigProvider
build:
output:
type: docker
image: ttl.sh/strimzi-connect-flowx-$(date +%s):24h # Change this for production
plugins:
- name: kafka-connect-elasticsearch
artifacts:
- type: zip
url: https://d2p6pa21dvn84.cloudfront.net/api/plugins/confluentinc/kafka-connect-elasticsearch/versions/15.0.0/confluentinc-kafka-connect-elasticsearch-15.0.0.zip
template:
pod:
volumes:
- name: elasticsearch-keystore
secret:
secretName: kafka-connect-elastic-jks
connectContainer:
env:
- name: ELASTIC_PASSWORD
valueFrom:
secretKeyRef:
name: elasticsearch-es-elastic-user
key: elastic
volumeMounts:
- name: elasticsearch-keystore
mountPath: /mnt/elasticsearch-keystore
readOnly: true
```
### Step 3: Configure the Elasticsearch Sink Connector
**Key settings explained:**
* `transforms.routeTS.timestamp.format`: Controls index partitioning (monthly=`yyyyMM`, daily=`yyyyMMdd`)
* `transforms.routeTS.topic.format`: Must start with your configured index name
* `batch.size`: Adjust based on throughput needs (1000 is good default)
**Process instance data archiving integration**: If you're using FlowX's process instance data archiving feature, ensure your Elasticsearch partitioning configuration aligns with your database partitioning strategy. This is essential because:
* When archiving process instances, data must be deleted from both the database and Elasticsearch
* The partitioning intervals should be similar between database and Elasticsearch for consistent data lifecycle management
* Elasticsearch indexing strategy must be enabled when partitioning is configured
```yaml theme={"system"}
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnector
metadata:
name: flowx-elasticsearch-sink-connector
labels:
strimzi.io/cluster: flowx-elasticsearch-kafka-connect
spec:
class: io.confluent.connect.elasticsearch.ElasticsearchSinkConnector
config:
# Connection settings - UPDATE THESE
connection.url: https://elasticsearch-es-http.flowx.svc:9200
connection.username: elastic
connection.password: ${env:ELASTIC_PASSWORD}
# SSL settings
elastic.security.protocol: SSL
elastic.https.ssl.truststore.type: JKS
elastic.https.ssl.truststore.location: /mnt/elasticsearch-keystore/keystore.jks
elastic.https.ssl.truststore.password: "flowx123456"
# Source topic - must match your Kafka topic naming
topics: ai.flowx.core.index.process.v1
# Time-based routing - IMPORTANT: Choose your partitioning strategy
transforms: routeTS
transforms.routeTS.type: org.apache.kafka.connect.transforms.TimestampRouter
transforms.routeTS.timestamp.format: yyyyMM # Monthly indices (change as needed)
transforms.routeTS.topic.format: process_instance-${timestamp} # Must start with your index name
# Performance settings
batch.size: 1000
read.timeout.ms: 30000
flush.synchronously: "true"
# Data handling
behavior.on.malformed.documents: IGNORE
behavior.on.null.values: IGNORE
drop.invalid.message: "true"
schema.ignore: "true"
write.method: UPSERT
type.name: _doc
# Converters
key.converter: org.apache.kafka.connect.storage.StringConverter
key.converter.schemas.enable: "false"
value.converter: org.apache.kafka.connect.json.JsonConverter
value.converter.schemas.enable: "false"
```
### Step 4: Verify the setup
**Check Kafka Connect status:**
```bash theme={"system"}
kubectl get kafkaconnect flowx-elasticsearch-kafka-connect -o yaml
```
**Check connector status:**
```bash theme={"system"}
kubectl get kafkaconnector flowx-elasticsearch-sink-connector -o yaml
```
**Verify indices are being created:**
```bash theme={"system"}
# Port-forward to Elasticsearch
kubectl port-forward svc/elasticsearch-es-http 9200:9200
# Check indices (should see process_instance-YYYYMM pattern)
curl -k -u elastic:$ELASTIC_PASSWORD https://localhost:9200/_cat/indices?v
```
***
## Setup: HTTP indexing (simple)
### Configure the process engine
For HTTP indexing, update your process-engine configuration:
```bash theme={"system"}
# Elasticsearch connection settings
SPRING_ELASTICSEARCH_REST_PROTOCOL=https
SPRING_ELASTICSEARCH_REST_URIS=elasticsearch:9200
SPRING_ELASTICSEARCH_REST_DISABLESSL=false
SPRING_ELASTICSEARCH_REST_USERNAME=
SPRING_ELASTICSEARCH_REST_PASSWORD=
# Use HTTP strategy
FLOWX_INDEXING_TYPE=http
# Index settings (optional - these are the defaults)
FLOWX_ELASTICSEARCH_INDEXSETTINGS_NAME=process_instance
FLOWX_ELASTICSEARCH_INDEXSETTINGS_SHARDS=2
FLOWX_ELASTICSEARCH_INDEXSETTINGS_REPLICAS=0
# HTTP-specific setting
FLOWX_INDEXING_OPTIMISTICLOCKINGRETRIES=3
```
***
## Kafka topics
The process engine publishes indexing data to this topic:
| Environment Variable | Default Value |
| ------------------------------- | ------------------------------------ |
| `KAFKA_TOPIC_PROCESS_INDEX_OUT` | `ai.flowx.dev.core.index.process.v1` |
**Important:** The topic name in your Kafka Sink Connector configuration must match this value.
***
## Index management
### Automatic template creation
The process engine automatically creates Elasticsearch index templates during startup:
* **HTTP strategy**: Creates the index directly with configured shards/replicas
* **Kafka strategy**: Creates an index template that applies to dynamically created indices
### Time-based partitioning (Kafka only)
Choose your partitioning strategy based on data volume and retention needs:
| Database Partitioning | Elasticsearch Format | Index Pattern | Best For |
| --------------------- | -------------------- | --------------------------- | ---------------- |
| Monthly | `yyyyMM` | `process_instance-202406` | Medium volume |
| Weekly | `yyyyww` | `process_instance-202426` | High volume |
| Daily | `yyyyMMdd` | `process_instance-20240615` | Very high volume |
### Efficient data deletion
**Best practice:** Delete entire indices rather than individual documents for better performance.
With time-based partitioning, you can:
```bash theme={"system"}
# Delete old monthly index
curl -X DELETE "https://localhost:9200/process_instance-202401"
# Delete multiple old indices
curl -X DELETE "https://localhost:9200/process_instance-2024*"
```
***
## Troubleshooting
### Common issues
**Indexing not working:**
1. Check if indexing is disabled (only if you explicitly set `FLOWX_INDEXING_ENABLED=false`)
2. Verify Elasticsearch connectivity
3. Check process-engine logs for errors
**Kafka Connect issues:**
```bash theme={"system"}
# Check connect cluster status
kubectl describe kafkaconnect flowx-elasticsearch-kafka-connect
# Check connector logs
kubectl logs -l strimzi.io/kind=KafkaConnect -f
```
**Certificate issues:**
```bash theme={"system"}
# Verify JKS keystore
keytool -list -keystore keystore.jks -storepass flowx123456
# Check secret exists
kubectl get secret kafka-connect-elastic-jks -o yaml
```
**Performance issues:**
* Increase `batch.size` in connector config
* Adjust number of shards based on cluster size
* Monitor Elasticsearch cluster health
### Verification queries
**Check index pattern:**
```bash theme={"system"}
# List all process instance indices
curl -k -u elastic:$PASSWORD "https://localhost:9200/_cat/indices/process_instance*?v"
# Check template exists
curl -k -u elastic:$PASSWORD "https://localhost:9200/_template/process_instance*"
```
**Query across time-based indices:**
```bash theme={"system"}
# Search across all process instance indices
curl -k -u elastic:$PASSWORD -X GET "https://localhost:9200/process_instance-*/_search" \
-H "Content-Type: application/json" \
-d '{"query": {"match_all": {}}}'
```
# Indexing config guidelines
Source: https://docs.flowx.ai/5.1/setup-guides/flowx-engine-setup-guide/configuring-elasticsearch-indexing/process-instance-indexing-config-guidelines
The configuration of Elasticsearch for process instances indexing depends on various factors related to the application load, the number of process instances, parallel requests, and indexed keys per process. Although the best approach to sizing and configuring Elasticsearch is through testing and monitoring under load, here are some guidelines to help you get started
## Indexing strategy
* Advantages of Multiple Small Indices:
* Fast indexing process.
* Flexibility in cleaning up old data.
* Potential Drawbacks:
* Hitting the maximum number of shards per node, resulting in exceptions when creating new indices.
* Increased search response time and memory footprint.
* Deletion
* When deleting data in Elasticsearch, it's recommended to delete entire indices instead of individual documents. Creating multiple smaller indices provides the flexibility to delete entire indices of old data that are no longer needed.
Alternatively, you can create fewer indices that span longer periods of time, such as one index per year. This approach offers small search response times but may result in longer indexing times and difficulty in cleaning up and recovering data in case of failure.
## Shard and replica configuration
The solution includes an index template that gets created with the settings from the process-engine app (name, shards, replicas) when running the app for the first time. This template controls the settings and mapping of all newly created indices.
Once an index is created, you cannot update its number of shards and replicas. However, you can update the settings from the index template at runtime in Elasticsearch, and new indices will be created with the updated settings. Note that the mapping should not be altered as it is required by the application.
## Recommendations for resource management
To manage functional indexing operations and resources efficiently, consider the following recommendations:
* [Sizing indexes upon creation](#sizing-indexes-upon-creation)
* [Balancing](#balancing)
* [Delete unneeded indices](#delete-unneeded-indices)
* [Reindex large indices](#reindex-large-indices)
* [Force merge indices](#force-merge-indices)
* [Shrink indices](#shrink-indices)
* [Combine indices](#combine-indices)
#### Sizing indexes upon creation
Recommendations:
* Start with monthly indexes that have 2 shards and 1 replica. This setup is typically sufficient for handling up to 200k process instances per day; ensures a parallel indexing in two main shards and has also 1 replica per each main shard (4 shards in total). This would create 48 shards per year in the Elasticsearch nodes; A lot less than the default 1000 shards, so you will have enough space for other indexes as well.
* If you observe that the indexing gets really, really slow, then you should look at the physical resources / shard size and start adapting the config.
* If you observe that indexing one monthly index gets massive and affects the performance, then think about switching to weekly indices.
* If you have huge spikes of parallel indexing load (even though that depends on the Kafka connect cluster configuration), then think about adding more main shards.
* Consider having at least one replica for high availability. However, keep in mind that the number of replicas is applied to each shard, so creating many replicas may lead to increased resource usage.
* Monitor the number of shards created and estimate when you might reach the maximum shards per node, taking into account the number of nodes in your cluster.
#### Balancing
When configuring index settings, consider the number of nodes in your cluster. The total number of shards (calculated by the formula: primary\_shards\_number \* (replicas\_number +1)) for an index should be directly proportional to the number of nodes. This helps Elasticsearch distribute the load evenly across nodes and avoid overloading a single node. Avoid adding shards and replicas unnecessarily.
#### Delete unneeded indices
Deleting unnecessary indices reduces memory footprint, the number of used shards, and search time.
#### Reindex large indices
If you have large indices, consider reindexing them. Process instance indexing involves multiple updates on an initially indexed process instance, resulting in multiple versions of the same document in the index. Reindexing creates a new index with only the latest version, reducing storage size, memory footprint, and search response time.
#### Force merge indices
If there are indices with no write operations performed anymore, perform force merge to reduce the number of segments in the index. This operation reduces memory footprint and response time. Only perform force merge during off-peak hours when the index is no longer used for writing.
#### Shrink indices
If you have indices with many shards, consider shrinking them using the shrink operation. This reindexes the data into an index with fewer shards. Perform this operation during off-peak hours.
#### Combine indices
If there are indices with no write operations performed anymore (e.g., process\_instance indices older than 6 months), combine these indices into a larger one and delete the smaller ones. Use the reindexing operation during off-peak hours. Ensure that write operations are no longer needed from the FLOWX platform for these indices.
# FlowX Engine setup
Source: https://docs.flowx.ai/5.1/setup-guides/flowx-engine-setup-guide/engine-setup
This guide provides instructions on how to set up and configure the FlowX.AI Engine.
## Infrastructure prerequisites
Before installing the FlowX.AI Engine, verify that the following infrastructure components are installed and configured:
* **Kafka**
* **Elasticsearch**
* **PostgreSQL**
* **MongoDB**
## Dependencies
The FlowX Engine requires the following components:
* **Database**: Primary storage for the engine
* **Redis Server**: Used for caching. See [Redis Configuration](#redis-configuration)
* **Kafka**: Handles messaging and event-driven architecture. See [Configuring Kafka](#configuring-kafka)
For a microservices architecture, services typically manage their data via dedicated databases.
### Required external services
* **Redis Cluster**: Caches process definitions, compiled scripts, and Kafka responses
* **Kafka Cluster**: Enables communication with external plugins and integrations
## Configuration setup
FlowX.AI Engine uses environment variables for configuration. This section covers key configuration areas:
* [Database configuration](#database-configuration)
* [Script engine configuration](#configuring-script-engine)
* [Authorization & access roles](#authorization--access-roles)
* [Kafka configuration](#configuring-kafka)
* [File upload size](#configuring-file-upload-size)
* [Elasticsearch connection](#configuring-elasticsearch-connection)
### Database configuration
#### PostgreSQL
| Environment variable | Description |
| ----------------------------------- | --------------------------- |
| `SPRING_DATASOURCE_URL` | Database URL for PostgreSQL |
| `SPRING_DATASOURCE_USERNAME` | Username for PostgreSQL |
| `SPRING_DATASOURCE_PASSWORD` | Password for PostgreSQL |
| `SPRING_DATASOURCE_DRIVERCLASSNAME` | Driver class for PostgreSQL |
#### MongoDB configuration
Configure connection to the Runtime MongoDB instance:
| Environment variable | Description | Default value |
| --------------------------------- | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| `SPRING_DATA_MONGODB_RUNTIME_URI` | URI for connecting to MongoDB | Format: `mongodb://${RUNTIME_DB_USERNAME}:${DB_PASSWORD}@,,:/${DB_NAME}?retryWrites=false` |
| `RUNTIME_DB_USERNAME` | MongoDB username | `app-runtime` |
| `DB_NAME` | MongoDB database name | `app-runtime` |
### Configuration parameters
There are two types of Config Params that can be read from the environment: **variables** and **secrets**. There is one provider for variables and secrets extracted from the environment variables, and two providers for the ones extracted from Kubernetes. By default, the variables and secrets are extracted from environment variables (`env` provider).
#### Configuration parameters from environment variables (default)
The `env` provider used for variables and secrets extracts them from environment variables. For security reasons, the `env` provider uses an allow list regex which defaults to `FLOWX_CONFIGPARAM_.*`. This means only environment variables that match this naming pattern can be read at runtime into configuration params (either as variables or secrets). Feel free to edit it to match the environment variables that you use in your deployment.
| Environment variable | Description | Default value |
| ------------------------------------------- | --------------------------------------------------------------- | ---------------------- |
| `FLOWX_CONFIGPARAMS_VARS_PROVIDER` | Provider type for variables | `env` |
| `FLOWX_CONFIGPARAMS_VARS_ALLOWLISTREGEX` | Regular expression to match allowed env variables for variables | `FLOWX_CONFIGPARAM_.*` |
| `FLOWX_CONFIGPARAMS_SECRETS_PROVIDER` | Provider type for secrets | `env` |
| `FLOWX_CONFIGPARAMS_SECRETS_ALLOWLISTREGEX` | Regular expression to match allowed env variables for secrets | `FLOWX_CONFIGPARAM_.*` |
#### Configuration parameters from Kubernetes Secrets and ConfigMaps
Use the following configuration to read Config Params from Kubernetes Secrets and ConfigMaps:
| Environment variable | Description | Values |
| ------------------------------------- | --------------------------- | ---------------- |
| `FLOWX_CONFIGPARAMS_VARS_PROVIDER` | Provider type for variables | `k8s-configmaps` |
| `FLOWX_CONFIGPARAMS_SECRETS_PROVIDER` | Provider type for secrets | `k8s-secrets` |
These providers can be configured as follows:
| Environment variable | Description | Values |
| -------------------------------------------------------------- | ------------------------------------------ | -------------------- |
| `FLOWX_CONFIGPARAMS_PROVIDERS_K8SCONFIGMAPS_CONFIGMAPSLIST_0_` | Name of the ConfigMap to use for variables | `flowx-configparams` |
| `FLOWX_CONFIGPARAMS_PROVIDERS_K8SSECRETS_SECRETSLIST_0_` | Name of the Secret to use for secrets | `flowx-configparams` |
You can configure multiple secrets and ConfigMaps by incrementing the index number (e.g., `FLOWX_CONFIGPARAMS_PROVIDERS_K8SSECRETS_SECRETSLIST_1`, `FLOWX_CONFIGPARAMS_PROVIDERS_K8SCONFIGMAPS_CONFIGMAPSLIST_1`). Values are overridden based on the order in which the maps are defined.
The default provider is `env`, but there is a built-in allowlist with the regex pattern `FLOWX_CONFIGPARAM_.*`. This means only configuration parameters that match this naming pattern can be read at runtime, whether they are environment variables or secret variables.
### Authorization & access roles
This section covers OAuth2 configuration settings for securing the Spring application.
#### Resource server settings (OAuth2 configuration)
The following configuration from versions before 4.1 will be deprecated in version 5.0:
* `SECURITY_OAUTH2_BASE_SERVER_URL`: Base URL for the OAuth 2.0 Authorization Server
* `SECURITY_OAUTH2_CLIENT_CLIENT_ID`: Client identifier registered with the OAuth 2.0 Authorization Server
* `SECURITY_OAUTH2_CLIENT_CLIENT_SECRET`: Secret key for authenticating client requests
* `SECURITY_OAUTH2_REALM`: Realm name used for OAuth2 authentication
Starting from version 4.1, use the following configuration instead. This setup is backwards compatible until version 4.5.
| Environment variable | Description | Default value |
| ----------------------------------------------------------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| `SPRING_SECURITY_OAUTH2_RESOURCE_SERVER_OPAQUE_TOKEN_INTROSPECTION_URI` | URI for token introspection | `${security.oauth2.base-server-url}/realms/${security.oauth2.realm}/protocol/openid-connect/token/introspect` |
| `SPRING_SECURITY_OAUTH2_RESOURCE_SERVER_OPAQUE_TOKEN_CLIENT_ID` | Client ID for token introspection | `${security.oauth2.client.client-id}` |
| `SPRING_SECURITY_OAUTH2_RESOURCE_SERVER_OPAQUE_TOKEN_CLIENT_SECRET` | Client secret for token introspection | `${security.oauth2.client.client-secret}` |
#### Service account settings
Configure the process engine service account:
| Environment variable | Description | Default value |
| ----------------------------------------------------- | ------------------------------------- | ------------------------------------- |
| `SECURITY_OAUTH2_SERVICE_ACCOUNT_ADMIN_CLIENT_ID` | Client ID for the service account | `flowx-${SPRING_APPLICATION_NAME}-sa` |
| `SECURITY_OAUTH2_SERVICE_ACCOUNT_ADMIN_CLIENT_SECRET` | Client secret for the service account | |
For more information about the necessary service account, see [Process Engine Service Account](../access-management/configuring-an-iam-solution#process-engine-service-account).
#### Security configuration
| Environment variable | Description | Default value |
| ---------------------------------------------- | ---------------------------------------- | ----------------------------------- |
| `SECURITY_TYPE` | Type of security mechanism | `oauth2` |
| `SECURITY_BASIC_ENABLED` | Enable basic authentication | `false` |
| `SECURITY_PUBLIC_PATHS_0` | Public path not requiring authentication | `/api/platform/components-versions` |
| `SECURITY_PUBLIC_PATHS_1` | Public path not requiring authentication | `/manage/actuator/health` |
| `SECURITY_PATH_AUTHORIZATIONS_0_PATH` | Security path pattern | `"/api/**"` |
| `SECURITY_PATH_AUTHORIZATIONS_0_ROLES_ALLOWED` | Roles allowed for path access | `"ANY_AUTHENTICATED_USER"` |
### Configuring Kafka
Kafka handles all communication between the FlowX.AI Engine, external plugins, and integrations. It also notifies running process instances when certain events occur.
#### Kafka connection settings
| Environment variable | Description | Default value |
| -------------------------------- | --------------------------- | ---------------- |
| `SPRING_KAFKA_BOOTSTRAPSERVERS` | Kafka bootstrap servers | `localhost:9092` |
| `SPRING_KAFKA_SECURITY_PROTOCOL` | Security protocol for Kafka | `"PLAINTEXT"` |
#### Message routing configuration
| Environment variable | Description | Default value |
| ------------------------ | --------------------------------------------------------------------- | ------------------- |
| `KAFKA_DEFAULTFXCONTEXT` | Default context value for message routing when no context is provided | `""` (empty string) |
When `KAFKA_DEFAULTFXCONTEXT` is set and an event is received on Kafka without an fxContext header, the system will automatically apply the default context value to the message.
#### Kafka consumer retry settings
| Environment variable | Description | Default value |
| ---------------------------------- | ----------------------------------------------------------------- | ------------- |
| `KAFKA_AUTHEXCEPTIONRETRYINTERVAL` | Interval between retries after `AuthorizationException` (seconds) | `10` |
#### Consumer groups & consumer threads configuration
Both a producer and a consumer must be configured:

##### About consumer groups and threads
A consumer group is a set of consumers that jointly consume messages from one or more Kafka topics. Each consumer group has a unique identifier (group ID) that Kafka uses to manage message distribution.
Thread numbers refer to the number of threads a consumer application uses to process messages. Increasing thread count can improve parallelism and efficiency, especially with high message volumes.
##### Consumer group configuration
| Environment variable | Description | Default value |
| ------------------------------------------------ | ------------------------------------------------------------------- | ------------------ |
| `KAFKA_CONSUMER_GROUPID_NOTIFYADVANCE` | Group ID for notifying advance actions | `notif123-preview` |
| `KAFKA_CONSUMER_GROUPID_NOTIFYPARENT` | Group ID for notifying when a subprocess is blocked | `notif123-preview` |
| `KAFKA_CONSUMER_GROUPID_ADAPTERS` | Group ID for messages related to adapters | `notif123-preview` |
| `KAFKA_CONSUMER_GROUPID_SCHEDULERRUNACTION` | Group ID for running scheduled actions | `notif123-preview` |
| `KAFKA_CONSUMER_GROUPID_SCHEDULERADVANCING` | Group ID for messages indicating continuing advancement | `notif123-preview` |
| `KAFKA_CONSUMER_GROUPID_MESSAGEEVENTS` | Group ID for message events | `notif123-preview` |
| `KAFKA_CONSUMER_GROUPID_PROCESS_START` | Group ID for starting processes | `notif123-preview` |
| `KAFKA_CONSUMER_GROUPID_PROCESS_STARTFOREVENT` | Group ID for starting processes for an event | `notif123-preview` |
| `KAFKA_CONSUMER_GROUPID_PROCESS_EXPIRE` | Group ID for expiring processes | `notif123-preview` |
| `KAFKA_CONSUMER_GROUPID_PROCESS_OPERATIONS` | Group ID for processing operations from Task Management plugin | `notif123-preview` |
| `KAFKA_CONSUMER_GROUPID_PROCESS_BATCHPROCESSING` | Group ID for processing bulk operations from Task Management plugin | `notif123-preview` |
##### Consumer thread configuration
| Environment variable | Description | Default value |
| ------------------------------------------------ | --------------------------------------------------------------------- | ------------- |
| `KAFKA_CONSUMER_THREADS_NOTIFYADVANCE` | Number of threads for notifying advance actions | `6` |
| `KAFKA_CONSUMER_THREADS_NOTIFYPARENT` | Number of threads for notifying when a subprocess is blocked | `6` |
| `KAFKA_CONSUMER_THREADS_ADAPTERS` | Number of threads for processing messages related to adapters | `6` |
| `KAFKA_CONSUMER_THREADS_SCHEDULERADVANCING` | Number of threads for continuing advancement | `6` |
| `KAFKA_CONSUMER_THREADS_SCHEDULERRUNACTION` | Number of threads for running scheduled actions | `6` |
| `KAFKA_CONSUMER_THREADS_MESSAGEEVENTS` | Number of threads for message events | `6` |
| `KAFKA_CONSUMER_THREADS_PROCESS_START` | Number of threads for starting processes | `6` |
| `KAFKA_CONSUMER_THREADS_PROCESS_STARTFOREVENT` | Number of threads for starting processes for an event | `2` |
| `KAFKA_CONSUMER_THREADS_PROCESS_EXPIRE` | Number of threads for expiring processes | `6` |
| `KAFKA_CONSUMER_THREADS_PROCESS_OPERATIONS` | Number of threads for processing operations from task management | `6` |
| `KAFKA_CONSUMER_THREADS_PROCESS_BATCHPROCESSING` | Number of threads for processing bulk operations from task management | `6` |
All events that start with a configured pattern will be consumed by the Engine. This enables you to create new integrations and connect them to the engine without changing the configuration.
#### Configuring Kafka topics
Recommended topic naming convention:
* `KAFKA_TOPIC_NAMING_PACKAGE`: `ai.flowx.`
* `KAFKA_TOPIC_NAMING_ENVIRONMENT`: ` `
* `KAFKA_TOPIC_NAMING_VERSION`: `v1`
* `KAFKA_TOPIC_NAMING_SEPARATOR`: `.`
* `KAFKA_TOPIC_NAMING_SEPARATOR2`: `-`
* `KAFKA_TOPIC_NAMING_PREFIX`: `${KAFKA_TOPIC_NAMING_PACKAGE}${KAFKA_TOPIC_NAMING_ENVIRONMENT}`
* `KAFKA_TOPIC_NAMING_SUFFIX`: `${KAFKA_TOPIC_NAMING_VERSION}`
* `KAFKA_TOPIC_NAMING_ENGINERECEIVEPATTERN`: `engine.receive.`
* `KAFKA_TOPIC_NAMING_INTEGRATIONRECEIVEPATTERN`: `integration.receive.`
* `KAFKA_TOPIC_PATTERN`: `${KAFKA_TOPIC_NAMING_PREFIX}${KAFKA_TOPIC_NAMING_ENGINERECEIVEPATTERN}*`
* `KAFKA_TOPIC_INTEGRATIONPATTERN`: `${KAFKA_TOPIC_NAMING_PREFIX}${KAFKA_TOPIC_NAMING_INTEGRATIONRECEIVEPATTERN}*`
##### Core engine topics
| Environment variable | Description | Default value |
| ------------------------------------ | --------------------------------------------------------- | ----------------------------------------- |
| `KAFKA_TOPIC_PROCESS_NOTIFY_ADVANCE` | Topic used internally for advancing processes | `ai.flowx.core.notify.advance.process.v1` |
| `KAFKA_TOPIC_PROCESS_NOTIFY_PARENT` | Topic used for sub-processes to notify the parent process | `ai.flowx.core.notify.parent.process.v1` |
| `KAFKA_TOPIC_PATTERN` | Pattern the Engine listens on for incoming events | `ai.flowx.engine.receive.*` |
| `KAFKA_TOPIC_PROCESS_EVENT_MESSAGE` | Topic for process message events | `ai.flowx.core.message.event.process.v1` |
##### Topics related to the Task Management plugin
| Environment variable | Description | Default value |
| --------------------------------------- | ---------------------------------------------------------- | -------------------------------------------- |
| `KAFKA_TOPIC_TASK_OUT` | Topic used for sending notifications to the plugin | `ai.flowx.plugin.tasks.trigger.save.task.v1` |
| `KAFKA_TOPIC_PROCESS_OPERATIONS_IN` | Topic for receiving information about operations performed | `ai.flowx.core.trigger.operations.v1` |
| `KAFKA_TOPIC_PROCESS_OPERATIONS_BULKIN` | Topic where operations can be performed in bulk | `ai.flowx.core.trigger.operations.bulk.v1` |
###### OPERATIONS\_IN request example
```json theme={"system"}
{
"operationType": "UNASSIGN", //type of operation performed in Task Management plugin
"taskId": "some task id",
"processInstanceUuid": "1cff0b7d-966b-4b35-9e9b-63b1d6757ec6",
"swimlaneName": "Default",
"swimlaneId": "51ec1241-fe06-4576-9c84-31598c05c527",
"owner": {
"firstName": null,
"lastName": null,
"username": "service-account-flowx-process-engine-account",
"enabled": false
},
"author": "admin@flowx.ai"
}
```
###### BULK\_IN request example
```json theme={"system"}
{
"operations": [
{
"operationType": "HOLD",
"taskId": "some task id",
"processInstanceUuid": "d3aabfd8-d041-4c62-892f-22d17923b223", // the id of the process instance
"swimlaneName": "Default", //name of the swimlane
"owner": null,
"author": "john.doe@flowx.ai"
},
{
"operationType": "HOLD",
"taskId": "some task id",
"processInstanceUuid": "d3aabfd8-d041-4c62-892f-22d17923b223",
"swimlaneName": "Default", //name of the swimlane
"owner": null,
"author": "john.doe@flowx.ai"
}
]
}
```
To send additional keys in the response, attach them in the header. For example, you can use a `requestID` key.
A response should be sent on a `callbackTopic` if it is mentioned in the headers:

```json theme={"system"}
{"processInstanceId": ${processInstanceId}, "callbackTopic": "test.operations.out", "requestID":"1234567890"}
```
Task manager operations include: assignment, unassignment, hold, unhold, terminate. These are matched with the `...operations.out` topic on the engine side. For more information, see the Task Management plugin documentation:
📄 [**Task management plugin**](/4.0/docs/platform-deep-dive/plugins/custom-plugins/task-management/task-management-overview)
##### Topics related to the scheduler extension
| Environment variable | Description | Default value |
| -------------------------------------------- | -------------------------------------------------------- | ------------------------------------------ |
| `KAFKA_TOPIC_PROCESS_EXPIRE_IN` | Topic for requests to expire processes | `ai.flowx.core.trigger.expire.process.v1` |
| `KAFKA_TOPIC_PROCESS_SCHEDULE_OUT_SET` | Topic used for scheduling process expiration | `ai.flowx.core.trigger.set.schedule.v1` |
| `KAFKA_TOPIC_PROCESS_SCHEDULE_OUT_STOP` | Topic used for stopping process expiration | `ai.flowx.core.trigger.stop.schedule.v1` |
| `KAFKA_TOPIC_PROCESS_SCHEDULE_IN_RUN_ACTION` | Topic for requests to run scheduled actions | `ai.flowx.core.trigger.run.action.v1` |
| `KAFKA_TOPIC_PROCESS_SCHEDULE_IN_ADVANCE` | Topic for events related to advancing through a database | `ai.flowx.core.trigger.advance.process.v1` |
##### Topics related to Timer Events
| Environment variable | Description | Default value |
| --------------------------------------------------- | ----------------------------------------------- | ---------------------------------------------------- |
| `KAFKA_TOPIC_PROCESS_SCHEDULEDTIMEREVENTS_OUT_SET` | Used to communicate with Scheduler microservice | `ai.flowx.core.trigger.set.timer-event-schedule.v1` |
| `KAFKA_TOPIC_PROCESS_SCHEDULEDTIMEREVENTS_OUT_STOP` | Used to communicate with Scheduler microservice | `ai.flowx.core.trigger.stop.timer-event-schedule.v1` |
##### Topics related to the Search Data service
| Environment variable | Description | Default value |
| ----------------------------- | --------------------------------------------------------- | ----------------------------------------------------- |
| `KAFKA_TOPIC_DATA_SEARCH_IN` | Topic that the Engine listens on for search requests | `ai.flowx.core.trigger.search.data.v1` |
| `KAFKA_TOPIC_DATA_SEARCH_OUT` | Topic used by the Engine to reply after finding a process | `ai.flowx.engine.receive.core.search.data.results.v1` |
##### Topics related to the Audit service
| Environment variable | Description | Default value |
| ----------------------- | ---------------------------- | ------------------------------------- |
| `KAFKA_TOPIC_AUDIT_OUT` | Topic for sending audit logs | `ai.flowx.core.trigger.save.audit.v1` |
##### Topics related to Elasticsearch indexing
| Environment variable | Default value |
| ------------------------------- | -------------------------------- |
| `KAFKA_TOPIC_PROCESS_INDEX_OUT` | `ai.flowx.core.index.process.v1` |
##### Processes that can be started by sending messages to a Kafka topic
| Environment variable | Description | Default value |
| ------------------------------- | ----------------------------------------------------------------- | ---------------------------------------- |
| `KAFKA_TOPIC_PROCESS_START_IN` | Topic for requests to start a new process instance | `ai.flowx.core.trigger.start.process.v1` |
| `KAFKA_TOPIC_PROCESS_START_OUT` | Topic for sending the reply after starting a new process instance | `ai.flowx.core.confirm.start.process.v1` |
##### Topics related to Message Events
| Environment variable | Default value |
| ----------------------------------- | -------------------------------------------------- |
| `KAFKA_TOPIC_PROCESS_STARTFOREVENT` | `ai.flowx.core.trigger.start-for-event.process.v1` |
| | |
##### Topics related to Events-gateway microservice
| Environment variable | Description | Default value |
| ------------------------------------------ | --------------------------------------------------------- | ------------------------------------------------------ |
| `KAFKA_TOPIC_EVENTSGATEWAY_OUT_MESSAGE` | Outgoing messages from process-engine to events-gateway | `ai.flowx.eventsgateway.engine.commands.message.v1` |
| `KAFKA_TOPIC_EVENTSGATEWAY_OUT_DISCONNECT` | Disconnect commands from process-engine to events-gateway | `ai.flowx.eventsgateway.engine.commands.disconnect.v1` |
| `KAFKA_TOPIC_EVENTSGATEWAY_OUT_CONNECT` | Connect commands from process-engine to events-gateway | `ai.flowx.eventsgateway.engine.commands.connect.v1` |
##### Topics related to platform components
| Environment variable | Description | Default value |
| ---------------------------------------------- | ---------------------------------- | ---------------------------------------------------- |
| `KAFKA_TOPIC_PLATFORM_COMPONENTS_VERSIONS_OUT` | Topic for platform version caching | `ai.flowx.core.trigger.platform.versions.caching.v1` |
##### Inter-service topic coordination
When configuring FlowX services, ensure the following:
1. The Engine's `pattern` must match the pattern used by services sending messages to the Engine
2. The `integrationPattern` must match the pattern used by the Integration Designer
3. Output topics from one service must match the expected input topics of another service
For example:
* Services send to topics matching `ai.flowx.engine.receive.*` → Engine listens
* Engine sends to topics matching `ai.flowx.integration.receive.*` → Integration Designer listens
##### Kafka message size configuration
| Environment variable | Description | Default value |
| ------------------------- | ----------------------------- | ----------------- |
| `KAFKA_MESSAGE_MAX_BYTES` | Maximum message size in bytes | `52428800` (50MB) |
This setting affects:
* Producer message max bytes
* Producer max request size
* Consumer max partition fetch bytes
##### Kafka authentication
For secure environments, you can enable OAuth authentication with the following configuration:
```yaml theme={"system"}
spring.config.activate.on-profile: kafka-auth
spring:
kafka:
security.protocol: "SASL_PLAINTEXT"
properties:
sasl:
mechanism: "OAUTHBEARER"
jaas.config: "org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required oauth.client.id=\"${KAFKA_OAUTH_CLIENT_ID:kafka}\" oauth.client.secret=\"${KAFKA_OAUTH_CLIENT_SECRET:kafka-secret}\" oauth.token.endpoint.uri=\"${KAFKA_OAUTH_TOKEN_ENDPOINT_URI:kafka.auth.localhost}\" ;"
login.callback.handler.class: io.strimzi.kafka.oauth.client.JaasClientOauthLoginCallbackHandler
```
You need to set the following environment variables:
* `KAFKA_OAUTH_CLIENT_ID`
* `KAFKA_OAUTH_CLIENT_SECRET`
* `KAFKA_OAUTH_TOKEN_ENDPOINT_URI`
### Configuring Elasticsearch connection
The Process Engine uses Elasticsearch for process instance indexing and search capabilities. Configure the connection using these environment variables:
| Variable | Description | Default Value |
| -------------------------------------- | ------------------------------------------- | ------------- |
| `SPRING_ELASTICSEARCH_REST_PROTOCOL` | Connection protocol | `https` |
| `SPRING_ELASTICSEARCH_REST_URIS` | URL(s) of Elasticsearch nodes (no protocol) | - |
| `SPRING_ELASTICSEARCH_REST_DISABLESSL` | Disable SSL verification | `false` |
| `SPRING_ELASTICSEARCH_REST_USERNAME` | Authentication username | - |
| `SPRING_ELASTICSEARCH_REST_PASSWORD` | Authentication password | - |
For indexing setup, check the [Configuring Elasticsearch indexing](./configuring-elasticsearch-indexing/elasticsearch-indexing) section.
#### Indexing settings
| Variable | Description | Default Value |
| -------------------------------------------- | ------------------------------------------------- | ------------------ |
| `FLOWX_INDEXING_ENABLED` | Enable/disable indexing globally | `true` |
| `FLOWX_INDEXING_TYPE` | Indexing strategy (kafka, http, no-indexing) | `kafka` |
| `FLOWX_ELASTICSEARCH_INDEXSETTINGS_NAME` | Name of the Elasticsearch index | `process_instance` |
| `FLOWX_ELASTICSEARCH_INDEXSETTINGS_SHARDS` | Number of primary shards | `2` |
| `FLOWX_ELASTICSEARCH_INDEXSETTINGS_REPLICAS` | Number of replica shards | `0` |
| `FLOWX_INDEXING_OPTIMISTICLOCKINGRETRIES` | Retry attempts for optimistic locking (HTTP only) | `3` |
### Configuring file upload size
| Environment variable | Description | Default value |
| ----------------------------------------- | ---------------------------------------- | ------------- |
| `SPRING_SERVLET_MULTIPART_MAXFILESIZE` | Maximum file size allowed for uploads | `50MB` |
| `SPRING_SERVLET_MULTIPART_MAXREQUESTSIZE` | Maximum request size allowed for uploads | `50MB` |
#### Connecting the Advancing controller
To use the advancing controller, configure the following variables:
| Environment variable | Description | Default value |
| -------------------------------------- | ---------------------------------------- | -------------------------------------------- |
| `ADVANCING_DATASOURCE_JDBC_URL` | Connection URL for Advancing Postgres DB | `jdbc:postgresql://localhost:5432/advancing` |
| `ADVANCING_DATASOURCE_USERNAME` | Username for Advancing DB connection | `postgres` |
| `ADVANCING_DATASOURCE_PASSWORD` | Password for Advancing DB connection | `-` |
| `ADVANCING_DATASOURCE_MAXIMUMPOOLSIZE` | Maximum database connection pool size | `20` |
#### Configuring the Advancing controller
| Environment variable | Description | Default value |
| ---------------------------------------------- | -------------------------------------------------------------------------------- | ---------------------------------------------- |
| `ADVANCING_TYPE` | Type of advancing mechanism | `PARALLEL` (alternatives: `KAFKA`, `PARALLEL`) |
| `ADVANCING_PICKINGTHREADS` | Number of worker threads for reading from database (picking operations) | `1` |
| `ADVANCING_PROCESSINGTHREADS` | Number of threads for parallel processing of advancing events | `20` |
| `ADVANCING_PROCESSINGBUFFERSIZE` | Maximum buffer size for processing queue. Controls how many events can be queued | `20` |
| `ADVANCING_BLOCKPICKINGIFNOWORKERAVAILABLE` | Block picking operations when no worker threads are available | `true` |
| `ADVANCING_PICKINGPAUSEMILLIS` | Pause duration between picking batches (ms) | `50` |
| `ADVANCING_COOLDOWNAFTERSECONDS` | Cooldown period after processing a batch (seconds) | `120` |
| `ADVANCING_SCHEDULER_HEARTBEAT_CRONEXPRESSION` | Cron expression for the heartbeat | `"*/2 * * * * ?"` |
**How the new advancing controller works:**
* **Picking threads** (`ADVANCING_PICKINGTHREADS`): Controls how many worker threads read events from the database. This handles only the picking/reading operations.
* **Processing buffer** (`ADVANCING_PROCESSINGBUFFERSIZE`): Acts as a queue between picking and processing. When the buffer is full, no new events are read. When there's available space (even just 1 position), that amount of events will be read.
* **Processing threads** (`ADVANCING_PROCESSINGTHREADS`): Controls how many threads process the advancing events in parallel. Events are processed instantly if processing threads are available. If all processing threads are busy, events accumulate in the buffer until it reaches capacity.
* **Blocking behavior** (`ADVANCING_BLOCKPICKINGIFNOWORKERAVAILABLE`): When enabled, prevents picking operations if no worker threads are available, ensuring better resource management.
### CAS lib configuration
| Environment Variable | Description | Default Value |
| --------------------- | ---------------------------- | --------------- |
| `FLOWX_SPICEDB_HOST` | SpiceDB server hostname | `spicedb` |
| `FLOWX_SPICEDB_PORT` | SpiceDB server port | `50051` |
| `FLOWX_SPICEDB_TOKEN` | SpiceDB authentication token | `spicedb-token` |
### Configuring cleanup mechanism
| Environment variable | Description | Default value |
| ----------------------------------------- | ------------------------------------------------- | ---------------------------------------------------------- |
| `SCHEDULER_THREADS` | Number of threads for the scheduler | `10` |
| `SCHEDULER_PROCESSCLEANUP_ENABLED` | Activates the cron job for process cleanup | `false` |
| `SCHEDULER_PROCESSCLEANUP_CRONEXPRESSION` | Cron expression for the process cleanup scheduler | `0 */5 0-5 * * ?` (every 5 minutes between 12 AM and 5 AM) |
| `SCHEDULER_PROCESSCLEANUP_BATCHSIZE` | Number of processes to clean up in one batch | `1000` |
| `SCHEDULER_MASTERELECTION_CRONEXPRESSION` | Cron expression for the master election process | `30 */3 * * * ?` (every 3 minutes) |
| | | |
### Managing subprocesses expiration
| Environment variable | Description | Default value |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------- |
| `FLOWX_PROCESS_EXPIRESUBPROCESSES` | When true, terminates all subprocesses upon parent process expiration. When false, subprocesses follow their individual expiration settings | `true` |
### Configuring application management
The following configuration from versions before 4.1 will be deprecated in version 5.0:
* `MANAGEMENT_METRICS_EXPORT_PROMETHEUS_ENABLED`: Enables or disables Prometheus metrics export.
Starting from version 4.1, use the following configuration instead. This setup is backwards compatible until version 5.0.
| Environment variable | Description | Default value |
| ---------------------------------------------- | --------------------------------- | ------------- |
| `MANAGEMENT_PROMETHEUS_METRICS_EXPORT_ENABLED` | Enables Prometheus metrics export | `false` |
## RBAC configuration
Process Engine requires specific RBAC permissions for proper access to Kubernetes resources:
```yaml theme={"system"}
rbac:
create: true
rules:
- apiGroups:
- ""
resources:
- secrets
- configmaps
- pods
verbs:
- get
- list
- watch
```
# Partitioning & archiving
Source: https://docs.flowx.ai/5.1/setup-guides/flowx-engine-setup-guide/process-instance-data-archiving
Improving data management using data partitioning and the archival processes.
## Overview
Starting with release v4.1.1 you can enable data partitioning on FlowX.AI Engine.
Partitioning and archiving are data management strategies used to handle large volumes of data efficiently. They improve database performance, manageability, and storage optimization. By dividing data into partitions and archiving older or less frequently accessed data, organizations can ensure better data management, quicker query responses, and optimized storage use.
## Partitioning
Partitioning is the process of dividing a large database table into smaller, more manageable pieces, called partitions. Each partition can be managed and queried independently. The primary goal is to improve performance, enhance manageability, and simplify maintenance tasks such as backups and archiving.
Partitions can be created per day, week or month. This means that a partition ID is computed at insert time for each row of process\_instance and related tables.
Afterwards, a retention period can be setup (eg: 3 partitions). A flowx engine-driven cron job (with configurable start interval) will check if there is any partition which needs to be archived and will perform the necessary actions.
### Benefits of partitioning
* **Improved Query Performance**: By scanning only relevant partitions instead of the entire table.
* **Simplified Maintenance**: Easier to perform maintenance tasks like backups and index maintenance.
* **Data Management**: Better data organization and management by dividing data based on specific criteria such as date, range, or list.
Database Compatibility: Oracle Database and PostgreSQL.
## Archiving
Archiving involves moving old data from the primary tables to separate archive tables. This helps in reducing the load on the primary tables, thus improving performance and manageability.
### Benefits of archiving
* **Storage Optimization**: Archived data can be compressed, saving storage space.
* **Performance Improvement**: Reduces the volume of data in primary tables, leading to faster query responses.
* **Historical Data Management**: Maintains historical data in a separate, manageable form.
## Partitioning and archiving in Oracle Database
### Oracle Database partitioning
Oracle Database [**partitioned tables**](https://docs.oracle.com/en/database/oracle/oracle-database/18/vldbg/partition-concepts.html#GUID-6D369646-16AF-487B-BF32-5F6569D27C8A) are utilized, allowing for efficient data management and query performance.
Each partition can be managed and queried independently.
Example: The `process_instance` table can be partitioned by day, week, or month.
Improved query performance by scanning only relevant partitions.
Simplified maintenance tasks like backups and archiving.
### Oracle Database archiving
Detaching the partition from the main table.
Converting the detached partition into a new table named `archived_${table_name}_${interval_name}_${reference}` for example: `archived_process_instance_monthly_2024_03` .
The DATE is in the format `yyyy-MM-dd` if the interval is `DAY`, or in the format `yyyy-MM` if the interval is `MONTH`, or in the format `yyyy-weekOfYear` if the interval is `WEEK`.
Identify partitions eligible for archiving based on retention settings.
Detach the partition from the main table.
Create a new table with the data from the detached partition.
Optionally compress the new table to save space.
Manages historical data by moving it to separate tables, reducing the load on the main table.
Compression options (OFF, BASIC, ADVANCED) further optimize storage.
Oracle offers several compression options—OFF, BASIC, and ADVANCED—that optimize storage. Each option provides varying levels of data compression, impacting storage savings and performance differently.
* **OFF**: No compression is applied.
* **BASIC**: Suitable for read-only or read-mostly environments, it compresses data without requiring additional licenses.
* **ADVANCED**: Offers the highest level of compression, supporting a wide range of data types and operations. It requires an Advanced Compression license and provides significant storage savings and performance improvements by keeping data compressed in memory.
For more details, you can refer to Oracle's [**Advanced Compression documentation**](https://www.oracle.com/database/advanced-compression/#rc30related).
## PostgreSQL archiving
Creating a new table for the partition being archived.
Moving data from the main table to the new archive table (in batches).
Since here the DB has more work to do than just changing some labels (actual data insert and delete vs relabel a partition into a table, for Oracle Database) the data move is batched and the batch size is configurable.
Identify partitions eligible for archiving based on retention settings.
Create a new table following this naming convention: `archived__${table_name}__${interval_name}_${reference}`, example: *archived\_\_process\_instance\_\_weekly\_2024\_09* .
The new table is created (same name format as for Oracle Database: `archived__${table_name}__${interval_name}_${reference}`) and data is moved from the primary table here.
Configure the batch size for data movement to control the load on the database.
Efficiently manages historical data.
Batch processing allows for better control over the archiving process and system performance.
Differences from Oracle DBs:
Archiving involves actual data movement (insert and delete operations), unlike Oracle Databases where it is mainly a relabeling of partitions.
The batch size for data movement is configurable, allowing fine-tuning of the archiving process.
## Daily operations
Once set up, the partitioning and archiving process involves the following operations:
The `partition_id` is automatically calculated based on the configured interval (DAY, WEEK, MONTH).
Example for daily partitioning: `2024-03-01 13:00:00` results in `partition_id = 124061`. See the [**Partition ID calculation**](#partition-id-calculation) section.
Data older than the configured retention interval becomes eligible for archiving and compressing.
A cron job checks for eligible partitions.
Eligible partitions are archived and optionally compressed.
The process includes deactivating foreign keys, creating new archive tables, moving data references, reactivating foreign keys, and dropping the original partition.
Archived tables remain in the database but occupy less space if compression is enabled.
**Recommendation**: to free up space, consider moving archived tables to a different database or tablespace. Additionally, you have the option to move only process instances or copy definitions depending on your needs.
When enabling partitioning, please consider the following:
**Ensure Process Termination**: Make sure that process instances get terminated. Archiving removes process instance data from the working data, making it not available in FlowX. Started instances should be finished before archiving takes place.
**Set Process Expiry**: To ensure termination of process instances prior to archiving, it is recommended to configure process expiration. Refer to the following section for guidance on setting up process expiry using FlowX Designer:
[Timer Expressions](../../docs/building-blocks/node/timer-events/timer-expressions)
Future schema updates or migrations will not affect archived tables. They retain the schema from the moment of archiving.
## Configuring partitioning and archiving
The Partitioning and Archiving feature is optional and can be configured as needed.
When starting a new version of the process-engine, we recommend manually executing the setup SQL commands from Liquibase, as they may take more time. After setup, all existing information will go into the initial partition.
This section contains environment variables that control the settings for data partitioning and archiving and also for the archiving scheduler. These settings determine how data is partitioned, retained, and managed, including compression and batch processing.
| Environment Variable | Description | Default Value | Possible Values |
| -------------------------------------------------------- | ---------------------------------------------------------------------------- | ------------------------------------ | ------------------------------------- |
| `FLOWX_DATA_PARTITIONING_ENABLED` | Activates data partitioning. | `false` | `true`, `false` |
| `FLOWX_DATA_PARTITIONING_INTERVAL` | Interval for partitioning (the time interval contained in a partition). | `MONTH` | `DAY`, `WEEK`, `MONTH` |
| `FLOWX_DATA_PARTITIONING_RETENTION_INTERVALS` | Number of intervals retained in the FlowX database (for partitioned tables). | `3` | Integer values (e.g., `1`, `2`, `3`) |
| `FLOWX_DATA_PARTITIONING_DETACHED_PARTITION_COMPRESSION` | Enables compression for archived (detached) partitions (Oracle only). | `OFF` | `OFF`, `BASIC`, `ADVANCED` |
| `FLOWX_DATA_PARTITIONING_MOVED_DATA_BATCH_SIZE` | Batch size for moving data (PostgreSQL only). | `5000` | Integer values (e.g., `1000`, `5000`) |
| `SCHEDULER_DATA_PARTITIONING_ENABLED` | Activates the cron job for archiving partitions. | `true` | `true`, `false` |
| `SCHEDULER_DATA_PARTITIONING_CRON_EXPRESSION` | Cron expression for the data partitioning scheduler. | `0 0 1 * * ?` -> every day at 1:00AM | Cron expression (e.g., `0 0 1 * * ?`) |
Compression for archived (detached) partitions is available only for Oracle DBs.
The batch size setting for archiving data is available only for PostgreSQL DBs.
## Logging information
Partitioning and archiving actions are logged in two tables:
* `DATA_PARTITIONING_LOG`: For tracking archived partitions.

* `DATA_PARTITIONING_LOG_ENTRY`: For logging SQL commands executed for archiving.

## Enabling partitioning and Elasticsearch indexing strategy
When partitioning is enabled, the Elasticsearch indexing strategy must also be enabled and configured on FlowX Engine setup.
**Why?**
* When archiving process instances, data from Elasticsearch must be deleted, not just the cache but also indexed keys (e.g., those indexed for data search on process instances).
### Elasticsearch indexing configuration
Check the Elasticsearch indexing setup here:
The partitioning configuration must be aligned with the configuration extracted from the Kafka Elasticsearch Connector, especially with the following environment variables, so the intervals are similar:
### Index partitioning
* `transforms.routeTS.topic.format: "process_instance-${timestamp}"`: This value must start with the index name defined in the process-engine config: flowx.indexing.processInstance.index-name. In this example, the index name is prefixed with "process\_instance-" and appended with a timestamp for dynamic index creation. For backward compatibility, the prefix must be "process\_instance-". However, backward compatibility is not strictly required here.
yaml
* `transforms.routeTS.timestamp.format: "yyyyMMdd"`: This format ensures that timestamps are consistently represented and easily parsed when creating or searching for indices based on the process instance start date. You can adjust this value as needed (e.g., for monthly indexes, use "yyyyMM"). However, note that changing this format will cause existing indexed objects to remain unchanged, and update messages will be treated as new objects, indexed again in new indices. It is crucial to determine your index size and maintain consistency.
Check the following Kafka Elasticsearch Connector configuration example for more details:
## Technical details
### Partition ID calculation
* The `partition_id` format follows this structure: ``. This ID is calculated based on the start date of the `process_instance`, the partition interval, and the partition level.
* `LEVEL`: This represents the "Partitioning level," which increments with each change in the partitioning interval (for example, if it changes from `DAY` to `MONTH` or vice versa).
* `YEAR`: The year extracted from the `process_instance` date.
* `BIN_ID_OF_YEAR`: This is the ID of a bucket associated with the `YEAR`. It is created for all instances within the selected partitioning interval. The maximum number of buckets is determined by the partitioning frequency:
* **Daily**: Up to 366 buckets per year
* **Weekly**: Up to 53 buckets per year
* **Monthly**: Up to 12 buckets per year
#### Calculation example
For a timestamp of `2024-03-01 13:00:00` with a daily partitioning interval, the `partition_id`would be `124061`:
* `1`: Partitioning Level (`LEVEL`)
* `24`: Year - 2024 (`YEAR`)
* `061`: Bucket per configuration (61st day of the year)
### Archived tables
* Naming format: `archived__${table_name}__${interval_name}_${reference}`. Examples:
* archived\_\_process\_instance\_\_monthly\_2024\_03
* archived\_\_process\_instance\_\_weekly\_2024\_09
* archived\_\_process\_instance\_\_daily\_2024\_03\_06
# Integration Designer setup
Source: https://docs.flowx.ai/5.1/setup-guides/integration-designer-setup
This guide explains how to configure the Integration Designer service using environment variables.
## Configuration
### Core service configuration
| Environment variable | Description | Default value |
| -------------------- | ------------------------- | ------------- |
| `LOGGING_LEVEL_APP` | Application logging level | `INFO` |
### Storage configuration
S3 storage for files in Integration Designer.
| Variable | Default Value | Description |
| ---------------------------------------------- | ------------------- | ------------------------ |
| `APPLICATION_FILESTORAGE_TYPE` | `s3` | 🆕 Storage type |
| `APPLICATION_FILESTORAGE_PARTITIONSTRATEGY` | `NONE` | 🆕 Partition strategy |
| `APPLICATION_FILESTORAGE_DELETIONSTRATEGY` | `delete` | 🆕 Deletion strategy |
| `APPLICATION_FILESTORAGE_S3_ENABLED` | `true` | 🆕 S3 enabled |
| `APPLICATION_FILESTORAGE_S3_SERVERURL` | `http://minio:9000` | 🆕 S3 server URL |
| `APPLICATION_FILESTORAGE_S3_ENCRYPTIONENABLED` | `false` | 🆕 S3 encryption enabled |
| `APPLICATION_FILESTORAGE_S3_ACCESSKEY` | `minio` | 🆕 S3 access key |
| `APPLICATION_FILESTORAGE_S3_SECRETKEY` | `minio123` | 🆕 S3 secret key |
| `APPLICATION_FILESTORAGE_S3_BUCKETPREFIX` | `workflows-bucket` | 🆕 S3 bucket prefix |
#### Redis
Added caching when running a workflow.
| Variable | Default Value | Description |
| ------------------------------- | ---------------------------------------- | --------------------- |
| `SPRING_CACHE_TYPE` | `redis` | 🆕 Cache type |
| `SPRING_CACHE_REDIS_KEYPREFIX` | `flowx:core:cache:integration-designer:` | 🆕 Cache key prefix |
| `SPRING_CACHE_REDIS_TIMETOLIVE` | `5000000` | 🆕 Cache time to live |
| `SPRING_REDIS_HOST` | `redis-master` | 🆕 Redis host |
| `SPRING_REDIS_PORT` | `6379` | 🆕 Redis port |
| `SPRING_REDIS_PASSWORD` | `defaultpassword` | 🆕 Redis password |
| `SPRING_REDIS_TTL` | `5000000` | 🆕 Redis time to live |
| `SPRING_DATA_REDIS_HOST` | `spring.redis.host` | 🆕 Redis host |
### WebClient configuration
Integration Designer interacts with various APIs, some of which return large responses. To handle such cases efficiently, the FlowX WebClient buffer size must be configured to accommodate larger payloads, especially when working with legacy APIs that do not support pagination.
| Environment variable | Description | Default value |
| ---------------------------- | ------------------------------------------ | --------------- |
| `FLOWX_WEBCLIENT_BUFFERSIZE` | Buffer size (in bytes) for FlowX WebClient | `1048576` (1MB) |
If you encounter **truncated API responses** or **unexpected errors when fetching large payloads**, consider **increasing the buffer size** to at least **10MB** by setting `FLOWX_WEBCLIENT_BUFFERSIZE=10485760`. This ensures smooth handling of large API responses, particularly for legacy APIs without pagination support.
### Database configuration
#### Advancing database
The [Advancing Controller](../docs/platform-deep-dive/core-components/advancing-controller) is a support service that optimizes advancing operations by ensuring efficient, balanced workload distribution—especially during scale-up and scale-down events. To enable Integration Designer to interact with the Advancing database, configure the following environment variables:
It can connect to the same database as the FlowX.AI Engine.
| Environment variable | Description | Default value |
| ---------------------------------------- | ----------------- | --------------------------------------------- |
| `ADVANCING_DATASOURCE_URL` | Database JDBC URL | `jdbc:postgresql://postgresql:5432/advancing` |
| `ADVANCING_DATASOURCE_USERNAME` | Database username | `flowx` |
| `ADVANCING_DATASOURCE_PASSWORD` | Database password | `securePassword` |
| `ADVANCING_DATASOURCE_DRIVER_CLASS_NAME` | JDBC driver class | `org.postgresql.Driver` |
#### Configuring the Advancing controller
| Environment variable | Description | Default value |
| ---------------------------------------------- | -------------------------------------------------------------------------------- | ----------------- |
| `ADVANCING_PICKINGTHREADS` | Number of worker threads for reading from database (picking operations) | `1` |
| `ADVANCING_PROCESSINGTHREADS` | Number of threads for parallel processing of advancing events | `20` |
| `ADVANCING_PROCESSINGBUFFERSIZE` | Maximum buffer size for processing queue. Controls how many events can be queued | `20` |
| `ADVANCING_BLOCKPICKINGIFNOWORKERAVAILABLE` | Block picking operations when no worker threads are available | `true` |
| `ADVANCING_PICKINGPAUSEMILLIS` | Pause duration between picking batches (ms) | `50` |
| `ADVANCING_COOLDOWNAFTERSECONDS` | Cooldown period after processing a batch (seconds) | `120` |
| `ADVANCING_SCHEDULER_HEARTBEAT_CRONEXPRESSION` | Cron expression for the heartbeat | `"*/2 * * * * ?"` |
**How the new advancing controller works:**
* **Picking threads** (`ADVANCING_PICKINGTHREADS`): Controls how many worker threads read events from the database. This handles only the picking/reading operations.
* **Processing buffer** (`ADVANCING_PROCESSINGBUFFERSIZE`): Acts as a queue between picking and processing. When the buffer is full, no new events are read. When there's available space (even just 1 position), that amount of events will be read.
* **Processing threads** (`ADVANCING_PROCESSINGTHREADS`): Controls how many threads process the advancing events in parallel. Events are processed instantly if processing threads are available. If all processing threads are busy, events accumulate in the buffer until it reaches capacity.
The Advancing Controller supports multiple database systems including PostgreSQL and Oracle. Ensure you configure the appropriate JDBC URL and driver class for your chosen database system.
#### MongoDB
Integration Designer requires two MongoDB databases for managing integration-specific data and runtime data:
* **Integration Designer Database** (`integration-designer`): Stores data specific to Integration Designer, such as integration configurations, metadata, and other operational data.
* **Shared Runtime Database** (`app-runtime`): Shared across multiple services, this database manages runtime data essential for integration and data flow execution.
| Environment variable | Description | Default value |
| --------------------------------- | -------------------------------------- | ------------------------------------------------------------------------ |
| `SPRING_DATA_MONGODB_URI` | Integration Designer MongoDB URI | `mongodb://mongodb-0.mongodb-headless:27017/integration-designer` |
| `MONGODB_USERNAME` | MongoDB username | `integration-designer` |
| `MONGODB_PASSWORD` | MongoDB password | `secureMongoPass` |
| `SPRING_DATA_MONGODB_STORAGE` | Storage type (Azure environments only) | `mongodb` (or `cosmosdb`) |
| `SPRING_DATA_MONGODB_RUNTIME_URI` | Runtime MongoDB URI | `mongodb://mongodb-0.mongodb-headless:27017/${MONGODB_RUNTIME_DATABASE}` |
| `MONGODB_RUNTIME_DATABASE` | Runtime MongoDB database | `app-runtime` |
| `MONGODB_RUNTIME_USERNAME` | Runtime MongoDB username | `app-runtime` |
| `MONGODB_RUNTIME_PASSWORD` | Runtime MongoDB password | `secureRuntimePass` |
Integration Designer requires a runtime connection to function correctly. Starting the service without a configured and active runtime MongoDB connection is not supported.
### Configuration parameters
There are two types of Config Params that can be read from the environment: **variables** and **secrets**. There is one provider for variables and secrets extracted from the environment variables, and two providers for the ones extracted from Kubernetes. By default, the variables and secrets are extracted from environment variables (`env` provider).
#### Configuration parameters from environment variables (default)
The `env` provider used for variables and secrets extracts them from environment variables. For security reasons, the `env` provider uses an allow list regex which defaults to `FLOWX_CONFIGPARAM_.*`. This means only environment variables that match this naming pattern can be read at runtime into configuration params (either as variables or secrets). Feel free to edit it to match the environment variables that you use in your deployment.
| Environment variable | Description | Default value |
| ------------------------------------------- | --------------------------------------------------------------- | ---------------------- |
| `FLOWX_CONFIGPARAMS_VARS_PROVIDER` | Provider type for variables | `env` |
| `FLOWX_CONFIGPARAMS_VARS_ALLOWLISTREGEX` | Regular expression to match allowed env variables for variables | `FLOWX_CONFIGPARAM_.*` |
| `FLOWX_CONFIGPARAMS_SECRETS_PROVIDER` | Provider type for secrets | `env` |
| `FLOWX_CONFIGPARAMS_SECRETS_ALLOWLISTREGEX` | Regular expression to match allowed env variables for secrets | `FLOWX_CONFIGPARAM_.*` |
#### Configuration parameters from Kubernetes Secrets and ConfigMaps
Use the following configuration to read Config Params from Kubernetes Secrets and ConfigMaps:
| Environment variable | Description | Values |
| ------------------------------------- | --------------------------- | ---------------- |
| `FLOWX_CONFIGPARAMS_VARS_PROVIDER` | Provider type for variables | `k8s-configmaps` |
| `FLOWX_CONFIGPARAMS_SECRETS_PROVIDER` | Provider type for secrets | `k8s-secrets` |
These providers can be configured as follows:
| Environment variable | Description | Values |
| -------------------------------------------------------------- | ------------------------------------------ | -------------------- |
| `FLOWX_CONFIGPARAMS_PROVIDERS_K8SCONFIGMAPS_CONFIGMAPSLIST_0_` | Name of the ConfigMap to use for variables | `flowx-configparams` |
| `FLOWX_CONFIGPARAMS_PROVIDERS_K8SSECRETS_SECRETSLIST_0_` | Name of the Secret to use for secrets | `flowx-configparams` |
You can configure multiple secrets and ConfigMaps by incrementing the index number (e.g., `FLOWX_CONFIGPARAMS_PROVIDERS_K8SSECRETS_SECRETSLIST_1`, `FLOWX_CONFIGPARAMS_PROVIDERS_K8SCONFIGMAPS_CONFIGMAPSLIST_1`). Values are overridden based on the order in which the maps are defined.
The default provider is `env`, but there is a built-in allowlist with the regex pattern `FLOWX_CONFIGPARAM_.*`. This means only configuration parameters that match this naming pattern can be read at runtime, whether they are environment variables or secret variables.
### Kafka configuration
#### Kafka connection and security variables
| Environment variable | Description | Default value |
| -------------------------------- | ---------------------- | ------------------------------- |
| `SPRING_KAFKA_BOOTSTRAPSERVERS` | Kafka broker addresses | `localhost:9092` |
| `SPRING_KAFKA_SECURITY_PROTOCOL` | Security protocol | `PLAINTEXT` or `SASL_PLAINTEXT` |
| `FLOWX_WORKFLOW_CREATETOPICS` | Auto-create topics | `false` (default) |
#### Message size configuration
| Environment variable | Description | Default value |
| ------------------------- | -------------------- | ----------------- |
| `KAFKA_MESSAGE_MAX_BYTES` | Maximum message size | `52428800` (50MB) |
This setting affects:
* Producer message max bytes
* Producer max request size
#### Consumer configuration
| Environment variable | Description | Default value |
| ----------------------------------------------- | ------------------------------------------ | ------------------------------------------------------ |
| `KAFKA_CONSUMER_GROUPID_STARTWORKFLOWS` | Start workflows consumer group | `start-workflows-group` |
| `KAFKA_CONSUMER_GROUPID_RESELEMUSAGEVALIDATION` | Resource usage validation consumer group | `integration-designer-res-elem-usage-validation-group` |
| `KAFKA_CONSUMER_THREADS_STARTWORKFLOWS` | Start workflows consumer threads | `3` |
| `KAFKA_CONSUMER_THREADS_RESELEMUSAGEVALIDATION` | Resource usage validation consumer threads | `3` |
| `KAFKA_AUTHEXCEPTIONRETRYINTERVAL` | Retry interval after authorization errors | `10` (seconds) |
#### Topic naming convention and pattern creation
The Integration Designer uses a structured topic naming convention that follows a standardized pattern, ensuring consistency across environments and making topics easily identifiable.
##### Topic naming components
| Environment variable | Description | Default value |
| ---------------------------------------------- | --------------------------- | ---------------------- |
| `KAFKA_TOPIC_NAMING_PACKAGE` | Base package for topics | `ai.flowx.` |
| `KAFKA_TOPIC_NAMING_ENVIRONMENT` | Environment identifier | ` ` |
| `KAFKA_TOPIC_NAMING_VERSION` | Topic version | `.v1` |
| `KAFKA_TOPIC_NAMING_SEPARATOR` | Topic name separator | `.` |
| `KAFKA_TOPIC_NAMING_SEPARATOR2` | Alternative separator | `-` |
| `KAFKA_TOPIC_NAMING_ENGINERECEIVEPATTERN` | Engine receive pattern | `engine.receive.` |
| `KAFKA_TOPIC_NAMING_INTEGRATIONRECEIVEPATTERN` | Integration receive pattern | `integration.receive.` |
Topics are constructed using the following pattern:
```
{prefix} + service + {separator/dot} + action + {separator/dot} + detail + {suffix}
```
For example, a typical topic might look like:
```
ai.flowx.dev.eventsgateway.receive.workflowinstances.v1
```
Where:
* `ai.flowx.dev.` is the prefix (package + environment)
* `eventsgateway` is the service
* `receive` is the action
* `workflowinstances` is the detail
* `.v1` is the suffix (version)
#### Kafka topic configuration
##### Core topics
| Environment variable | Description | Default Pattern |
| ----------------------- | ---------------------------- | ----------------------------------------- |
| `KAFKA_TOPIC_AUDIT_OUT` | Topic for sending audit logs | `ai.flowx.dev.core.trigger.save.audit.v1` |
##### Events gateway topics
| Environment variable | Description | Default Pattern |
| --------------------------------------- | ------------------------------------------ | --------------------------------------------------------- |
| `KAFKA_TOPIC_EVENTSGATEWAY_OUT_MESSAGE` | Topic for workflow instances communication | `ai.flowx.dev.eventsgateway.receive.workflowinstances.v1` |
##### Engine and Integration communication topics
| Environment variable | Description | Default Pattern |
| -------------------------------- | ------------------------------------- | ------------------------------------ |
| `KAFKA_TOPIC_ENGINEPATTERN` | Pattern for Engine communication | `ai.flowx.dev.engine.receive.` |
| `KAFKA_TOPIC_INTEGRATIONPATTERN` | Pattern for Integration communication | `ai.flowx.dev.integration.receive.*` |
##### Application resource usage topics
| Environment variable | Description | Default Pattern |
| --------------------------------------------------- | -------------------------------------------- | --------------------------------------------------------------------------------------------- |
| `KAFKA_TOPIC_APPLICATION_IN_RESELEMUSAGEVALIDATION` | Topic for resource usage validation requests | `ai.flowx.dev.application-version.resources-usages.sub-res-validation.request-integration.v1` |
| `KAFKA_TOPIC_RESOURCESUSAGES_REFRESH` | Topic for resource usage refresh commands | `ai.flowx.dev.application-version.resources-usages.refresh.v1` |
#### OAuth authentication variables (when using SASL\_PLAINTEXT)
| Environment variable | Description | Example value |
| -------------------------------- | -------------------- | ---------------------- |
| `KAFKA_OAUTH_CLIENT_ID` | OAuth client ID | `kafka` |
| `KAFKA_OAUTH_CLIENT_SECRET` | OAuth client secret | `kafka-secret` |
| `KAFKA_OAUTH_TOKEN_ENDPOINT_URI` | OAuth token endpoint | `kafka.auth.localhost` |
#### Inter-Service topic coordination
When configuring Kafka topics in the FlowX ecosystem, ensure proper coordination between services:
1. **Topic name matching**: Output topics from one service must match the expected input topics of another service.
2. **Pattern consistency**: The pattern values must be consistent across services:
* Process Engine listens to topics matching: `ai.flowx.dev.engine.receive.*`
* Integration Designer listens to topics matching: `ai.flowx.dev.integration.receive.*`
3. **Communication flow**:
* Other services write to topics matching the Engine's pattern → Process Engine listens
* Process Engine writes to topics matching the Integration Designer's pattern → Integration Designer listens
The exact pattern value isn't critical, but it must be identical across all connected services. Some deployments require manually creating Kafka topics in advance rather than dynamically. In these cases, all topic names must be explicitly defined and coordinated.
### Kafka topics best practices
#### Large message handling for workflow instances topic
The workflow instances topic requires special configuration to handle large messages. By default, Kafka has message size limitations that may prevent Integration Designer from processing large workflow payloads.
**Recommended `max.message.bytes` value**: `10485760` (10 MB)
#### Method: update using AKHQ (recommended)
1. **Access AKHQ**
* Open the AKHQ web interface
* Log in if authentication is required
2. **Navigate to Topic**
* Go to the "Topics" section
* Find the topic: `ai.flowx.dev.eventsgateway.receive.workflowinstances.v1`
3. **Edit Configuration**
* Click on the topic name
* Go to the "Configuration" tab
* Locate or add `max.message.bytes`
* Set the value to `10485760`
* Save changes
### CAS lib configuration
CAS lib is used to communicate with the authorization-service through SpiceDB.
| Environment variable | Description | Default value |
| --------------------- | ---------------- | ------------- |
| `FLOWX_SPICEDB_HOST` | Spicedb host | `spicedb` |
| `FLOWX_SPICEDB_PORT` | Spicedb port | `50051` |
| `FLOWX_SPICEDB_TOKEN` | Spicedb db token | `REPLACEME` |
### Configuring authentication and access roles
Integration Designer uses OAuth2 for secure access control. Set up OAuth2 configurations with these environment variables:
| Environment variable | Description | Default value |
| ----------------------------------------------------- | ---------------------------------------------------- | ----------------------------------- |
| `SECURITY_OAUTH2_BASE_SERVER_URL` | Base URL for OAuth2 authorization server | `https://keycloak.example.com/auth` |
| `SECURITY_OAUTH2_REALM` | Realm for OAuth2 authentication | `flowx` |
| `SECURITY_OAUTH2_CLIENT_CLIENT_ID` | Client ID for Integration Designer OAuth2 client | `integration-designer` |
| `SECURITY_OAUTH2_CLIENT_CLIENT_SECRET` | Client Secret for Integration Designer OAuth2 client | `client-secret` |
| `SECURITY_OAUTH2_SERVICE_ACCOUNT_ADMIN_CLIENT_ID` | Client ID for admin service account | `admin-client` |
| `SECURITY_OAUTH2_SERVICE_ACCOUNT_ADMIN_CLIENT_SECRET` | Client Secret for admin service account | `admin-secret` |
For detailed instructions on configuring user roles and access rights, refer to:
For configuring a service account, refer to:
### Configuring logging
To control the log levels for Integration Designer, set the following environment variables:
| Environment variable | Description | Default value |
| -------------------- | ---------------------------- | ------------- |
| `LOGGING_LEVEL_ROOT` | Root Spring Boot logs level | `INFO` |
| `LOGGING_LEVEL_APP` | Application-level logs level | `INFO` |
### Configuring admin ingress
Integration Designer provides an admin ingress route, which can be enabled and customized with additional annotations for SSL certificates or routing preferences.
```yaml theme={"system"}
ingress:
enabled: true
admin:
enabled: true
hostname: "{{ .Values.flowx.ingress.admin }}"
path: /integration(/|$)(.*)
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/cors-allow-headers: DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization,platform,Flowx-Platform,Fx-Workspace-Id
```
### Monitoring and maintenance
To monitor the performance and health of the Integration Designer, use tools like Prometheus or Grafana. Configure Prometheus metrics with:
| Environment variable | Description | Default value |
| ---------------------------------------------- | -------------------------------- | ------------- |
| `MANAGEMENT_PROMETHEUS_METRICS_EXPORT_ENABLED` | Enable Prometheus metrics export | `false` |
### RBAC configuration
Integration Designer requires specific RBAC (Role-Based Access Control) permissions to access Kubernetes ConfigMaps and Secrets, which store necessary configurations and credentials. Set up these permissions by enabling RBAC and defining the required rules:
```yaml theme={"system"}
rbac:
create: true
rules:
- apiGroups:
- ""
resources:
- secrets
- configmaps
- pods
verbs:
- get
- list
- watch
```
This configuration grants read access (`get`, `list`, `watch`) to ConfigMaps, Secrets, and Pods, which is essential for retrieving application settings and credentials required by Integration Designer.
## Additional resources
* [Integration Designer Documentation](../docs/platform-deep-dive/integrations/integration-designer)
# Kafka Authentication profile
Source: https://docs.flowx.ai/5.1/setup-guides/kafka-authentication-config
Enable secure Kafka communication across Java microservices using Spring configuration profiles
The FlowX.AI platform supports enabling **Kafka authentication** across all Java microservices using a dedicated **Spring configuration profile**. This feature simplifies the activation of secure Kafka communication by centralizing the configuration in one place.
Currently, **kafka-auth is the only supported profile** provided by the platform for Kafka authentication.
## Understanding SPRING\_PROFILES\_ACTIVE
`SPRING_PROFILES_ACTIVE` is an environment variable used by Spring Boot to determine which configuration profiles should be active at runtime.
### Key characteristics
* **Multiple profiles**: Can contain one or more profile names, separated by commas
* Example: `SPRING_PROFILES_ACTIVE=dev,kafka-auth`
* **Environment-specific behavior**: Profiles allow different sets of configuration to be loaded depending on the environment or required feature set
* **Special kafka-auth profile**: Activates Kafka authentication across services
If `SPRING_PROFILES_ACTIVE` is not set, the application runs with the **default profile**, which does **not** include Kafka authentication.
## Configuration details
When the `kafka-auth` profile is enabled, the following **Spring Kafka properties** are automatically applied:
```yaml theme={"system"}
spring.config.activate.on-profile: kafka-auth
spring:
kafka:
security.protocol: "SASL_PLAINTEXT"
properties:
sasl:
mechanism: "OAUTHBEARER"
jaas.config: >
org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required
oauth.client.id="${KAFKA_OAUTH_CLIENT_ID:kafka}"
oauth.client.secret="${KAFKA_OAUTH_CLIENT_SECRET:kafka-secret}"
oauth.token.endpoint.uri="${KAFKA_OAUTH_TOKEN_ENDPOINT_URI:kafka.auth.localhost}" ;
login.callback.handler.class: io.strimzi.kafka.oauth.client.JaasClientOauthLoginCallbackHandler
```
### Configuration properties explained
| Property | Purpose | Value |
| ----------------------------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------------- |
| `spring.kafka.security.protocol` | Defines Kafka communication protocol | `SASL_PLAINTEXT` |
| `spring.kafka.properties.sasl.mechanism` | Authentication mechanism used for SASL | `OAUTHBEARER` |
| `spring.kafka.properties.sasl.jaas.config` | JAAS login configuration referencing environment variables | See configuration |
| `spring.kafka.properties.sasl.login.callback.handler.class` | Callback handler for OAuth authentication | `io.strimzi.kafka.oauth.client.JaasClientOauthLoginCallbackHandler` |
## Required environment variables
The Kafka authentication profile uses environment variables to configure OAuth parameters dynamically. These variables should be set in the runtime environment for each microservice.
| Environment Variable | Default Value | Description |
| -------------------------------- | ---------------------- | -------------------------------------------------------------- |
| `KAFKA_OAUTH_CLIENT_ID` | `kafka` | OAuth client ID used to authenticate with the token endpoint |
| `KAFKA_OAUTH_CLIENT_SECRET` | `kafka-secret` | Secret associated with the OAuth client ID |
| `KAFKA_OAUTH_TOKEN_ENDPOINT_URI` | `kafka.auth.localhost` | OAuth token endpoint URI from which access tokens are obtained |
These variables should be set in the runtime environment. If they are not provided, the defaults listed above will be used.
## Benefits
Enabling the Kafka authentication profile provides several advantages:
* **Centralized enablement**: Activates OAuth-based Kafka authentication consistently across services.
* **Configurable via environment variables**: No hardcoding of sensitive data in app configuration.
* **Simple activation**: Controlled entirely by the `SPRING_PROFILES_ACTIVE` variable.
## Notes and limitations
* Only the kafka-auth profile is currently supported for Kafka authentication.
* The profile enforces **SASL/OAUTHBEARER with plaintext transport**. Secure networking (for example, VPN, mTLS) should be ensured where required.
# NoSQL DB Runner
Source: https://docs.flowx.ai/5.1/setup-guides/nosql-db-runner
The NoSQL DB Runner is a backend microservice that powers FlowX Database functionality. It provides MongoDB and Azure Cosmos DB operations support for FlowX Database collections and handles data persistence operations across FlowX processes. This guide provides detailed instructions for setting up the service and configuring its components through environment variables.
## Configuration
The service comes with most of the needed configuration properties filled in, but there are several environment variables that need to be set up for your specific deployment.
### Database configuration
The NoSQL DB Runner connects to MongoDB for data persistence. Configure the following variables:
| Environment Variable | Description | Default Value |
| ------------------------- | --------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `DB_USERNAME` | MongoDB username for the service | `nosql-db-runner` |
| `DB_PASSWORD` | MongoDB password (should be stored as secret) | `secret(mongodb-generic-devenv)` |
| `SPRING_DATA_MONGODB_URI` | Complete MongoDB connection string | `mongodb://${DB_USERNAME}:${DB_PASSWORD}@nosql-db-runner-mongodb-0.nosql-db-runner-mongodb-headless,nosql-db-runner-mongodb-1.nosql-db-runner-mongodb-headless,nosql-db-runner-mongodb-arbiter-0.nosql-db-runner-mongodb-arbiter-headless:27017/nosql-db-runner?retryWrites=false` |
The MongoDB URI supports replica set configuration for high availability. The connection string includes multiple MongoDB instances and an arbiter for proper replica set functionality.
### Configuring authorization & access roles
Connect the NoSQL DB Runner to an OAuth 2.0 identity management platform:
| Environment Variable | Description | Default Value |
| -------------------------------------- | ------------------------------------------------------- | --------------------------------------- |
| `SECURITY_OAUTH2_BASE_SERVER_URL` | Base URL for the OAuth 2.0 Authorization Server | `https://auth.devmain.flowxai.dev/auth` |
| `SECURITY_OAUTH2_CLIENT_CLIENT_ID` | Unique identifier for the client application | `paperflow-service` |
| `SECURITY_OAUTH2_CLIENT_CLIENT_SECRET` | Secret key for client authentication (stored as secret) | `secret(keycloak-generic)` |
| `SECURITY_OAUTH2_REALM` | OAuth 2.0 realm name | `paperflow` |
### FlowX operations document limit
This setting allows you to configure the maximum number of documents that can be retrieved from MongoDB in a single request.
| Environment Variable | Description | Default Value |
| ----------------------------------- | ----------------------------------------------------------------- | ------------- |
| `FLOWX_RUNOPERATIONS_DOCUMENTLIMIT` | Maximum number of documents to be processed in a single operation | `50` |
### Configuring logging
Control log levels for different components of the service:
| Environment Variable | Description | Default Value |
| ---------------------- | --------------------------------------------- | -------------------- |
| `LOGGING_CONFIG_FILE` | Path to the logging configuration file | `logback-spring.xml` |
| `LOGGING_LEVEL_ROOT` | Root logger level for the Spring Boot service | `DEBUG` |
| `LOGGING_LEVEL_APP` | Application-specific log level | `DEBUG` |
| `LOGGING_LEVEL_SOCKET` | Socket communication log level | `DEBUG` |
Using DEBUG log levels in production environments may impact performance and generate large log volumes. Consider using INFO or WARN levels for production deployments.
### Configuring application management
Configure management endpoints and monitoring capabilities:
| Environment Variable | Description | Default Value |
| ---------------------------------------------------- | ---------------------------------- | --------------------------- |
| `MANAGEMENT_SERVER_PORT` | Port for management endpoints | `8081` |
| `MANAGEMENT_ENDPOINT_HEALTH_GROUP_LIVENESS_INCLUDE` | Health checks for liveness probes | `ping,accessInfo,buildInfo` |
| `MANAGEMENT_ENDPOINT_HEALTH_GROUP_READINESS_INCLUDE` | Health checks for readiness probes | `ping,accessInfo,buildInfo` |
| `MANAGEMENT_HEALTH_KUBERNETES_ENABLED` | Enable Kubernetes health checks | `false` |
### Prometheus metrics configuration
Enable Prometheus metrics export for monitoring:
| Environment Variable | Description | Default Value |
| ---------------------------------------------- | -------------------------------- | ------------- |
| `MANAGEMENT_METRICS_EXPORT_PROMETHEUS_ENABLED` | Enable Prometheus metrics export | `true` |
## Troubleshooting
### Common issues
**Problem**: Service fails to connect to MongoDB
**Solutions**:
* Verify MongoDB connection string format and credentials
* Ensure MongoDB replica set is properly configured and accessible
* Check network connectivity between service and MongoDB instances
* Verify MongoDB user permissions and database access rights
**Problem**: Authentication failures with OAuth provider
**Solutions**:
* Verify OAuth client ID and client secret are correct
* Check OAuth server URL and realm configuration
* Ensure OAuth provider is accessible from the service
* Validate token endpoint URI configuration
# Notifications plugin setup
Source: https://docs.flowx.ai/5.1/setup-guides/notifications-plugin-setup
The Notifications plugin is available as a docker image, and it has the following dependencies.
## Dependencies
Before setting up the plugin, ensure you have the following dependencies:
* A [MongoDB](https://www.mongodb.com/2) database for storing notification templates and records
* Access to the Kafka instance used by the FlowX.AI Engine
* A [Redis](https://redis.io/) instance for caching notification templates
* An S3-compatible file storage solution (e.g., [Min.io](https://min.io/)) if you need to attach documents to notifications
## Authorization configuration
Set these variables to connect to your identity management platform:
| Environment Variable | Description | Default Value |
| ------------------------------------- | --------------------------------------------- | ------------- |
| `SECURITY_OAUTH2_BASESERVERURL` | Base URL of the OAuth2/OIDC server | - |
| `SECURITY_OAUTH2_CLIENT_CLIENTID` | OAuth2 client ID for the Notifications Plugin | - |
| `SECURITY_OAUTH2_CLIENT_CLIENTSECRET` | OAuth2 client secret | - |
| `SECURITY_OAUTH2_REALM` | OAuth2 realm name | - |
## MongoDB configuration
The only thing that needs to be configured is the DB access info, the rest will be handled by the plugin.
| Environment Variable | Description | Default Value |
| ------------------------- | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `SPRING_DATA_MONGODB_URI` | MongoDB connection URI | `mongodb://${DB_USERNAME}:${DB_PASSWORD}@mongodb-0.mongodb-headless,mongodb-1.mongodb-headless,mongodb-arbiter-0.mongodb-arbiter-headless:27017/notification-plugin` |
| `DB_USERNAME` | Username for runtime MongoDB connection | `notification-plugin` |
| `DB_PASSWORD` | Password for runtime MongoDB connection | `password` |
## Redis configuration
Configure your Redis caching instance:
| Environment Variable | Description | Default Value |
| ----------------------- | ------------------------------------------- | ----------------- |
| `SPRING_REDIS_HOST` | Redis server hostname | `localhost` |
| `SPRING_REDIS_PORT` | Redis server port | `6379` |
| `SPRING_REDIS_PASSWORD` | Redis server password | `defaultpassword` |
| `REDIS_TTL` | Time-to-live for Redis cache (milliseconds) | `5000000` |
## Kafka configuration
### Core Kafka settings
| Environment Variable | Description | Default Value |
| ---------------------------------- | ------------------------------------------------------- | ------------------ |
| `SPRING_KAFKA_BOOTSTRAPSERVERS` | Address of the Kafka server(s) | `localhost:9092` |
| `SPRING_KAFKA_SECURITYPROTOCOL` | Security protocol for Kafka connections | `PLAINTEXT` |
| `SPRING_KAFKA_CONSUMERGROUPID` | Consumer group identifier | `notif123-preview` |
| `KAFKA_MESSAGEMAXBYTES` | Maximum message size (bytes) | `52428800` (50MB) |
| `KAFKA_AUTHEXCEPTIONRETRYINTERVAL` | Retry interval after authorization exceptions (seconds) | `10` |
| `KAFKA_CONSUMER_THREADS` | Number of consumer threads | `1` |
### Topic naming configuration
| Environment Variable | Description | Default Value |
| -------------------------------- | ----------------------------------- | ------------- |
| `KAFKA_TOPIC_NAMING_SEPARATOR` | Primary separator for topic names | `.` |
| `KAFKA_TOPIC_NAMING_SEPARATOR2` | Secondary separator for topic names | `-` |
| `KAFKA_TOPIC_NAMING_PACKAGE` | Package prefix for topic names | `ai.flowx.` |
| `KAFKA_TOPIC_NAMING_ENVIRONMENT` | Environment segment for topic names | ` ` |
| `KAFKA_TOPIC_NAMING_VERSION` | Version suffix for topic names | `.v1` |
### Topic configurations
Each action in the service corresponds to a Kafka event on a specific topic. Configure the following topics:
#### OTP topics
| Environment Variable | Description | Default Value |
| ------------------------------ | ------------------------------------------ | ------------------------------------------------------------------------- |
| `KAFKA_TOPIC_OTP_GENERATE_IN` | Topic for incoming OTP generation requests | `ai.flowx.dev.plugin.notification.trigger.generate.otp.v1` |
| `KAFKA_TOPIC_OTP_GENERATE_OUT` | Topic for OTP generation results | `ai.flowx.dev.engine.receive.plugin.notification.generate.otp.results.v1` |
| `KAFKA_TOPIC_OTP_VALIDATE_IN` | Topic for incoming OTP validation requests | `ai.flowx.dev.plugin.notification.trigger.validate.otp.v1` |
| `KAFKA_TOPIC_OTP_VALIDATE_OUT` | Topic for OTP validation results | `ai.flowx.dev.engine.receive.plugin.notification.validate.otp.results.v1` |
#### Notification topics
| Environment Variable | Description | Default Value |
| --------------------------------------- | ------------------------------------------------------ | ------------------------------------------------------------------------------ |
| `KAFKA_TOPIC_NOTIFICATION_INTERNAL_IN` | Topic for incoming notification requests | `ai.flowx.dev.plugin.notification.trigger.send.notification.v1` |
| `KAFKA_TOPIC_NOTIFICATION_INTERNAL_OUT` | Topic for notification delivery confirmations | `ai.flowx.dev.engine.receive.plugin.notification.confirm.send.notification.v1` |
| `KAFKA_TOPIC_NOTIFICATION_EXTERNAL_OUT` | Topic for forwarding notifications to external systems | `ai.flowx.dev.plugin.notification.trigger.forward.notification.v1` |
#### Audit topic
| Environment Variable | Description | Default Value |
| ----------------------- | ---------------------------- | ----------------------------------------- |
| `KAFKA_TOPIC_AUDIT_OUT` | Topic for sending audit logs | `ai.flowx.dev.core.trigger.save.audit.v1` |
## File storage configuration
Based on use case you can use directly a file system or an S3 compatible cloud storage solution (for example [min.io](http://min.io/)).
The file storage solution can be configured using the following environment variables:
| Environment Variable | Description | Default Value |
| ---------------------------------------------- | ------------------------------------------------ | ----------------------------- |
| `APPLICATION_FILESTORAGE_TYPE` | Storage type to use (`s3` or `fileSystem`) | `s3` |
| `APPLICATION_FILESTORAGE_DISKDIRECTORY` | Directory for file storage when using filesystem | `MS_SVC_NOTIFICATION` |
| `APPLICATION_FILESTORAGE_S3_ENABLED` | Enable S3-compatible storage | `true` |
| `APPLICATION_FILESTORAGE_S3_SERVERURL` | URL of S3-compatible server | `http://minio-service:9000` |
| `APPLICATION_FILESTORAGE_S3_ENCRYPTIONENABLED` | Enable server-side encryption | `false` |
| `APPLICATION_FILESTORAGE_S3_ACCESSKEY` | Access key for S3 | `minio` |
| `APPLICATION_FILESTORAGE_S3_SECRETKEY` | Secret key for S3 | `secret` |
| `APPLICATION_FILESTORAGE_S3_BUCKETPREFIX` | Prefix for bucket names | `qdevlocal-preview-paperflow` |
When using S3-compatible storage for notifications with attachments, the S3 user configured through `APPLICATION_FILESTORAGE_S3_ACCESSKEY` and `APPLICATION_FILESTORAGE_S3_SECRETKEY` must have read access to multiple buckets beyond its own:
Required bucket access:
* **Own bucket** - defined by `APPLICATION_FILESTORAGE_S3_BUCKETPREFIX`
* [**Documents Plugin bucket**](./documents-plugin-setup#general-storage-configuration) - defined in the Documents Plugin configuration via `APPLICATION_FILESTORAGE_S3_BUCKETPREFIX`
* [**CMS Core public bucket**](./cms-setup#configuring-file-storage) - defined in the CMS Core configuration via `APPLICATION_FILESTORAGE_S3_BUCKETNAME`
* [**Integration Designer bucket**](./integration-designer-setup#storage-configuration) - defined in the Integration Designer configuration via `APPLICATION_FILESTORAGE_S3_BUCKETPREFIX`
Ensure your S3 user has appropriate read permissions to all relevant buckets to avoid attachment failures.
## SMTP setup
Configure SMTP settings for sending email notifications:
| Environment Variable | Description | Default Value |
| ---------------------------------- | ----------------------------------------------------------- | ---------------------------- |
| `SIMPLEJAVAMAIL_SMTP_HOST` | SMTP server hostname | `smtp.gmail.com` |
| `SIMPLEJAVAMAIL_SMTP_PORT` | SMTP server port | `587` |
| `SIMPLEJAVAMAIL_SMTP_USERNAME` | SMTP server username | `notification.test@flowx.ai` |
| `SIMPLEJAVAMAIL_SMTP_PASSWORD` | SMTP server password | `paswword` |
| `SIMPLEJAVAMAIL_TRANSPORTSTRATEGY` | Email transport strategy (e.g., `SMTP`, `EXTERNAL_FORWARD`) | `SMTP` |
| `APPLICATION_MAIL_FROM_EMAIL` | Default sender email address | `notification.test@flowx.ai` |
| `APPLICATION_MAIL_FROM_NAME` | Default sender name | `Notification Test` |
## Email attachments configuration
Configure handling of email attachments:
| Environment Variable | Description | Default Value |
| -------------------------------------- | ------------------------------------------ | ------------- |
| `SPRING_HTTP_MULTIPART_MAXFILESIZE` | Maximum file size for attachments | `15MB` |
| `SPRING_HTTP_MULTIPART_MAXREQUESTSIZE` | Maximum request size for multipart uploads | `15MB` |
## OTP configuration
Configure One-Time Password generation and validation:
| Environment Variable | Description | Default Value |
| ------------------------------- | -------------------------------------- | ------------------- |
| `FLOWX_OTP_LENGTH` | Number of characters in generated OTPs | `4` |
| `FLOWX_OTP_EXPIRETIMEINSECONDS` | Expiry time for OTPs (seconds) | `6000` (10 minutes) |
## Logging configuration
Control logging levels for different components:
| Environment Variable | Description | Default Value |
| ---------------------------- | ----------------------------------------- | ------------- |
| `LOGGING_LEVEL_ROOT` | Root logging level | - |
| `LOGGING_LEVEL_APP` | Application-specific log level | `DEBUG` |
| `LOGGING_LEVEL_MONGO_DRIVER` | MongoDB driver log level | `INFO` |
| `LOGGING_LEVEL_THYMELEAF` | Thymeleaf template engine log level | `INFO` |
| `LOGGING_LEVEL_FCM_CLIENT` | Firebase Cloud Messaging client log level | `OFF` |
| `LOGGING_LEVEL_REDIS` | Redis/Lettuce client log level | `OFF` |
## CAS lib configuration
| Environment Variable | Description | Default Value |
| --------------------- | ---------------------------- | --------------- |
| `FLOWX_SPICEDB_HOST` | SpiceDB server hostname | `spicedb` |
| `FLOWX_SPICEDB_PORT` | SpiceDB server port | `50051` |
| `FLOWX_SPICEDB_TOKEN` | SpiceDB authentication token | `spicedb-token` |
## Usage notes
### Topic naming convention
Topics follow a standardized naming convention:
* Example: `ai.flowx.dev.plugin.notification.trigger.generate.otp.v1`
* Structure: `{package}.{environment}.{component}.{action}.{subject}.{version}`
### Consumer error handling
When `KAFKA_CONSUMER_ERRORHANDLING_ENABLED` is set to `true`:
* The application will retry processing failed messages according to `KAFKA_CONSUMER_ERRORHANDLING_RETRIES`
* Between retries, the application will wait for the duration specified by `KAFKA_CONSUMER_ERRORHANDLING_RETRYINTERVAL`
For example, if `KAFKA_CONSUMER_ERRORHANDLING_RETRYINTERVAL` is set to 5000 (5 seconds) and `KAFKA_CONSUMER_ERROR_HANDLING_RETRIES` is set to 5, the consumer application will make up to 5 attempts, waiting 5 seconds between each attempt.
### Message size configuration
The `KAFKA_MESSAGE_MAX_BYTES` setting affects multiple Kafka properties:
* `spring.kafka.producer.properties.message.max.bytes`
* `spring.kafka.producer.properties.max.request.size`
* `spring.kafka.consumer.properties.max.partition.fetch.bytes`
### OAuth authentication
When using the 'kafka-auth' profile, the security protocol changes to 'SASL\_PLAINTEXT' and requires OAuth configuration via the `KAFKA_OAUTH_*` variables.
# Deployment configuration for OpenTelemetry
Source: https://docs.flowx.ai/5.1/setup-guides/open-telemetry-config
Guide to deploying OpenTelemetry components and configuring associated services.
### Step 1: Install OpenTelemetry Operator
Ensure you have the OpenTelemetry Operator version **0.56.1** or higher:
```yaml theme={"system"}
- repoURL: https://open-telemetry.github.io/opentelemetry-helm-charts
chart: opentelemetry-operator
targetRevision: 0.56.1
```
#### Configuration:
```yaml theme={"system"}
# Source: https://github.com/open-telemetry/opentelemetry-helm-charts/blob/opentelemetry-operator-0.56.1/charts/opentelemetry-operator/values.yaml
## Provide OpenTelemetry Operator manager container image and resources.
manager:
image:
repository: ghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator
tag: ""
collectorImage:
repository: "otel/opentelemetry-collector-contrib"
tag: 0.98.0
opampBridgeImage:
repository: ""
tag: ""
targetAllocatorImage:
repository: ""
tag: ""
autoInstrumentationImage:
java:
repository: ""
tag: ""
nodejs:
repository: ""
tag: ""
python:
repository: ""
tag: ""
dotnet:
repository: ""
tag: ""
# The Go instrumentation support in the operator is disabled by default.
# To enable it, use the operator.autoinstrumentation.go feature gate.
go:
repository: ""
tag: ""
# Feature Gates are a comma-delimited list of feature gate identifiers.
# Prefix a gate with '-' to disable support.
# Prefixing a gate with '+' or no prefix will enable support.
# A full list of valid identifiers can be found here: https://github.com/open-telemetry/opentelemetry-operator/blob/main/pkg/featuregate/featuregate.go
featureGates: ""
ports:
metricsPort: 8080
webhookPort: 9443
healthzPort: 8081
resources:
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 100m
memory: 64Mi
## Adds additional environment variables
## e.g ENV_VAR: env_value
env:
ENABLE_WEBHOOKS: "true"
## Admission webhooks make sure only requests with correctly formatted rules will get into the Operator.
## They also enable the sidecar injection for OpenTelemetryCollector and Instrumentation CR's
admissionWebhooks:
create: true
servicePort: 443
failurePolicy: Fail
```
Ensure you use the appropriate distribution and version:
```yaml theme={"system"}
repository: "otel/opentelemetry-collector-contrib"
tag: 0.98.0
```
### Step 2: Deploy OpenTelemetry Resources
Apply the OpenTelemetry resources:
#### OpenTelemetry Collector
```yaml theme={"system"}
apiVersion: opentelemetry.io/v1alpha1
kind: OpenTelemetryCollector
metadata:
name: otel
namespace: {{ .Release.Namespace }}
spec:
mode: deployment
resources:
limits:
cpu: "2"
memory: 6Gi
requests:
cpu: 200m
memory: 2Gi
config: |
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
# Since this collector needs to receive data from the web, enable cors for all origins
# `allowed_origins` can be refined for your deployment domain
endpoint: 0.0.0.0:4318
cors:
allowed_origins:
- "http://*"
- "https://*"
zipkin:
exporters:
debug: {}
## Create an exporter to Jaeger using the standard `otlp` export format
otlp/tempo:
endpoint: 'otel-tempo:4317'
tls:
insecure: true
# Create an exporter to Prometheus (metrics)
otlphttp/prometheus:
endpoint: 'http://otel-prometheus-server:9090/api/v1/otlp'
tls:
insecure: true
loki:
endpoint: "http://otel-loki:3100/loki/api/v1/push"
default_labels_enabled:
exporter: true
job: true
extensions:
health_check:
memory_ballast: {}
processors:
batch: {}
k8sattributes:
extract:
metadata:
- k8s.namespace.name
- k8s.deployment.name
- k8s.statefulset.name
- k8s.daemonset.name
- k8s.cronjob.name
- k8s.job.name
- k8s.node.name
- k8s.pod.name
- k8s.pod.uid
- k8s.pod.start_time
passthrough: false
pod_association:
- sources:
- from: resource_attribute
name: k8s.pod.ip
- sources:
- from: resource_attribute
name: k8s.pod.uid
- sources:
- from: connection
resource:
attributes:
- key: service.instance.id
from_attribute: k8s.pod.uid
action: insert
memory_limiter:
check_interval: 5s
limit_percentage: 80
spike_limit_percentage: 25
connectors:
spanmetrics: {}
service:
extensions:
- health_check
- memory_ballast
pipelines:
traces:
processors: [memory_limiter, resource, batch]
exporters: [otlp/tempo, debug, spanmetrics]
receivers: [otlp]
metrics:
receivers: [otlp, spanmetrics]
processors: [memory_limiter, resource, batch]
exporters: [otlphttp/prometheus, debug]
logs:
processors: [memory_limiter, resource, batch]
exporters: [loki, debug]
receivers: [otlp]
```
#### OpenTelemetry Instrumentation
```yaml theme={"system"}
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
name: flowx-otel-instrumentation
namespace: {{ .Release.Namespace }}
spec:
exporter:
endpoint: http://otel-collector:4317
propagators:
- tracecontext
- baggage
sampler:
type: parentbased_traceidratio
argument: "1"
java:
image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:2.1.0
env:
- name: OTEL_INSTRUMENTATION_LOGBACKAPPENDER_ENABLED
value: "true"
- name: OTEL_LOGS_EXPORTER
value: otlp
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://otelcol-operator-collector:4317
- name: OTEL_EXPORTER_OTLP_PROTOCOL
value: grpc
```
### Step 3: Instrument Flowx Services
Update Flowx services to enable Java instrumentation by adding the following pod annotation:
```yaml theme={"system"}
podAnnotations:
instrumentation.opentelemetry.io/inject-java: "true"
```
### Step 4: Configure Grafana, Prometheus and Tempo
#### Configure Grafana
```yaml theme={"system"}
##Source: https://github.com/grafana/helm-charts/blob/grafana-7.3.10/charts/grafana/values.yaml
rbac:
create: true
namespaced: true
serviceAccount:
create: true
replicas: 1
ingress:
enabled: true
ingressClassName: nginx
path: /
hosts:
- {{ .Values.flowx.ingress.grafana }}
## Enable persistence using Persistent Volume Claims
## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
##
persistence:
enabled: true
accessModes:
- ReadWriteOnce
size: 5Gi
finalizers: []
datasources:
datasources.yaml:
apiVersion: 1
datasources:
- name: Loki
uid: loki
type: loki
access: proxy
url: http://otel-loki:3100
timeout: 300
version: 1
jsonData:
derivedFields:
- datasourceUid: tempo
# matches variations of "traceID" fields, either in JSON or logfmt
# marian-fx: matcherRegex: '"traceid":"(\w+)"'
matcherRegex: (?:[Tt]race[-_]?[Ii][Dd])[\\]?["]?[=:][ ]?[\\]?["]?(\w+)
name: traceid
# url will be interpreted as query for the datasource
url: "$${__value.raw}"
urlDisplayLabel: See traces
- name: Prometheus
uid: prometheus
type: prometheus
url: 'http://otel-prometheus-server:9090'
editable: true
isDefault: true
jsonData:
exemplarTraceIdDestinations:
- datasourceUid: tempo
name: traceid
- name: Tempo
uid: tempo
type: tempo
access: proxy
url: http://otel-tempo:3100
version: 1
jsonData:
tracesToLogs:
datasourceUid: loki
lokiSearch:
datasourceUid: loki
nodeGraph:
enabled: true
serviceMap:
datasourceUid: prometheus
tracesToLogsV2:
customQuery: false
datasourceUid: loki
filterBySpanID: true
filterByTraceID: true
spanEndTimeShift: 1s
spanStartTimeShift: '-1s'
tags:
- key: service.name
value: job
dashboardProviders:
dashboardproviders.yaml:
apiVersion: 1
providers:
- name: 'default'
orgId: 1
folder: ''
type: file
disableDeletion: false
editable: true
options:
path: /var/lib/grafana/dashboards/default
resources:
limits:
memory: 150Mi
grafana.ini:
auth:
disable_login_form: true
auth.anonymous:
enabled: false
org_name: Main Org.
org_role: Admin
auth.generic_oauth:
enabled: true
name: Keycloak-OAuth
allow_sign_up: true
client_id: private-management-sa
client_secret: xTs4yGYySrHaNDIpCiniHJUGqBKbyCtp
scopes: openid email profile offline_access roles
email_attribute_path: email
login_attribute_path: username
name_attribute_path: full_name
auth_url: https://{{ .Values.flowx.keycloak.host }}/auth/realms/{{ .Values.flowx.keycloak.realm }}/protocol/openid-connect/auth
token_url: https://{{ .Values.flowx.keycloak.host }}/auth/realms/{{ .Values.flowx.keycloak.realm }}/protocol/openid-connect/token
api_url: https://{{ .Values.flowx.keycloak.host }}/auth/realms/{{ .Values.flowx.keycloak.realm }}/protocol/openid-connect/userinfo
# role_attribute_path: contains(roles[*], 'admin') && 'Admin' || contains(roles[*], 'editor') && 'Editor' || 'Viewer'
server:
root_url: "https://{{ .Values.flowx.ingress.grafana }}/grafana"
serve_from_sub_path: true
adminPassword: admin
# assertNoLeakedSecrets is a helper function defined in _helpers.tpl that checks if secret
# values are not exposed in the rendered grafana.ini configmap. It is enabled by default.
#
# To pass values into grafana.ini without exposing them in a configmap, use variable expansion:
# https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#variable-expansion
#
# Alternatively, if you wish to allow secret values to be exposed in the rendered grafana.ini configmap,
# you can disable this check by setting assertNoLeakedSecrets to false.
assertNoLeakedSecrets: false
```
#### Configure Prometheus
```yaml theme={"system"}
# https://github.com/prometheus-community/helm-charts/blob/prometheus-22.6.7/charts/prometheus/values.yaml
rbac:
create: true
podSecurityPolicy:
enabled: false
## Define serviceAccount names for components. Defaults to component's fully qualified name.
##
serviceAccounts:
server:
create: true
alertmanager:
enabled: false
alertmanagerFiles:
alertmanager.yml:
global: {}
# slack_api_url: ''
receivers:
- name: default-receiver
# slack_configs:
# - channel: '@you'
# send_resolved: true
route:
group_wait: 10s
group_interval: 5m
receiver: default-receiver
repeat_interval: 3h
configmapReload:
prometheus:
enabled: false
kube-state-metrics:
enabled: false
prometheus-node-exporter:
enabled: false
prometheus-pushgateway:
enabled: false
server:
useExistingClusterRoleName: prometheus-server
## If set it will override prometheus.server.fullname value for ClusterRole and ClusterRoleBinding
##
clusterRoleNameOverride: ""
# Enable only the release namespace for monitoring. By default all namespaces are monitored.
# If releaseNamespace and namespaces are both set a merged list will be monitored.
releaseNamespace: false
## namespaces to monitor (instead of monitoring all - clusterwide). Needed if you want to run without Cluster-admin privileges.
# namespaces:
# - namespace
extraFlags:
- "web.enable-lifecycle"
- "enable-feature=exemplar-storage"
- "enable-feature=otlp-write-receiver"
global:
scrape_interval: 5s
scrape_timeout: 3s
evaluation_interval: 30s
persistentVolume:
enabled: true
mountPath: /data
## Prometheus server data Persistent Volume size
##
size: 10Gi
service:
servicePort: 9090
## Prometheus server resource requests and limits
## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
##
resources:
limits:
cpu: 2000m
memory: 4096Mi
requests:
cpu: 500m
memory: 2048Mi
## Prometheus data retention period (default if not specified is 15 days)
##
retention: "3d"
## Prometheus' data retention size. Supported units: B, KB, MB, GB, TB, PB, EB.
##
retentionSize: ""
serverFiles:
prometheus.yml:
scrape_configs:
- job_name: prometheus
static_configs:
- targets:
- localhost:9090
- job_name: 'otel-collector'
honor_labels: true
kubernetes_sd_configs:
- role: pod
namespaces:
own_namespace: true
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_opentelemetry_community_demo]
action: keep
regex: true
```
#### Configure Loki with a Minio backend
```yaml theme={"system"}
# https://raw.githubusercontent.com/grafana/loki/helm-loki-6.2.0/production/helm/loki/single-binary-values.yaml
loki:
auth_enabled: false # https://grafana.com/docs/loki/latest/operations/multi-tenancy/#multi-tenancy
commonConfig:
replication_factor: 1
schemaConfig:
configs:
- from: 2024-04-01
store: tsdb
object_store: s3
schema: v13
index:
prefix: loki_index_
period: 24h
ingester:
chunk_encoding: snappy
tracing:
enabled: true
querier:
# Default is 4, if you have enough memory and CPU you can increase, reduce if OOMing
max_concurrent: 2
deploymentMode: SingleBinary
singleBinary:
replicas: 1
resources:
limits:
cpu: 3
memory: 4Gi
requests:
cpu: 1
memory: 2Gi
extraEnv:
# Keep a little bit lower than memory limits
- name: GOMEMLIMIT
value: 3750MiB
chunksCache:
# default is 500MB, with limited memory keep this smaller
writebackSizeLimit: 10MB
# Enable minio for storage
minio:
enabled: true
rootUser: enterprise-logs
rootPassword: supersecret
buckets:
- name: chunks
policy: none
purge: false
- name: ruler
policy: none
purge: false
- name: admin
policy: none
purge: false
persistence:
size: 10Gi
lokiCanary:
enabled: false
# Zero out replica counts of other deployment modes
backend:
replicas: 0
read:
replicas: 0
write:
replicas: 0
ingester:
replicas: 0
querier:
replicas: 0
queryFrontend:
replicas: 0
queryScheduler:
replicas: 0
distributor:
replicas: 0
compactor:
replicas: 0
indexGateway:
replicas: 0
bloomCompactor:
replicas: 0
bloomGateway:
replicas: 0
```
#### Configure Tempo
```yaml theme={"system"}
# https://github.com/grafana/helm-charts/blob/tempo-1.7.2/charts/tempo/values.yaml
tempo:
# configure a 3 days retention by default
retention: 72h
# enable opentelemetry protocol & jaeger receivers
# this configuration will listen on all ports and protocols that tempo is capable of.
# the receives all come from the OpenTelemetry collector. more configuration information can
# be found there: https://github.com/open-telemetry/opentelemetry-collector/tree/master/receiver
receivers:
jaeger:
protocols:
grpc:
endpoint: 0.0.0.0:14250
thrift_binary:
endpoint: 0.0.0.0:6832
thrift_compact:
endpoint: 0.0.0.0:6831
thrift_http:
endpoint: 0.0.0.0:14268
otlp:
protocols:
grpc:
endpoint: "0.0.0.0:4317"
http:
endpoint: "0.0.0.0:4318"
persistence:
enabled: true
size: 10Gi
# -- Pod Annotations
podAnnotations:
prometheus.io/port: prom-metrics
prometheus.io/scrape: "true"
```
# Open Telemetry default properties
Source: https://docs.flowx.ai/5.1/setup-guides/ot-default-properties
* `otel.resource.attributes=service.name=flowx-process-engine,service.version=1.1.1`: Environment variable.
Will be overridden as environment variable by Kubernetes operator. Useful for local development.
### Java agent configuration
* `otel.javaagent.enabled=true`
* `otel.javaagent.logging=simple`
* `otel.javaagent.debug=false`
### Disable OTEL SDK
* `otel.sdk.disabled=false`
## Exporters configuration (common config for all exporters)
* `otel.traces.exporter=otlp`
* `otel.metrics.exporter=otlp`
* `otel.logs.exporter=otlp`
### OTLP exporter
* `otel.exporter.otlp.endpoint=http://localhost:4317`
Endpoint will be overridden by Kubernetes operator. Useful for local development.
* `otel.exporter.otlp.protocol=grpc`
* `otel.exporter.otlp.timeout=10000`
* `otel.exporter.otlp.compression=gzip`
* `otel.exporter.otlp.metrics.temporality.preference=cumulative`
* `otel.exporter.otlp.metrics.default.histogram.aggregation=explicit_bucket_histogram`
### Tracer provider
`SdkTracerProvider` specific configuration options.
* Sampler: [**here**](https://github.com/open-telemetry/opentelemetry-java/blob/main/sdk-extensions/autoconfigure/README.md#sampler)
* The default sampler is: `parentbased_always_on`
* To disable FlowX technical spans, add sampler: `fxTechnicalSpanFilterSampler`
* `otel.traces.sampler=parentbased_always_on`
### Batch span processor
* `otel.bsp.schedule.delay=5000`
* `otel.bsp.max.queue.size=2048`
* `otel.bsp.max.export.batch.size=512`
* `otel.bsp.export.timeout=30000`
### Meter provider
The following configuration options are specific to `SdkMeterProvider`.
* `otel.metric.export.interval=60000`
* `otel.metric.export.timeout=10000`
### Logger provider
The following configuration options are specific to `SdkLoggerProvider`.
* `otel.blrp.schedule.delay=1000`
* `otel.blrp.max.queue.size=2048`
* `otel.blrp.max.export.batch.size=512`
* `otel.blrp.export.timeout=30000`
## Agent auto-instrumentation
* `otel.instrumentation.messaging.experimental.receive-telemetry.enabled=false`
* `otel.instrumentation.common.experimental.controller-telemetry.enabled=true`
* `otel.instrumentation.common.experimental.view-telemetry.enabled=true`
* `otel.instrumentation.common.default-enabled=false`
Disable all auto instrumentation and enable only what's necessary. This has to be commented out entirely to work as default.
### Disable annotated methods
* `otel.instrumentation.opentelemetry-instrumentation-annotations.exclude-methods=my.package.MyClass1[method1,method2];my.package.MyClass2[method3]`
### Instrumentation config per library
Some instrumentation relies on other instrumentation to function properly. When selectively enabling instrumentation, be sure to enable the transitive dependencies too.
* `otel.instrumentation.opentelemetry-api.enabled=true`
* `otel.instrumentation.opentelemetry-instrumentation-annotations.enabled=true`
* `otel.instrumentation.opentelemetry-extension-annotations.enabled=false`
* `otel.instrumentation.methods.enabled=true`
* `otel.instrumentation.external-annotations.enabled=true`
* `otel.instrumentation.kafka.enabled=true`
* `otel.instrumentation.tomcat.enabled=true`
* `otel.instrumentation.elasticsearch-transport.enabled=true`
* `otel.instrumentation.elasticsearch-rest.enabled=true`
* `otel.instrumentation.grpc.enabled=true`
* `otel.instrumentation.hibernate.enabled=false`
Hibernate and JDBC kind of duplicate the queries traces
* `otel.instrumentation.hikaricp.enabled=false`
* `otel.instrumentation.java-http-client.enabled=true`
* `otel.instrumentation.http-url-connection.enabled=true`
* `otel.instrumentation.jdbc.enabled=false`
* `otel.instrumentation.jdbc-datasource.enabled=false`
* `otel.instrumentation.runtime-telemetry.enabled=true`
* `otel.instrumentation.servlet.enabled=true`
* `otel.instrumentation.executors.enabled=true`
* `otel.instrumentation.java-util-logging.enabled=true`
* `otel.instrumentation.log4j-appender.enabled=true`
* `otel.instrumentation.log4j-mdc.enabled=true`
* `otel.instrumentation.log4j-context-data.enabled=true`
* `otel.instrumentation.logback-appender.enabled=true`
* `otel.instrumentation.logback-mdc.enabled=true`
* `otel.instrumentation.mongo.enabled=true`
* `otel.instrumentation.rxjava.enabled=false`
* `otel.instrumentation.reactor.enabled=false`
### Redis client imported by spring-redis-data
* `otel.instrumentation.lettuce.enabled=true`
## Spring instrumentation props
* `otel.instrumentation.spring-batch.enabled=false`
* `otel.instrumentation.spring-core.enabled=true`
* `otel.instrumentation.spring-data.enabled=true`
* `otel.instrumentation.spring-jms.enabled=false`
* `otel.instrumentation.spring-integration.enabled=false`
* `otel.instrumentation.spring-kafka.enabled=true`
* `otel.instrumentation.spring-rabbit.enabled=false`
* `otel.instrumentation.spring-rmi.enabled=false`
* `otel.instrumentation.spring-scheduling.enabled=false`
* `otel.instrumentation.spring-web.enabled=true`
* `otel.instrumentation.spring-webflux.enabled=false`
* `otel.instrumentation.spring-webmvc.enabled=true`
* `otel.instrumentation.spring-ws.enabled=false`
# OCR plugin setup
Source: https://docs.flowx.ai/5.1/setup-guides/plugins-setup-guide/ocr-plugin-setup
The OCR plugin is a docker image that can be deployed using the following infrastructure prerequisites.
## Infrastructure prerequisites
* S3 bucket or alternative (for example, minio)
* Kafka cluster
Starting with `ocr-plugin 1.X` it no longer requires RabbitMQ.
The following environment from previous releases must be removed in order to use OCR plugin: `CELERY_BROKER_URL`.
## Deployment/configuration
To deploy the OCR plugin, you will need to deploy `ocr-plugin` helm chart with custom values file.
Most important sections are these, but more can be extracted from helm chart.
```yaml theme={"system"}
image:
repository: /ocr-plugin
applicationSecrets: {}
replicaCount: 2
resources: {}
env: []
```
### Credentials
S3 bucket:
```yaml theme={"system"}
applicationSecrets:
enable: true
envSecretKeyRef:
STORAGE_S3_ACCESS_KEY: access-key # default empty
STORAGE_S3_SECRET_KEY: secret-key # default empty
existingSecret: true
secretName: ocr-plugin-application-config
```
### Kafka configuration
You can override the following environment variables:
| Environment Variable | Definition | Default Value | Example |
| ------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------- | -------------------- |
| `ENABLE_KAFKA_SASL` | Indicates whether Kafka SASL authentication is enabled | `False` | - |
| `KAFKA_ADDRESS` | The address of the Kafka bootstrap server in the format `:` | - | `kafka-server1:9092` |
| `KAFKA_CONSUME_SCHEDULE` | The interval (in seconds) at which Kafka messages are consumed | `30` | - |
| `KAFKA_INPUT_TOPIC` | The Kafka topic from which input messages are consumed | - | - |
| `KAFKA_OCR_CONSUMER_GROUPID` | The consumer group ID for the OCR Kafka consumer | `ocr_group` | - |
| `KAFKA_CONSUMER_AUTO_COMMIT` | Determines whether Kafka consumer commits offsets automatically | `True` | - |
| `KAFKA_CONSUMER_AUTO_COMMIT_INTERVAL` | The interval (in milliseconds) at which Kafka consumer commits offsets automatically | `1000` | - |
| `KAFKA_CONSUMER_TIMEOUT` | The timeout (in milliseconds) for Kafka consumer operations | `28000` | - |
| `KAFKA_CONSUMER_MAX_POLL_INTERVAL` | The maximum interval (in milliseconds) between consecutive polls for Kafka consume | `25000` | - |
| `KAFKA_CONSUMER_AUTO_OFFSET_RESET` | The strategy for resetting the offset when no initial offset is available or if the current offset is invalid | `earliest` | - |
| `KAFKA_OUTPUT_TOPIC` | The Kafka topic to which output messages are sent | - | - |
Please note that the default values and examples provided here are for illustrative purposes. Make sure to replace them with the appropriate values based on your Kafka configuration.
When configuring the OCR plugin, make sure to use the correct outgoing topic names that match [**the pattern expected by the Engine**](../flowx-engine-setup-guide/engine-setup#configuring-kafka), which listens for messages on topics with specific names.
### Authorization
You can override the following environment variables:
| Environment Variable | Definition | Default Value | Example |
| -------------------------- | ------------------------------------------------------ | ------------- | --------------------------------- |
| `OAUTH_CLIENT_ID` | The client ID for OAuth authentication | - | `your_client_id` |
| `OAUTH_CLIENT_SECRET` | The client secret for OAuth authentication | - | `your_client_secret` |
| `OAUTH_TOKEN_ENDPOINT_URI` | The URI of the token endpoint for OAuth authentication | - | `https://oauth.example.com/token` |
Please note that the default values and examples provided here are for illustrative purposes. Make sure to replace them with the appropriate values based on your OAuth authentication configuration.
### Storage (S3 configuration)
You can override the following environment variables:
| Environment Variable | Definition | Default Value | Example |
| ----------------------------------- | ------------------------------------------------------------------- | ------------- | --------------------------------------------------- |
| `STORAGE_S3_HOST` | The host address of the S3 storage service | - | `minio:9000`, `https://s3.eu-west-1.amazonaws.com/` |
| `STORAGE_S3_SECURE_CONNECTION` | Indicates whether to use a secure connection (HTTPS) for S3 storage | `False` | |
| `STORAGE_S3_LOCATION` | The location of the S3 storage service | - | `eu-west-1` |
| `STORAGE_S3_OCR_SCANS_BUCKET` | The name of the S3 bucket for storing OCR scans | - | `pdf-scans` |
| `STORAGE_S3_OCR_SIGNATURE_BUCKET` | The name of the S3 bucket for storing OCR signatures | - | `extracted-signatures` |
| `STORAGE_S3_OCR_SIGNATURE_FILENAME` | The filename pattern for extracted OCR signatures | - | `extracted_signature_{}.png` |
| `STORAGE_S3_ACCESS_KEY` | The access key for connecting to the S3 storage service | - | |
| `STORAGE_S3_SECRET_KEY` | The secret key for connecting to the S3 storage service | - | |
Please note that the default values and examples provided here are for illustrative purposes. Make sure to replace them with the appropriate values based on your S3 storage configuration.
### Performance
| Environment Variable | Definition | Default Value |
| ---------------------------- | ----------------------------------------------------------------------------------------------------------------- | ------------- |
| `ENABLE_PERFORMANCE_PAYLOAD` | When set to true, the response payload will contain performance metrics related to various stages of the process. | `true` |
#### Example
```yaml theme={"system"}
"perf": {
"total_time": 998,
"split": {
"get_file": 248,
"extract_images": 172,
"extract_barcodes": 37,
"extract_signatures": 238,
"minio_signature_save": 301
}
}
```
### Certificates
You can override the following environment variables:
| Environment Variable | Definition | Default Value |
| -------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------- |
| `REQUESTS_CA_BUNDLE` | The path to the certificate bundle file used for secure requests | `5` |
| `CERT_REQUESTS` | If no activity has occurred for a certain number of seconds, an attempt will be made to refresh the workers | `'CERT_REQUIRED'` |
### Workers behavior
You can override the following environment variables:
| Environment Variable | Definition | Default Value |
| ------------------------ | ----------------------------------------------------------------------------------------------------------- | ------------- |
| `OCR_WORKER_COUNT` | Number of workers | `5` |
| `OCR_WORK_QUEUE_TIMEOUT` | If no activity has occurred for a certain number of seconds, an attempt will be made to refresh the workers | `10` |
If no worker is released after `OCR_WORK_QUEUE_TIMEOUT` seconds, the application will verify whether any workers have become unresponsive and need to be restarted.
If none of the workers have died, it means they are likely blocked in some process. In this case, the application will terminate all the workers and shut down itself, hoping that the container will be restarted.
### Control aspect ratio
| Environment Variable | Definition | Default Value |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------- |
| `OCR_SIGNATURE_MAX_RATIO` | This variable sets the maximum acceptable aspect ratio for a signed scanned document (the OCR plugin will recognize a signature only if the document ratio is greater than or equal to the specified minimum ratio) | `1.43` |
| `OCR_SIGNATURE_MIN_RATIO` | This variable sets the minimum acceptable aspect ratio for a signed scanned document (in this context, the OCR plugin will consider a detected signature only if the document aspect ratio is less than or equal to the specified maximum ratio) | `1.39` |
The plugin has been tested with aspect ratio values between 1.38 and 1.43. However, caution is advised when using untested values outside this range, as they may potentially disrupt the functionality. Adjust these parameters at your own risk and consider potential consequences, as untested values might lead to plugin instability or undesired behavior.
# Plugins setup
Source: https://docs.flowx.ai/5.1/setup-guides/plugins-setup-guide/plugins-setup-guide-overview
To set up a plugin in your environment, you must go through the next steps.
* make sure you have all the prerequisites deployed on your environment (for example a [Redis](../../docs/platform-overview/frameworks-and-standards/event-driven-architecture-frameworks/intro-to-redis) cache instance, a DB instance, etc)
* make the necessary configurations for each plugin (DB connection data, related Kafka topic names, etc)
Once you have deployed the necessary plugins in your environment, you can start integrating them in your process definitions.
All of them listen for Kafka events sent by the **FlowX Engine** and performed certain actions depending on the received data. They can also send data back to the Engine.
Some of them require some custom templates to be configured, for these cases, a [WYSIWYG Editor](/4.0/docs/platform-deep-dive/plugins/wysiwyg) is provided.
Let's go into more details on setting up and using each of them:
# Reporting setup
Source: https://docs.flowx.ai/5.1/setup-guides/plugins-setup-guide/reporting-setup
The Reporting setup guide assists in configuring the reporting plugin, relying on specific dependencies and configurations.
The FlowX Reporting solution provides powerful data analytics and visualization capabilities for your FlowX platform. This guide offers step-by-step instructions for setting up and configuring all components of the reporting system.
The reporting solution consists of three main components:
* **Reporting Plugin**: Extracts and processes data from the FlowX Engine
* **Spark Application**: Handles data transformation and loading operations
* **Apache Superset**: Provides the visualization interface and dashboard capabilities
## Dependencies
The reporting plugin, available as a Docker image, requires the following dependencies:
* **PostgreSQL**: Dedicated instance for reporting data storage.
* **Reporting-plugin Helm Chart**:
* Utilizes a Spark Application to extract data from the FLOWX.AI Engine database and populate the Reporting plugin database.
* Utilizes Spark Operator (more info [**here**](https://www.kubeflow.org/docs/components/spark-operator)).
* **Superset**:
* Requires a dedicated PostgreSQL database for its operation.
* Utilizes Redis for efficient caching.
* Exposes its user interface via an ingress.
## Prerequisites
Before starting the installation, ensure you have:
* Kubernetes cluster with Helm installed
* Access to PostgreSQL databases for:
* FlowX Engine database (source)
* Reporting database (destination)
* Superset metadata database
* Docker registry access for the reporting images
* Redis instance for Superset caching
* Ingress controller for exposing Superset UI
## Reporting plugin helm chart configuration
Configuring the reporting plugin involves several steps:
### Installation of Spark Operator
1. Install the Spark Operator using Helm:
```bash theme={"system"}
helm install local-spark-release spark-operator/spark-operator \
--namespace spark-operator --create-namespace \
--set webhook.enable=true \
--set logLevel=6
```
2. Apply RBAC configurations:
```bash theme={"system"}
kubectl apply -f spark-rbac.yaml
```
3. Build the reporting image:
```bash theme={"system"}
docker build ...
```
4. Update the `reporting-image` URL in the `spark-app.yml` file.
5. Configure the correct database ENV variables in the `spark-app.yml` file (check them in the above examples with/without webhook).
6. Deploy the application:
```bash theme={"system"}
kubectl apply -f operator/spark-app.yaml
```
## Spark Operator deployment options
### Without webhook
For deployments without a webhook, manage secrets and environmental variables for security:
```yaml theme={"system"}
sparkApplication: #Defines the Spark application configuration.
enabled: "true" #Indicates that the Spark application is enabled for deployment.
schedule: "@every 5m" #A cronJob that should run at every 5 minutes.
driver: # This section configures the driver component of the Spark application.
envVars: #Environment variables for driver setup.
ENGINE_DATABASE_USER: flowx
ENGINE_DATABASE_URL: postgresql:5432
ENGINE_DATABASE_NAME: process_engine
ENGINE_DATABASE_TYPE: postgres # To set the type of engine database, can be also changed to oracle
REPORTING_DATABASE_USER: flowx
REPORTING_DATABASE_URL: postgresql:5432
REPORTING_DATABASE_NAME: reporting
REPORTING_DATABASE_TYPE: postgres
APPLICATION_DATABASE_USER: postgres
APPLICATION_DATABASE_URL: localhost:5439
APPLICATION_DATABASE_NAME: app_manager
APPLICATION_DATABASE_TYPE: postgres
ENGINE_DATABASE_PASSWORD: "password"
REPORTING_DATABASE_PASSWORD: "password"
APPLICATION_DATABASE_PASSWORD: "password"
executor: #This section configures the executor component of the Spark application.
envVars: #Environment variables for executor setup.
ENGINE_DATABASE_USER: flowx
ENGINE_DATABASE_URL: postgresql:5432
ENGINE_DATABASE_NAME: process_engine
ENGINE_DATABASE_TYPE: postgres # To set the type of engine database, can be also changed to oracle
REPORTING_DATABASE_USER: flowx
REPORTING_DATABASE_URL: postgresql:5432
REPORTING_DATABASE_NAME: reporting
REPORTING_DATABASE_TYPE: postgres
APPLICATION_DATABASE_USER: postgres
APPLICATION_DATABASE_URL: localhost:5439
APPLICATION_DATABASE_NAME: app_manager
APPLICATION_DATABASE_TYPE: postgres
ENGINE_DATABASE_PASSWORD: "password"
REPORTING_DATABASE_PASSWORD: "password"
APPLICATION_DATABASE_PASSWORD: "password"
```
NOTE: Passwords are currently set as plain strings, which is not secure practice in a production environment.
### With webhook
When using the webhook, employ environmental variables with secrets for a balanced security approach:
```yaml theme={"system"}
sparkApplication:
enabled: "true"
schedule: "@every 5m"
driver:
env: #Environment variables for driver setup with secrets.
ENGINE_DATABASE_USER: flowx
ENGINE_DATABASE_URL: postgresql:5432
ENGINE_DATABASE_NAME: process_engine
ENGINE_DATABASE_TYPE: postgres # To set the type of engine database, can be also changed to oracle
REPORTING_DATABASE_USER: flowx
REPORTING_DATABASE_URL: postgresql:5432
REPORTING_DATABASE_NAME: reporting
REPORTING_DATABASE_TYPE: postgres
APPLICATION_DATABASE_USER: postgres
APPLICATION_DATABASE_URL: localhost:5439
APPLICATION_DATABASE_NAME: app_manager
APPLICATION_DATABASE_TYPE: postgres
extraEnvVarsMultipleSecretsCustomKeys:
- name: postgresql-generic
secrets: #Secrets retrieved from a generic source.
ENGINE_DATABASE_PASSWORD: postgresql-password
REPORTING_DATABASE_PASSWORD: postgresql-password
APPLICATION_DATABASE_PASSWORD: postgresql-password
executor:
env: #Environment variables for executor setup with secrets.
ENGINE_DATABASE_USER: flowx
ENGINE_DATABASE_URL: postgresql:5432
ENGINE_DATABASE_NAME: process_engine
ENGINE_DATABASE_TYPE: postgres # To set the type of engine database, can be also changed to oracle
REPORTING_DATABASE_USER: flowx
REPORTING_DATABASE_URL: postgresql:5432
REPORTING_DATABASE_NAME: reporting
REPORTING_DATABASE_TYPE: postgres
APPLICATION_DATABASE_USER: postgres
APPLICATION_DATABASE_URL: localhost:5439
APPLICATION_DATABASE_NAME: app_manager
APPLICATION_DATABASE_TYPE: postgres
extraEnvVarsMultipleSecretsCustomKeys:
- name: postgresql-generic
secrets: #Secrets retrieved from a generic source.
ENGINE_DATABASE_PASSWORD: postgresql-password
REPORTING_DATABASE_PASSWORD: postgresql-password
APPLICATION_DATABASE_PASSWORD: postgresql-password
```
In Kubernetes-based Spark deployments managed by the Spark Operator, you can define the sparkApplication configuration to customize the behavior, resources, and environment for both the driver and executor components of Spark jobs. The driver section allows fine-tuning of parameters specifically pertinent to the driver part of the Spark application.
Below are the configurable values within the chart values.yml file (with webhook):
```yml theme={"system"}
apiVersion: "sparkoperator.k8s.io/v1beta2"
kind: ScheduledSparkApplication
metadata:
name: reporting-plugin-spark-app
namespace: dev
labels:
app.kubernetes.io/component: reporting
app.kubernetes.io/instance: reporting-plugin
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: reporting-plugin
app.kubernetes.io/release: 0.0.1-FLOWXRELEASE
app.kubernetes.io/version: 0.0.1-FLOWXVERSION
helm.sh/chart: reporting-plugin-0.1.1-PR-9-4-20231122153650-e
spec:
schedule: '@every 5m'
concurrencyPolicy: Forbid
template:
type: Python
pythonVersion: "3"
mode: cluster
image: eu.gcr.io/prj-cicd-d-flowxai-jx-6401/reporting-plugin:0.1.1-PR-9-4-20231122153650-eb6c
imagePullPolicy: IfNotPresent
mainApplicationFile: local:///opt/spark/work-dir/main.py
sparkVersion: "3.1.1"
restartPolicy:
type: Never
onFailureRetries: 0
onFailureRetryInterval: 10
onSubmissionFailureRetries: 5
onSubmissionFailureRetryInterval: 20
driver:
cores: 1
coreLimit: 1200m
memory: 512m
labels:
version: 3.1.1
serviceAccount: spark
env:
ENGINE_DATABASE_USER: flowx
ENGINE_DATABASE_URL: postgresql:5432
ENGINE_DATABASE_NAME: process_engine
ENGINE_DATABASE_TYPE: postgres # To set the type of engine database, can be also changed to oracle
REPORTING_DATABASE_USER: flowx
REPORTING_DATABASE_URL: postgresql:5432
REPORTING_DATABASE_NAME: reporting
REPORTING_DATABASE_TYPE: postgres
APPLICATION_DATABASE_USER: postgres
APPLICATION_DATABASE_URL: localhost:5439
APPLICATION_DATABASE_NAME: app_manager
APPLICATION_DATABASE_TYPE: postgres
ENGINE_DATABASE_PASSWORD: "password"
REPORTING_DATABASE_PASSWORD: "password"
APPLICATION_DATABASE_PASSWORD: "password"
extraEnvVarsMultipleSecretsCustomKeys:
- name: postgresql-generic
secrets: #Secrets retrieved from a generic source.
ENGINE_DATABASE_PASSWORD: postgresql-password
REPORTING_DATABASE_PASSWORD: postgresql-password
APPLICATION_DATABASE_PASSWORD: postgresql-password
executor:
cores: 1
instances: 3
memory: 512m
labels:
version: 3.1.1
env: #Environment variables for executor setup with secrets.
ENGINE_DATABASE_USER: flowx
ENGINE_DATABASE_URL: postgresql:5432
ENGINE_DATABASE_NAME: process_engine
ENGINE_DATABASE_TYPE: postgres # To set the type of engine database, can be also changed to oracle
REPORTING_DATABASE_USER: flowx
REPORTING_DATABASE_URL: postgresql:5432
REPORTING_DATABASE_NAME: reporting
REPORTING_DATABASE_TYPE: postgres
APPLICATION_DATABASE_USER: postgres
APPLICATION_DATABASE_URL: localhost:5439
APPLICATION_DATABASE_NAME: app_manager
APPLICATION_DATABASE_TYPE: postgres
extraEnvVarsMultipleSecretsCustomKeys:
- name: postgresql-generic
secrets: #Secrets retrieved from a generic source.
ENGINE_DATABASE_PASSWORD: postgresql-password
REPORTING_DATABASE_PASSWORD: postgresql-password
APPLICATION_DATABASE_PASSWORD: postgresql-password
```
### Superset configuration
Detailed Superset Configuration Guide:
Refer to Superset Documentation for in-depth information:
## Post-installation steps
After installation, perform the following essential configurations:
### Datasource configuration
For document-related data storage, configure these environment variables:
* `SPRING_DATASOURCE_URL`
* `SPRING_DATASOURCE_USERNAME`
* `SPRING_DATASOURCE_PASSWORD`
Ensure accurate details to prevent startup errors. The Liquibase script manages schema and migrations.
### Redis configuration
The following values should be set with the corresponding Redis-related values:
* `SPRING_REDIS_HOST`
* `SPRING_REDIS_PORT`
## Keycloak configuration
To implement alternative user authentication:
* Override `AUTH_TYPE` in your `superset.yml` configuration file:
* Set `AUTH_TYPE: AUTH_OID`
* Provide the reference to your `openid-connect` realm:
* `OIDC_OPENID_REALM: 'flowx'`
With this configuration, the login page changes to a prompt where the user can select the desired OpenID provider.
### Extend the security manager
Firstly, you will want to make sure that flask stops using `flask-openid` and starts using `flask-oidc` instead.
To do so, you will need to create your own security manager that configures `flask-oidc` as its authentication provider.
```yml theme={"system"}
extraSecrets:
keycloak_security_manager.py: |
from flask_appbuilder.security.manager import AUTH_OID
from superset.security import SupersetSecurityManager
from flask_oidc import OpenIDConnect
```
To enable OpenID in Superset, you would previously have had to set the authentication type to `AUTH_OID`.
The security manager still executes all the behavior of the super class, but overrides the OID attribute with the `OpenIDConnect` object.
Further, it replaces the default OpenID authentication view with a custom one:
```yml theme={"system"}
from flask_appbuilder.security.views import AuthOIDView
from flask_login import login_user
from urllib.parse import quote
from flask_appbuilder.views import expose
from flask import request, redirect
class AuthOIDCView(AuthOIDView):
@expose('/login/', methods=['GET', 'POST'])
def login(self, flag=True):
sm = self.appbuilder.sm
oidc = sm.oid
superset_roles = ["Admin", "Alpha", "Gamma", "Public", "granter", "sql_lab"]
default_role = "Admin"
@self.appbuilder.sm.oid.require_login
def handle_login():
user = sm.auth_user_oid(oidc.user_getfield('email'))
if user is None:
info = oidc.user_getinfo(['preferred_username', 'given_name', 'family_name', 'email', 'roles'])
roles = [role for role in superset_roles if role in info.get('roles', [])]
roles += [default_role, ] if not roles else []
user = sm.add_user(info.get('preferred_username'), info.get('given_name', ''), info.get('family_name', ''),
info.get('email'), [sm.find_role(role) for role in roles])
login_user(user, remember=False)
return redirect(self.appbuilder.get_url_for_index)
return handle_login()
@expose('/logout/', methods=['GET', 'POST'])
def logout(self):
oidc = self.appbuilder.sm.oid
oidc.logout()
super(AuthOIDCView, self).logout()
redirect_url = request.url_root.strip('/')
# redirect_url = request.url_root.strip('/') + self.appbuilder.get_url_for_login
return redirect(
oidc.client_secrets.get('issuer') + '/protocol/openid-connect/logout?redirect_uri=' + quote(redirect_url))
```
On authentication, the user is redirected back to Superset.
### Configure Superset authentication
Finally, we need to add some parameters to the superset .yml file:
```yml theme={"system"}
'''
---------------------------KEYCLOACK ----------------------------
'''
curr = os.path.abspath(os.getcwd())
AUTH_TYPE = AUTH_OID
OIDC_CLIENT_SECRETS = curr + '/pythonpath/client_secret.json'
OIDC_ID_TOKEN_COOKIE_SECURE = True
OIDC_REQUIRE_VERIFIED_EMAIL = True
OIDC_OPENID_REALM: 'flowx'
OIDC_INTROSPECTION_AUTH_METHOD: 'client_secret_post'
CUSTOM_SECURITY_MANAGER = OIDCSecurityManager
AUTH_USER_REGISTRATION = False
AUTH_USER_REGISTRATION_ROLE = 'Admin'
OVERWRITE_REDIRECT_URI = 'https://{{ .Values.flowx.ingress.reporting }}/oidc_callback'
'''
--------------------------------------------------------------
'''
```
# Runtime manager setup
Source: https://docs.flowx.ai/5.1/setup-guides/runtime-manager
This guide provides a step-by-step process for setting up and configuring the Runtime Manager module, including database, Kafka, and OAuth2 authentication settings to manage runtime and build configurations.
The [**Application Manager**](./application-manager) and **Runtime Manager** share the same container image and Helm chart. Refer to the **Deployment Guidelines** in the release notes to ensure compatibility and verify the correct version.
## Infrastructure prerequisites
The Runtime Manager service requires the following components to be set up before it can be started:
* **PostgreSQL**
* **MongoDB**
* **Redis**
* **Kafka**
* **OAuth2 Authentication**
## Dependencies
* [**Database configuration**](#database-configuration)
* [**Kafka configuration**](#configuring-kafka)
* [**Authentication & access roles**](#configuring-authentication-and-access-roles)
* [**Logging**](./setup-guides-overview#logging)
## Change the application name
| Environment Variable | Description | Example Value |
| ------------------------- | --------------------------------------------------------- | ----------------- |
| `SPRING_APPLICATION_NAME` | Service identifier used for service discovery and logging | `runtime-manager` |
Default Value: `application-manager -> must be changed to `runtime-manager
## Core service configuration
| Environment Variable | Description | Example Value |
| ---------------------------- | ------------------------------------------------- | -------------------- |
| `FLOWX_ENVIRONMENT_NAME` | Environment identifier (dev, staging, prod, etc.) | `pr` |
| `LOGGING_CONFIG_FILE` | Path to logging configuration file | `logback-spring.xml` |
| `MULTIPART_MAX_FILE_SIZE` | Maximum file size for uploads | `25MB` |
| `MULTIPART_MAX_REQUEST_SIZE` | Maximum total request size | `25MB` |
## Database configuration
The Runtime Manager uses the same PostgreSQL (to store application data) and MongoDB (to manage runtime data) as [**application-manager**](application-manager). Configure these database connections with the following environment variables:
### PostgreSQL (Application data)
| Environment Variable | Description | Example Value |
| ---------------------------- | ---------------------------------- | ----------------------------------------------- |
| `SPRING_DATASOURCE_URL` | JDBC URL for PostgreSQL connection | `jdbc:postgresql://postgresql:5432/app_manager` |
| `SPRING_DATASOURCE_USERNAME` | PostgreSQL username | `flowx` |
| `SPRING_DATASOURCE_PASSWORD` | PostgreSQL password | *sensitive* |
### MongoDB (Runtime data)
| Environment Variable | Description | Example Value |
| ------------------------- | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `SPRING_DATA_MONGODB_URI` | URI for MongoDB connection | `mongodb://${DB_USERNAME}:${DB_PASSWORD}@mongodb-0.mongodb-headless,mongodb-1.mongodb-headless,mongodb-arbiter-0.mongodb-headless:27017/${DB_NAME}?retryWrites=false` |
| `DB_NAME` | MongoDB database name | `app-runtime` |
| `DB_USERNAME` | MongoDB username | `app-runtime` |
| `DB_PASSWORD` | MongoDB password | *sensitive* |
## Redis configuration
| Environment Variable | Description | Example Value |
| ---------------------------- | --------------------------------- | -------------- |
| `SPRING_DATA_REDIS_HOST` | Redis server hostname | `redis-master` |
| `SPRING_DATA_REDIS_PASSWORD` | Redis password | *sensitive* |
| `SPRING_DATA_REDIS_PORT` | Redis server port | `6379` |
| `SPRING_REDIS_TTL` | Default Redis TTL in milliseconds | `5000000` |
## Kafka configuration
### Kafka connection
| Environment Variable | Description | Example Value |
| -------------------------------- | ----------------------------------- | ---------------------------------- |
| `SPRING_KAFKA_BOOTSTRAPSERVERS` | Kafka broker addresses | `kafka-flowx-kafka-bootstrap:9092` |
| `KAFKA_TOPIC_NAMING_ENVIRONMENT` | Environment prefix for Kafka topics | |
### Kafka OAuth Authentication
| Environment Variable | Description | Example Value |
| -------------------------------- | ------------------------------ | ----------------------------------------------------------------- |
| `KAFKA_OAUTH_CLIENT_ID` | OAuth client ID for Kafka | `flowx-service-client` |
| `KAFKA_OAUTH_CLIENT_SECRET` | OAuth client secret for Kafka | `flowx-service-client-secret` |
| `KAFKA_OAUTH_TOKEN_ENDPOINT_URI` | OAuth token endpoint for Kafka | `{baseUrl}/auth/realms/kafka-authz/protocol/openid-connect/token` |
Kafka OAuth authentication secures communication between services using the Kafka message broker. The client ID and secret are used to obtain an access token from the token endpoint.
## Authentication configuration
### OpenID Connect configuration
| Environment Variable | Description | Example Value |
| ----------------------------------------------------- | ---------------------------- | -------------------------- |
| `SECURITY_OAUTH2_BASE_SERVER_URL` | OAuth2 server base URL | `{baseUrl}/auth` |
| `SECURITY_OAUTH2_REALM` | OAuth2 realm name | `flowx` |
| `SECURITY_OAUTH2_CLIENT_CLIENT_ID` | OAuth2 client ID | `flowx-platform-authorize` |
| `SECURITY_OAUTH2_CLIENT_CLIENT_SECRET` | OAuth2 client secret | *sensitive* |
| `SECURITY_OAUTH2_SERVICE_ACCOUNT_ADMIN_CLIENT_SECRET` | Admin service account secret | *sensitive* |
The service account configuration approach is deprecated but still supported for backward compatibility. In newer deployments, consider using the standard OAuth2 client configuration.
## File storage configuration
| Environment Variable | Description | Example Value |
| ---------------------------------------- | -------------------------------- | ------------------- |
| `APPLICATION_FILE_STORAGE_S3_SERVER_URL` | S3-compatible storage server URL | `http://minio:9000` |
| `APPLICATION_FILE_STORAGE_S3_ACCESS_KEY` | S3 access key | *sensitive* |
| `APPLICATION_FILE_STORAGE_S3_SECRET_KEY` | S3 secret key | *sensitive* |
S3-compatible storage is used for storing application files, exports, and imports. The Runtime Manager supports MinIO, AWS S3, and other S3-compatible storage solutions.
## Ingress configuration
For exposing the Runtime manager service, configure public, admin and adminInstances ingress settings:
```yaml theme={"system"}
ingress:
enabled: true
public:
enabled: true
hostname: "{{ .Values.flowx.ingress.public }}"
path: /rtm/api/runtime(/|$)(.*)
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /api/runtime/$2
nginx.ingress.kubernetes.io/cors-allow-headers: DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization,platform,Flowx-Platform
admin:
enabled: true
hostname: "{{ .Values.flowx.ingress.admin }}"
path: /rtm/api/build-mgmt(/|$)(.*)
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /api/build-mgmt/$2
nginx.ingress.kubernetes.io/cors-allow-headers: DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization,platform,Flowx-Platform
adminInstances:
enabled: true
hostname: "{{ .Values.flowx.ingress.admin }}"
path: /rtm/api/(runtime|runtime-internal)/(.*)
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /api/$1/$2
nginx.ingress.kubernetes.io/cors-allow-headers: DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-
```
> **Note:** Replace placeholders in environment variables with the appropriate values for your environment before starting the service.
# Scheduler setup
Source: https://docs.flowx.ai/5.1/setup-guides/scheduler-setup-guide
This guide will walk you through the process of setting up the Scheduler service.
## Infrastructure prerequisites
* **MongoDB**
* **Kafka**
* **OpenID Connect Settings**
## Dependencies
* [MongoDB](https://www.mongodb.com/2) database
* Ability to connect to a Kafka instance used by the FlowX Engine
* Scheduler service account - required for using Start Timer event node - see [**here**](./access-management/configuring-an-iam-solution#scheduler-service-account) for more details.
The service comes with most of the required configuration properties pre-filled. However, certain custom environment variables need to be set up.
This service needs to connect to a Mongo database that has replicas, in order to work correctly.
## Scheduler configuration
### Scheduler
```yaml theme={"system"}
scheduler:
thread-count: 30 # Configure the number of threads to be used for sending expired messages.
callbacks-thread-count: 60 # Configure the number of threads for handling Kafka responses, whether the message was successfully sent or not
cronExpression: "*/10 * * * * *" #every 10 seconds
retry: # new retry mechanism
max-attempts: 3
seconds: 1
thread-count: 3
cronExpression: "*/10 * * * * *" #every 10 seconds
cleanup:
cronExpression: "*/25 * * * * *" #every 25 seconds
```
* `SCHEDULER_THREAD_COUNT`: Used to configure the number of threads to be used for sending expired.
* `SCHEDULER_CALLBACKS_THREAD_COUNT`: Used to configure the number of threads for handling Kafka responses, whether the message was successfully sent or not.
The "scheduler.cleanup.cronExpression" is valid for both scheduler and timer event scheduler.
#### Retry mechanism
* `SCHEDULER_RETRY_THREAD_COUNT`: Specify the number of threads to use for resending messages that need to be retried.
* `SCHEDULER_RETRY_MAX_ATTEMPTS`: This configuration parameter sets the number of retry attempts. For instance, if it's set to 3, it means that the system will make a maximum of three retry attempts for message resending.
* `SCHEDULER_RETRY_SECONDS`: This configuration parameter defines the time interval, in seconds, for retry attempts. For example, when set to 1, it indicates that the system will retry the operation after a one-second delay.
#### Cleanup
* `SCHEDULER_CLEANUP_CRONEXPRESSION`: It specifies how often, in seconds, events that have already been processed should be cleaned up from the database.
#### Recovery mechanism
```yaml theme={"system"}
flowx:
timer-calculator:
delay-max-repetitions: 1000000
```
You have a "next execution" set for 10:25, and the cycle step is 10 minutes. If the instance goes down for 2 hours, the next execution time should be 12:25, not 10:35. To calculate this, you add 10 minutes repeatedly to 10:25 until you reach the current time. So, it would be 10:25 + 10 min + 10 min + 10 min, until you reach the current time of 12:25. This ensures that the next execution time is adjusted correctly after the downtime.
* `FLOWX_TIMER_CALCULATOR_DELAY_MAX_REPETITIONS`: This means that, for example, if our cycle step is set to one second and the system experiences a downtime of two weeks, which is equivalent to 1,209,600 seconds, and we have the "max repetitions" set to 1,000,000, it will attempt to calculate the next schedule. However, when it reaches the maximum repetitions, an exception is thrown, making it impossible to calculate the next schedule. As a result, the entry remains locked and needs to be rescheduled. This scenario represents a critical case where the system experiences extended downtime, and the cycle step is very short (e.g., 1 second), leading to the inability to determine the next scheduled event.
### Timer event scheduler
Configuration for Timer Event scheduler designed to manage timer events. Similar configuration to scheduler.
```yaml theme={"system"}
timer-event-scheduler:
thread-count: 30
callbacks-thread-count: 60
cronExpression: "*/1 * * * * *" #every 1 seconds
retry:
max-attempts: 3
seconds: 1
thread-count: 3
cronExpression: "*/5 * * * * *" #every 5 seconds
```
## OpenID connect settings
Default settings are for Keycloak.
* `SECURITY_TYPE`: Indicates that OAuth 2.0 is the chosen security type, default value: `oauth2`.
* `SECURITY_PATHAUTHORIZATIONS_0_PATH`: Defines a security path or endpoint pattern. It specifies that the security settings apply to all paths under the "/api/" path. The `**` is a wildcard that means it includes all subpaths under "/api/\*\*".
* `SECURITY_PATHAUTHORIZATIONS_0_ROLESALLOWED`: Specifies the roles allowed for accessing the specified path. In this case, the roles allowed are empty (""). This might imply that access to the "/api/\*\*" paths is open to all users or that no specific roles are required for authorization.
```yaml example theme={"system"}
security:
type: oauth2
pathAuthorizations:
- path: "/api/**"
rolesAllowed: "ANY_AUTHENTICATED_USER"
```
* `SECURITY_OAUTH2_BASE_SERVER_URL`: This setting specifies the base URL of the OpenID server, which is used for authentication and authorization.
* `SECURITY_OAUTH2_SERVICE_ACCOUNT_ADMIN_CLIENT_ID`: This setting specifies the service account that is essential for enabling the [**Start Timer**](../docs/building-blocks/node/timer-events/timer-start-event) event node. Ensure that you provide the correct client ID for this service account.
* `SECURITY_OAUTH2_SERVICE_ACCOUNT_ADMIN_CLIENT_SECRET`: Along with the client ID, you must also specify the client secret associated with the service account for proper authentication.
More details about the necessary service account, here:
[Scheduler service account](./access-management/configuring-an-iam-solution#scheduler-service-account)
```yaml example theme={"system"}
oauth2:
base-server-url: http://localhost:8080/auth
realm: flowx
client:
access-token-uri: ${security.oauth2.base-server-url}/realms/${security.oauth2.realm}/protocol/openid-connect/token
client-id: flowx-platform-authorize
client-secret: wrongsecret
resource:
user-info-uri: ${security.oauth2.base-server-url}/realms/${security.oauth2.realm}/protocol/openid-connect/userinfo
service-account:
admin:
client-id: flowx-scheduler-core-sa
client-secret: wrongsecret
```
## Configuring datasoruce (MongoDB)
The MongoDB database is used to persist scheduled messages until they are sent back. The following configurations need to be set using environment variables:
* `SPRING_DATA_MONGODB_URI`: The URI for the MongoDB database.
## Configuring Kafka
The following Kafka related configurations can be set by using environment variables:
* `SPRING_KAFKA_BOOTSTRAP_SERVERS`: Address of the Kafka server
* `SPRING_KAFKA_CONSUMER_GROUP_ID`: Group of consumers
* `KAFKA_CONSUMER_THREADS` (default: 1): The number of Kafka consumer threads
* `KAFKA_CONSUMER_SCHEDULED_TIMER_EVENTS_THREADS` (default: 1): The number of Kafka consumer threads related to starting Timer Events
* `KAFKA_CONSUMER_SCHEDULED_TIMER_EVENTS_GROUP_ID`: Group of consumers related to starting timer events
* `KAFKA_CONSUMER_STOP_SCHEDULED_TIMER_EVENTS_THREADS`- (default: 1): The number of Kafka consumer threads related to stopping Timer events
* `KAFKA_CONSUMER_STOP_SCHEDULED_TIMER_EVENTS_GROUP_ID`: Group of consumers related to stopping timer events
* `KAFKA_AUTH_EXCEPTION_RETRY_INTERVAL`: The interval between retries after `AuthorizationException` is thrown by `KafkaConsumer`
* `KAFKA_TOPIC_SCHEDULE_IN_SET`: Receives scheduled message setting requests from the Admin and Process engine microservices
* `KAFKA_TOPIC_SCHEDULER_IN_STOP`: Handles requests from the Admin and Process engine microservices to terminate scheduled messages.
* `KAFKA_TOPIC_SCHEDULED_TIMER_EVENTS_IN_SET`: Needed to use Timer Events nodes
* `KAFKA_TOPIC_SCHEDULED_TIMER_EVENTS_IN_STOP`: Needed to use Timer Events nodes
Each action available in the service corresponds to a Kafka event. A separate Kafka topic must be configured for each use-case.
Make sure the topics configured for this service don't follow the engine pattern.
## Configuring logging
The following environment variables could be set in order to control log levels:
* `LOGGING_LEVEL_ROOT: INFO` (Default): Root Spring Boot microservice logs
* `LOGGING_LEVEL_APP`: App level logs
# FlowX Data Search setup
Source: https://docs.flowx.ai/5.1/setup-guides/search-data-service-setup-guide
Comprehensive guide for installing, configuring, and deploying the FlowX Data Search service
The FlowX Data Search service enables powerful searching capabilities across your FlowX platform. This guide provides detailed instructions for setting up, configuring, and deploying the service in your environment.
## Infrastructure prerequisites
The FlowX Data Search service requires the following infrastructure components:
| Component | Purpose |
| ----------------- | ------------------------------------------- |
| **Redis** | Caching search results and configurations |
| **Kafka** | Message-based communication with the engine |
| **Elasticsearch** | Indexing and searching data |
## Configuration
### Kafka configuration
Configure Kafka communication using these environment variables and properties:
#### Basic Kafka settings
| Variable | Description | Default Value |
| -------------------------------- | ---------------------------------------- | ---------------------- |
| `SPRING_KAFKA_BOOTSTRAPSERVERS` | Address of Kafka server(s) | `localhost:9092` |
| `SPRING_KAFKA_SECURITY_PROTOCOL` | Security protocol for Kafka | `PLAINTEXT` |
| `KAFKA_CONSUMER_THREADS` | Number of Kafka consumer threads | `1` |
| `KAFKA_MESSAGE_MAX_BYTES` | Maximum message size | `52428800` (50MB) |
| `KAFKA_OAUTH_CLIENT_ID` | OAuth client ID for Kafka authentication | `kafka` |
| `KAFKA_OAUTH_CLIENT_SECRET` | OAuth client secret | `kafka-secret` |
| `KAFKA_OAUTH_TOKEN_ENDPOINT_URI` | OAuth token endpoint | `kafka.auth.localhost` |
#### Topic naming configuration
The Data Search service uses a structured topic naming convention:
```
{package}.{environment}.{component}.{action}.{version}
```
For example: `ai.flowx.dev.core.trigger.search.data.v1`
| Variable | Description | Default |
| -------------------------------- | ---------------------------------- | ----------- |
| `KAFKA_TOPIC_NAMING_SEPARATOR` | Primary separator for topic naming | `.` |
| `KAFKA_TOPIC_NAMING_SEPARATOR2` | Secondary separator | `-` |
| `KAFKA_TOPIC_NAMING_PACKAGE` | Package prefix | `ai.flowx.` |
| `KAFKA_TOPIC_NAMING_ENVIRONMENT` | Environment name | `dev.` |
| `KAFKA_TOPIC_NAMING_VERSION` | Version suffix | `.v1` |
#### Kafka topics
The service uses these specific topics:
| Topic | Default Value | Purpose |
| ----------------------------- | --------------------------------------------------------- | ------------------------ |
| `KAFKA_TOPIC_DATA_SEARCH_IN` | `ai.flowx.dev.core.trigger.search.data.v1` | Incoming search requests |
| `KAFKA_TOPIC_DATA_SEARCH_OUT` | `ai.flowx.dev.engine.receive.core.search.data.results.v1` | Outgoing search results |
### Elasticsearch configuration
Configure Elasticsearch connection using the following environment variables:
| Variable | Description | Default Value | Default Value |
| ----------------------------------------- | ------------------------------------------- | ------------------ | -------------------- |
| `SPRING_ELASTICSEARCH_REST_URIS` | URL(s) of Elasticsearch nodes (no protocol) | - | `elasticsearch:9200` |
| `SPRING_ELASTICSEARCH_REST_PROTOCOL` | Connection protocol | `https` | `https` or `http` |
| `SPRING_ELASTICSEARCH_REST_DISABLESSL` | Disable SSL verification | `false` | `false` |
| `SPRING_ELASTICSEARCH_REST_USERNAME` | Authentication username | - | `elastic` |
| `SPRING_ELASTICSEARCH_REST_PASSWORD` | Authentication password | - | `your-password` |
| `SPRING_ELASTICSEARCH_INDEXSETTINGS_NAME` | Index name for search data | `process_instance` | `process_instance` |
### Security configuration
Configure authentication and authorization with these variables:
| Variable | Description | Default Value |
| ------------------------------------- | -------------------------- | ----------------------------------- |
| `SECURITY_OAUTH2_BASESERVERURL` | Base URL for OAuth2 server | `https://keycloak.example.com/auth` |
| `SECURITY_OAUTH2_CLIENT_CLIENTID` | OAuth2 client ID | `data-search-service` |
| `SECURITY_OAUTH2_CLIENT_CLIENTSECRET` | OAuth2 client secret | `data-search-service-secret` |
| `SECURITY_OAUTH2_REALM` | OAuth2 realm name | `flowx` |
### Logging configuration
Control the verbosity of logs with these variables:
| Variable | Description | Default Value |
| -------------------- | ------------------------------ | ------------- |
| `LOGGING_LEVEL_ROOT` | Root Spring Boot log level | `INFO` |
| `LOGGING_LEVEL_APP` | Application-specific log level | `INFO` |
## Elasticsearch index configuration
The Data Search service creates and manages Elasticsearch indices based on the configured index pattern. The default index name is `process_instance`.
### Index pattern
The service derives the index pattern from the `spring.elasticsearch.index-settings.name` property. This pattern is used to query across multiple indices that match the pattern.
### Sample search query
Below is an example of a search query generated by the Data Search service for Elasticsearch:
```json theme={"system"}
{
"query": {
"bool": {
"adjust_pure_negative": true,
"boost": 1,
"must": [
{
"nested": {
"boost": 1,
"ignore_unmapped": false,
"path": "keyIdentifiers",
"query": {
"bool": {
"adjust_pure_negative": true,
"boost": 1,
"must": [
{
"match": {
"keyIdentifiers.key.keyword": {
"query": "astonishingAttribute",
"operator": "OR"
}
}
},
{
"match": {
"keyIdentifiers.originalValue.keyword": {
"query": "OriginalGangsta",
"operator": "OR"
}
}
}
]
}
},
"score_mode": "none"
}
},
{
"terms": {
"boost": 1,
"processDefinitionName.keyword": [
"TEST_PORCESS_NAME_0",
"TEST_PORCESS_NAME_1"
]
}
}
]
}
}
}
```
## Troubleshooting
### Common issues
1. **Elasticsearch connection problems**:
* Verify Elasticsearch is running and accessible
* Check if credentials are correct
* Ensure SSL settings match your environment
2. **Kafka Communication Issues**:
* Verify Kafka topics exist and are properly configured
* Check Kafka permissions for the service
* Ensure bootstrap servers are correctly specified
3. **Search Not Returning Results**:
* Verify index pattern matches existing indices
* Check if data is being properly indexed
* Review search query format for errors
### Logs analysis
Monitor logs for errors and warnings:
```bash theme={"system"}
# For Docker
docker logs flowx-data-search
# For Kubernetes
kubectl logs deployment/data-search
```
## Integration with Kibana
Kibana provides a powerful interface for visualizing and exploring data indexed by the Data Search service.
### Using Kibana with FlowX Data Search
1. Connect Kibana to the same Elasticsearch instance
2. Create an index pattern matching your configured index name
3. Use the Discover tab to explore indexed data
4. Create visualizations and dashboards based on your data
Kibana is an open-source data visualization and exploration tool designed primarily for Elasticsearch. It serves as the visualization layer for the Elastic Stack, allowing users to interact with their data stored in Elasticsearch to perform various activities such as querying, analyzing, and visualizing data. For more information, visit the [Kibana official documentation](https://www.elastic.co/guide/en/kibana/current/index.html).
## Best practices
1. **Security**:
* Store sensitive credentials in Kubernetes Secrets
* Use TLS for Elasticsearch and Kafka communication
* Implement network policies to restrict access
2. **Performance**:
* Scale the number of replicas based on query load
* Adjust Kafka consumer threads based on message volume
* Configure appropriate resource limits and requests
3. **Monitoring**:
* Set up monitoring for Elasticsearch, Kafka, and Redis
* Create alerts for service availability and performance
* Monitor disk space for Elasticsearch data nodes
# Microservices setup guides
Source: https://docs.flowx.ai/5.1/setup-guides/setup-guides-overview
Complete reference for deploying and configuring FlowX.AI microservices in your environment
FlowX.AI is built on a modern microservices architecture, allowing for scalable, resilient, and flexible deployments. Each microservice operates independently while collaborating with others to provide a complete enterprise solution.
## Deployment strategy
Deploying FlowX.AI microservices involves breaking down the application into modular components that can be independently deployed, scaled, and maintained. All microservices are delivered as Docker containers, making them suitable for deployment on any container orchestration platform, such as Kubernetes or Docker Swarm.
### Deployment prerequisites
Before beginning the deployment process, ensure you have:
* A Kubernetes cluster or Docker environment
* Access to a container registry
* Persistent storage for databases
* Network policies configured for inter-service communication
* Resource quotas and limits defined for each environment
### Recommended installation order
Following the correct installation sequence is crucial for a successful deployment. This ordered approach prevents dependency issues and ensures each service has the required dependencies available when it initializes.
First, deploy the foundational infrastructure:
* **Databases**: PostgreSQL/Oracle for relational data, MongoDB for document storage
* **Message Broker**: Kafka and ZooKeeper
* **Caching**: Redis
* **Identity Management**: Keycloak or other OAuth2 provider
Next, deploy these core services in order:
1. **Advancing Controller**: Manages process advancement and orchestration
2. **Process Engine**: Handles business process execution and state management
Once the core components are operational, deploy these services (can be deployed in parallel):
* **Admin Service**: Platform administration and configuration management
* **Audit Core**: Compliance auditing and activity tracking
* **Task Management**: Human task assignment and workflow
* **Scheduler Core**: Job scheduling and time-based operations
* **Data Search**: Indexing and searching capabilities
* **Events Gateway**: Event routing and processing
* **Document Plugin**: Document generation and management
* **Notification Plugin**: Communication and alerts management
* **Any additional plugins or extensions**
Deploy the AI Platform services for intelligent automation capabilities:
**Java Services:**
* **Connected Graph**: Knowledge graph queries and management
* **Agents**: AI agent management and orchestration
* **Binaries**: File storage and management for AI services
* **Conversations**: Conversation management and context
* **Models**: AI model configuration and lifecycle management
* **Tenants**: Multi-tenant management for AI services
* **Knowledge Graph (KAG)**: Knowledge ingestion and processing
**Python Services:**
* **Planner**: Task orchestration and workflow planning
* **AI Developer**: Automated code generation capabilities
* **AI Analyst**: Process analysis and optimization
* **AI Designer**: UI generation and design automation
The AI Platform services are optional but provide significant value for organizations looking to leverage AI capabilities in their business processes.
Finally, deploy the frontend services:
* **Designer**: Process design environment for business analysts
* **Web Components**: UI components for custom applications
* **Customer-facing UIs and portals**
## Environment variables reference
Environment variables are the primary configuration mechanism for FlowX.AI microservices. They provide a secure and flexible way to customize service behavior without modifying the container images.
The following sections detail the most commonly used environment variables across FlowX.AI microservices. For service-specific variables, refer to the dedicated setup guides for each component.
### Authorization & access management
| Environment Variable | Description | Example Value | Required |
| --------------------------------------------------- | -------------------------------------------------- | ----------------------------------- | -------- |
| `SECURITY_OAUTH2_BASESERVERURL` | Base URL of the OAuth2/OIDC server | `https://keycloak.example.com/auth` | Yes |
| `SECURITY_OAUTH2_CLIENTCLIENTID` | OAuth2 client ID for the service | `flowx-admin-service` | Yes |
| `SECURITY_OAUTH2_CLIENTCLIENTSECRET` | OAuth2 client secret | `secret` | Yes |
| `SECURITY_OAUTH2_REALM` | OAuth2 realm name | `flowx` | Yes |
| `SECURITY_OAUTH2_SERVICEACCOUNT_ADMIN_CLIENTID` | Service account client ID (for inter-service auth) | `flowx-service-account` | No\* |
| `SECURITY_OAUTH2_SERVICEACCOUNT_ADMIN_CLIENTSECRET` | Service account client secret | `secret` | No\* |
\*Required for some services that need to make authenticated calls to other services
### Database configuration
#### PostgreSQL/Oracle
| Environment Variable | Description | Example Value | Required |
| ----------------------------------------------- | ------------------------------- | --------------------------------------- | -------- |
| `SPRING_DATASOURCE_URL` | JDBC connection URL | `jdbc:postgresql://postgres:5432/flowx` | Yes |
| `SPRING_DATASOURCE_USERNAME` | Database username | `flowx_user` | Yes |
| `SPRING_DATASOURCE_PASSWORD` | Database password | `securePassword123` | Yes |
| `SPRING_DATASOURCE_DRIVERCLASSNAME` | JDBC driver class (Oracle only) | `oracle.jdbc.OracleDriver` | Yes\* |
| `SPRING_JPA_PROPERTIES_HIBERNATE_DEFAULTSCHEMA` | Default schema (Oracle only) | `FLOWX` | Yes\* |
\*Required only for Oracle databases
#### MongoDB (NoSQL)
| Environment Variable | Description | Example Value | Required |
| ------------------------------------- | ------------------------------------------ | --------------------------------------------------------------------------- | -------- |
| `SPRING_DATA_MONGODB_URI` | MongoDB connection URI | `mongodb://mongo1,mongo2,mongo3:27017/flowx?replicaSet=rs0` | Yes |
| `DB_USERNAME` | MongoDB username for services that need it | `flowx_mongo_user` | Yes |
| `DB_PASSWORD` | MongoDB password | `mongoSecurePass456` | Yes |
| `SPRING_DATA_MONGODB_RUNTIME_ENABLED` | Enable runtime MongoDB connection | `true` | No |
| `SPRING_DATA_MONGODB_RUNTIME_URI` | URI for runtime MongoDB connection | `mongodb://${DB_USERNAME}:${DB_PASSWORD}@mongodb-runtime:27017/app-runtime` | No\* |
\*Required if runtime MongoDB connection is enabled
### Kafka configuration
| Environment Variable | Description | Example Value | Required |
| ---------------------------------- | -------------------------------------------- | ---------------------------------------- | -------- |
| `SPRING_KAFKA_BOOTSTRAPSERVERS` | Comma-separated list of Kafka brokers | `kafka-0:9092,kafka-1:9092,kafka-2:9092` | Yes |
| `SPRING_KAFKA_SECURITY_PROTOCOL` | Security protocol for Kafka communication | `SASL_PLAINTEXT` | No |
| `SPRING_KAFKA_CONSUMER_GROUPID` | Consumer group ID | `flowx-process-engine-group` | Yes |
| `KAFKA_CONSUMER_THREADS` | Number of Kafka consumer threads | `5` | No |
| `KAFKA_AUTHEXCEPTIONRETRYINTERVAL` | Retry interval for auth exceptions (seconds) | `10` | No |
| `KAFKA_MESSAGE_MAX_BYTES` | Maximum Kafka message size (bytes) | `52428800` (50 MB) | No |
#### Kafka authentication profile
FlowX.AI supports enabling Kafka authentication across all Java microservices using the `kafka-auth` Spring configuration profile. This feature simplifies the activation of secure Kafka communication.
To enable Kafka authentication, set the `SPRING_PROFILES_ACTIVE` environment variable:
```bash theme={"system"}
SPRING_PROFILES_ACTIVE=kafka-auth
```
You can activate multiple profiles by separating them with commas: `SPRING_PROFILES_ACTIVE=dev,kafka-auth`
**Additional environment variables for OAuth-based Kafka authentication:**
| Environment Variable | Description | Example Value | Required |
| -------------------------------- | -------------------------------------------------------------- | ----------------------------------------- | -------- |
| `KAFKA_OAUTH_CLIENT_ID` | OAuth client ID used to authenticate with the token endpoint | `kafka-client` | Yes\* |
| `KAFKA_OAUTH_CLIENT_SECRET` | Secret associated with the OAuth client ID | `kafka-secret` | Yes\* |
| `KAFKA_OAUTH_TOKEN_ENDPOINT_URI` | OAuth token endpoint URI from which access tokens are obtained | `https://keycloak.example.com/auth/token` | Yes\* |
\*Required when `kafka-auth` profile is active
The kafka-auth profile enforces SASL/OAUTHBEARER with plaintext transport. Ensure secure networking (VPN, mTLS) is configured where required.
For more details, see the [Kafka Authentication Configuration](./kafka-authentication-config) guide.
### Redis configuration
| Environment Variable | Description | Default Value | Required |
| ----------------------- | ------------------------- | ------------------ | -------- |
| `SPRING_REDIS_HOST` | Redis server hostname | `redis-master` | Yes |
| `SPRING_REDIS_PORT` | Redis server port | `6379` | Yes |
| `SPRING_REDIS_PASSWORD` | Redis password | `redisPassword789` | Yes |
| `REDIS_TTL` | Cache TTL in milliseconds | `5000000` | No |
### Logging configuration
| Environment Variable | Description | Default Value | Required |
| ---------------------------- | ---------------------------------- | ------------- | -------- |
| `LOGGING_LEVEL_ROOT` | Root logging level | `INFO` | No |
| `LOGGING_LEVEL_APP` | Application-specific logging level | `DEBUG` | No |
| `LOGGING_LEVEL_MONGO_DRIVER` | MongoDB driver logging level | `WARN` | No |
| `LOGGING_LEVEL_KAFKA` | Kafka client logging level | `WARN` | No |
| `LOGGING_LEVEL_REDIS` | Redis client logging level | `OFF` | No |
## Deployment best practices
### High availability considerations
For production environments, configure these high availability features:
* **Database Clustering**: Implement PostgreSQL/Oracle with replication
* **MongoDB Replica Sets**: Deploy MongoDB as a replica set with at least 3 nodes
* **Kafka Clustering**: Use at least 3 Kafka brokers with replication factor ≥ 3
* **Redis Sentinel/Cluster**: Configure Redis for high availability
* **Service Replicas**: Run multiple instances of each microservice
* **Load Balancing**: Implement proper load balancing for service instances
* **Affinity/Anti-Affinity Rules**: Distribute service instances across nodes
### Security recommendations
Secure your FlowX.AI deployment with these measures:
1. **Network Segmentation**: Isolate microservices using network policies
2. **Secret Management**: Use Kubernetes Secrets or a vault solution
3. **TLS Everywhere**: Enable TLS for all service-to-service communication
4. **OAuth2 Scopes**: Configure fine-grained OAuth2 scopes for services
5. **Resource Isolation**: Use namespaces and pod security policies
6. **Regular Updates**: Keep all components updated with security patches
7. **Audit Logging**: Enable comprehensive audit logging via the Audit Core service
## Troubleshooting
### Common issues and solutions
| Issue | Possible cause | Solution |
| -------------------------- | ----------------------------- | --------------------------------------------------------------- |
| Service fails to start | Missing environment variables | Check logs for "Configuration property not found" errors |
| Database connection errors | Incorrect credentials or URL | Verify database connection parameters |
| Services can't communicate | Kafka misconfiguration | Ensure topic names match between producer and consumer services |
| Authentication failures | OAuth2 configuration issues | Verify client IDs, secrets, and server URLs |
| Performance degradation | Insufficient resources | Monitor CPU/memory usage and scale resources appropriately |
| Data inconsistency | Redis cache not synchronized | Check Redis connection and consider cache invalidation |
### Diagnostic procedures
When troubleshooting FlowX.AI microservices:
1. **Check Service Logs**: Examine logs for error messages
2. **Verify Configurations**: Ensure all required environment variables are set correctly
3. **Test Connectivity**: Verify network connectivity between services
4. **Monitor Resources**: Check CPU, memory, and disk usage
5. **Inspect Kafka Topics**: Use Kafka tools to inspect message flow
6. **Review Database State**: Examine database for data integrity issues
7. **Check OAuth2 Tokens**: Verify token validity and permissions
## Service-specific documentation
For detailed configuration of individual services, refer to:
### Core platform components
### AI Platform services
FlowX.AI 5.1 introduces the AI Platform, a comprehensive suite of AI services that provide intelligent automation capabilities across the entire application lifecycle.
### Plugins & extensions
### Integration & data services
### User interface & designer
### Infrastructure & extensions
### Observability & configuration
# SpiceDB setup
Source: https://docs.flowx.ai/5.1/setup-guides/spicedb
This guide covers the step-by-step installation and configuration of SpiceDB for FlowX deployments, including operator installation, database setup, and service integration.
## Overview
SpiceDB is a database for managing authorization policies. It is used to store and manage the authorization policies for the Authorization Service in FlowX 5.0's multi-tenant architecture.
For more information about SpiceDB, see the [SpiceDB documentation](https://authzed.com/docs/spicedb/getting-started/discovering-spicedb).
## Prerequisites
* Kubernetes cluster with admin access
* PostgreSQL database server
* Network connectivity between SpiceDB and FlowX services
* FlowX 5.0+ platform components that will integrate with SpiceDB
* CAS client library configuration in all FlowX services
* Proper secret management for authentication
## FlowX customizations
The FlowX platform includes several customizations to the standard SpiceDB deployment:
* **Namespace-restricted operator**: Uses Role and RoleBinding instead of ClusterRole and ClusterRoleBinding for enhanced security
* **Platform Health Monitoring**: Automatic health check configuration for FlowX platform monitoring (`/healthz` endpoint on port 8443)
* **Migration Job Optimization**: Configured retry limits (3 attempts) and timeouts (30 minutes) for schema migrations
* **Resource Optimization**: Production-ready resource requests and limits based on real-world usage
* **Service Annotations**: FlowX-specific service annotations for platform integration
These customizations ensure SpiceDB operates securely within the FlowX platform architecture and integrates properly with platform monitoring and status systems.
## Installation steps
### Step 1: Install SpiceDB operator
The FlowX platform uses a customized SpiceDB operator that operates within a specific namespace, using Role and RoleBinding instead of ClusterRole and ClusterRoleBinding for enhanced security and isolation.
Install the namespace-restricted SpiceDB operator using Helm:
```bash theme={"system"}
# Install the operator in the same namespace as FlowX
helm install spicedb-operator your-org/spicedb-operator \
--namespace your-flowx-namespace \
--create-namespace \
--version
```
The operator must be installed in the same namespace as FlowX because it operates with namespace-scoped permissions and cannot access other namespaces.
**Example values.yaml for the operator:**
```yaml theme={"system"}
# SpiceDB Operator Configuration
replicaCount: 1
serviceAccount:
create: true
name: "spicedb-operator"
# Resource limits
resources:
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 100m
memory: 128Mi
```
This operator is restricted to operate within a single namespace (the namespace where it is installed) and does not require cluster-wide permissions. The operator automatically watches the namespace where it is deployed.
Verify the operator is running:
```bash theme={"system"}
kubectl get pods -l app.kubernetes.io/name=spicedb-operator -n your-flowx-namespace
```
The operator pod will have a name in the format: `spicedb-operator--` (e.g., `spicedb-operator-dd8f97d95-s78fc`)
### Step 2: Create SpiceDB database
Create a dedicated PostgreSQL database and user for SpiceDB:
```sql theme={"system"}
-- Connect to PostgreSQL as admin user
CREATE DATABASE spicedb;
CREATE USER spicedb_user WITH PASSWORD 'your-secure-password';
GRANT ALL PRIVILEGES ON DATABASE spicedb TO spicedb_user;
```
SpiceDB requires a dedicated PostgreSQL database. Do not share with other FlowX services.
### Step 3: Create Kubernetes Secret
Create the `spicedb` secret with the required credentials:
```yaml theme={"system"}
apiVersion: v1
kind: Secret
metadata:
name: spicedb
type: Opaque
data:
datastore_uri:
preshared_key:
```
The secret should contain:
```bash theme={"system"}
# Raw values (encode these in base64 for the secret)
datastore_uri='postgres://USERNAME:PASSWORD@postgresql:5432/spicedb?sslmode=disable'
preshared_key='REPLACEME'
```
Generate a secure preshared key using: `openssl rand -base64 32`
### Step 4: Deploy SpiceDB cluster
The FlowX platform uses a customized SpiceDB cluster chart that includes additional patches for platform status monitoring, health checks, and optimized resource configurations. The deployment uses a dedicated `spicedb` service account for proper RBAC permissions.
Install the SpiceDB cluster using Helm (includes platform-status patches):
```bash theme={"system"}
# Install the cluster (using your organization's Helm repository)
helm install spicedb your-org/spicedb-cluster \
--namespace your-namespace \
--version \
--set version= \
--set secretName=spicedb
```
**Custom values.yaml (optional):**
```yaml theme={"system"}
# FlowX SpiceDB Cluster Configuration
version:
logLevel: debug
datastoreEngine: postgres
httpEnabled: true
secretName: spicedb
replicas: 2
# Optimized resource requests (matches production)
resources:
requests:
cpu: 500m
memory: 512Mi
limits:
cpu: "1"
memory: 1Gi
```
**FlowX Platform Integration**: The FlowX SpiceDB chart automatically configures health monitoring annotations on the Service resource. These annotations are hardcoded in the chart and include:
* `flowx.ai/health: "true"`
* `flowx.ai/health-path: "/healthz"`
* `flowx.ai/health-port: "8443"`
No additional configuration is needed for platform health monitoring.
For production deployments, ensure `replicas: 2` or higher for high availability. The FlowX chart includes automatic health monitoring and migration job configurations.
### Step 5: Update FlowX services
The following services need a cas-lib configuration:
* authorization-service
* application-manager
* authorization-system
* cms-core
* data-sync
* document-plugin
* integration-designer
* notification-plugin
* process-engine
* runtime-manager
* task-management-plugin
Configure FlowX services to connect to SpiceDB. The following configuration values are already set by default in FlowX:
```bash theme={"system"}
FLOWX_SPICEDB_HOST: spicedb #default value
FLOWX_SPICEDB_PORT: 50051 #default value
```
**required configuration**: Add the SpiceDB token to your FlowX services:
```bash theme={"system"}
FLOWX_SPICEDB_TOKEN: REPLACEME
```
#### Helm values configuration
Add the token reference to your Helm values using `extraEnvVarsMultipleSecretsCustomKeys`:
```yaml theme={"system"}
extraEnvVarsMultipleSecretsCustomKeys:
- name: spicedb
secrets:
FLOWX_SPICEDB_TOKEN: preshared_key
```
This configuration tells Helm to:
1. Look for the existing Kubernetes Secret named `spicedb` (created in Step 3)
2. Take the value from the `preshared_key` key in that secret
3. Mount it as environment variable `FLOWX_SPICEDB_TOKEN` in FlowX service pods
**Token Synchronization**: The `preshared_key` value in the SpiceDB secret must match the `FLOWX_SPICEDB_TOKEN` in all FlowX microservices.
## Verification
Verify your SpiceDB deployment:
Ensure SpiceDB pods are running:
```bash theme={"system"}
kubectl get pods -l app.kubernetes.io/name=spicedb
```
Verify SpiceDB is accessible on port 50051:
```bash theme={"system"}
kubectl port-forward svc/spicedb 50051:50051
# Test connection from another terminal
grpcurl -plaintext localhost:50051 list
```
Review FlowX service logs for successful SpiceDB connection:
```bash theme={"system"}
kubectl logs -l app=authorization-system | grep -i spicedb
```
## Configuration reference
### Required environment variables
| Variable | Required | Description | Default Value | Notes |
| ---------------------------- | -------- | -------------------------------------- | ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
| `SPICEDB_DATASTORE_ENGINE` | ✅ | Database engine type | `postgres` | Only PostgreSQL is supported in FlowX |
| `SPICEDB_DATASTORE_CONN_URI` | ✅ | PostgreSQL connection string | `postgres://postgres:password@postgresql:5432/spicedb?sslmode=disable` | Use Kubernetes Secret - include `sslmode=disable` for internal cluster communication |
| `SPICEDB_GRPC_PRESHARED_KEY` | ✅ | Pre-shared key for gRPC authentication | `your-secure-key-here` | **This becomes `FLOWX_SPICEDB_TOKEN` in FlowX services** |
### Optional configuration
| Variable | Required | Description | Default Value | Notes |
| ---------------------------------- | -------- | ----------------------------------------- | ------------- | ---------------------------------------------------------- |
| `SPICEDB_DISPATCH_CLUSTER_ENABLED` | ⚠️ | Enable cluster mode for multiple replicas | `true` | Required for production deployments with multiple replicas |
| `SPICEDB_LOG_LEVEL` | ⚠️ | Logging verbosity level | `debug` | Use `debug` for troubleshooting, `info` for production |
## Customer-specific configuration
**Required Customization**: These values must be updated for each deployment environment.
* **Database Connection**: Update `datastore_uri` with your PostgreSQL credentials and hostname
* **Security Token**: Generate a unique `preshared_key` for your deployment
# Task management setup
Source: https://docs.flowx.ai/5.1/setup-guides/task-management-plugin-setup
Configure and deploy the Task Management plugin.
The Task Management plugin is available as a Docker image and serves as a dedicated microservice within the FlowX platform ecosystem.
## Dependencies
Before setting up the plugin, ensure you have the following dependencies:
* A [MongoDB](https://www.mongodb.com/) database for task storage
* A connection to the RuntimeDB for operational data
* Access to the database used by the FlowX Engine
* Connection to the Kafka instance used by the FlowX Engine
* A [Redis](https://redis.io/) instance for caching and performance optimization
While many configuration properties come pre-configured, several environment variables must be explicitly set for proper functionality.
## Authorization configuration & access roles
Configure the following variables to connect to your identity management platform:
| Environment Variable | Description | Default Value |
| --------------------------------------------------- | ------------------------------------------------ | --------------------------------- |
| `SECURITY_OAUTH2_BASESERVERURL` | Base URL of your OpenID Connect provider | - |
| `SECURITY_OAUTH2_CLIENT_CLIENTID` | Client ID for authentication | - |
| `SECURITY_OAUTH2_CLIENT_CLIENTSECRET` | Client secret for authentication | - |
| `SECURITY_OAUTH2_REALM` | Security realm for the application | - |
| `SECURITY_OAUTH2_SERVICEACCOUNT_ADMIN_CLIENTID` | Service account client ID for process initiation | `flowx-task-management-plugin-sa` |
| `SECURITY_OAUTH2_SERVICEACCOUNT_ADMIN_CLIENTSECRET` | Service account client secret | - |
A dedicated service account must be configured in your OpenID provider to allow the Task Management microservice to access realm-specific data and perform operations.
### OpenID connect settings
The Task Management plugin supports Microsoft Entra ID as an OpenID provider.
| Environment Variable | Description | Default Value |
| -------------------------- | ----------------------------------- | ------------------------------------------------- |
| `OPENID_PROVIDER` | Type of OpenID provider | `keycloak` (possible values: `keycloak`, `entra`) |
| `OPENID_ENTRA_TENANTID` | Tenant ID for Microsoft Entra ID | - |
| `OPENID_ENTRA_PRINCIPALID` | Principal ID for Microsoft Entra ID | - |
| `OPENID_ENTRA_GRAPHSCOPE` | Graph scope for Microsoft Entra ID | `https://graph.microsoft.com/.default` |
For more detailed information about configuring the service account:
### FlowX Engine datasource configuration
The service needs access to process instance data from the engine database. Configure these connection parameters:
| Environment Variable | Description | Default Value |
| ---------------------------- | -------------------------------- | ------------------------------------------------ |
| `SPRING_DATASOURCE_URL` | JDBC URL for the engine database | `jdbc:postgresql://onboardingdb:5432/onboarding` |
| `SPRING_DATASOURCE_USERNAME` | Database username | `postgres` |
| `SPRING_DATASOURCE_PASSWORD` | Database password | `password` |
### MongoDB configuration
Configure access to the primary MongoDB instance:
| Environment Variable | Description | Default Value |
| ------------------------- | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `SPRING_DATA_MONGODB_URI` | MongoDB connection URI | `mongodb://${DB_USERNAME}:${DB_PASSWORD}@mongodb-0.mongodb-headless,mongodb-1.mongodb-headless,mongodb-arbiter-0.mongodb-arbiter-headless:27017/task-management-plugin` |
| `DB_USERNAME` | MongoDB username | `task-management-plugin` |
| `DB_PASSWORD` | MongoDB password | `password` |
Task Manager requires a runtime connection to function correctly. Starting the service without a configured and active runtime MongoDB connection is not supported.
### Runtime MongoDB configuration
Task Manager requires a runtime connection to function correctly. Starting the service without a configured and active runtime MongoDB connection is not supported.
Enable the Runtime MongoDB connection:
| Environment Variable | Description | Default Value |
| ------------------------------------- | ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `SPRING_DATA_MONGODB_RUNTIME_ENABLED` | Enable runtime MongoDB connection | `true` |
| `SPRING_DATA_MONGODB_RUNTIME_URI` | URI for connecting to MongoDB Runtime | `mongodb://${RUNTIME_DB_USERNAME}:${DB_PASSWORD}@mongodb-0.mongodb-headless,mongodb-1.mongodb-headless,mongodb-arbiter-0.mongodb-arbiter-headless:27017/app-runtime?retryWrites=false` |
| `RUNTIME_DB_USERNAME` | Username for runtime database | `app-runtime` |
| `RUNTIME_DB_PASSWORD` | Password for runtime database | `password` |
### Redis configuration
Configure the Redis cache with these parameters:
Configure the Redis cache with these parameters:
| Environment Variable | Description | Default Value |
| ----------------------- | -------------------------------------------- | ------------- |
| `SPRING_REDIS_HOST` | Redis server hostname or IP address | `localhost` |
| `SPRING_REDIS_PORT` | Redis server port | `6379` |
| `SPRING_REDIS_PASSWORD` | Authentication password for Redis | `password` |
| `REDIS_TTL` | Time-to-live for cached items (milliseconds) | `5000000` |
## Kafka configuration
Configure the Kafka integration using these environment variables:
### Core Kafka settings
| Environment Variable | Description | Default Value |
| ------------------------------------ | ------------------------------------------------------- | -------------------------------- |
| `SPRING_KAFKA_BOOTSTRAPSERVERS` | Address of the Kafka server(s) | `localhost:9092` |
| `SPRING_KAFKA_SECURITYPROTOCOL` | Security protocol for Kafka connections | `PLAINTEXT` |
| `SPRING_KAFKA_CONSUMER_GROUPID` | Consumer group identifier | `kafka-task-management-consumer` |
| `KAFKA_MESSAGE_MAX_BYTES` | Maximum message size (bytes) | `52428800` (50MB) |
| `KAFKA_AUTHEXCEPTIONRETRYINTERVAL` | Retry interval after authorization exceptions (seconds) | `10` |
| `KAFKA_CONSUMER_THREADS` | Number of consumer threads | `3` |
| `KAFKA_CONSUMER_EXCLUDEUSERSTHREADS` | Number of threads for processing user exclusion events | `3` |
### Topic naming configuration
| Environment Variable | Description | Default Value |
| -------------------------------- | ----------------------------------- | ------------- |
| `KAFKA_TOPIC_NAMING_SEPARATOR` | Primary separator for topic names | `.` |
| `KAFKA_TOPIC_NAMING_SEPARATOR2` | Secondary separator for topic names | `-` |
| `KAFKA_TOPIC_NAMING_PACKAGE` | Package prefix for topic names | `ai.flowx.` |
| `KAFKA_TOPIC_NAMING_ENVIRONMENT` | Environment segment for topic names | ` ` |
| `KAFKA_TOPIC_NAMING_VERSION` | Version suffix for topic names | `.v1` |
### Kafka topics
#### Process management topics
| Environment Variable | Description | Default Value |
| ---------------------------------------- | -------------------------------------------------- | ---------------------------------------------- |
| `KAFKA_TOPIC_PROCESS_START_OUT` | Topic for running hooks | `ai.flowx.dev.core.trigger.start.process.v1` |
| `KAFKA_TOPIC_PROCESS_OPERATIONS_OUT` | Topic for task operations (assign, unassign, etc.) | `ai.flowx.dev.core.trigger.operation.v1` |
| `KAFKA_TOPIC_PROCESS_OPERATIONS_BULKOUT` | Topic for bulk operations on tasks | `ai.flowx.dev.core.trigger.operations.bulk.v1` |
#### Scheduling topics
| Environment Variable | Description | Default Value |
| --------------------------------------- | ------------------------------------------------ | ----------------------------------------------- |
| `KAFKA_TOPIC_PROCESS_SCHEDULE_IN` | Topic for receiving scheduler messages for hooks | `ai.flowx.dev.plugin.tasks.trigger.run.hook.v1` |
| `KAFKA_TOPIC_PROCESS_SCHEDULE_OUT_SET` | Topic for setting schedules | `ai.flowx.dev.core.trigger.set.schedule.v1` |
| `KAFKA_TOPIC_PROCESS_SCHEDULE_OUT_STOP` | Topic for stopping schedules | `ai.flowx.dev.core.trigger.stop.schedule.v1` |
#### User management topics
| Environment Variable | Description | Default Value |
| -------------------------------------- | ------------------------------- | ---------------------------------------------------- |
| `KAFKA_TOPIC_EXCLUDEUSERS_SCHEDULE_IN` | Topic for user exclusion events | `ai.flowx.dev.plugin.tasks.trigger.exclude.users.v1` |
#### Task operations topics
| Environment Variable | Description | Default Value |
| --------------------- | ----------------------------------------- | ------------------------------------------------ |
| `KAFKA_TOPIC_TASK_IN` | Topic for incoming task creation messages | `ai.flowx.dev.plugin.tasks.trigger.save.task.v1` |
#### Events and integration topics
| Environment Variable | Description | Default Value |
| --------------------------------------- | --------------------------------------- | -------------------------------------------------------------------- |
| `KAFKA_TOPIC_EVENTSGATEWAY_OUT_MESSAGE` | Topic for Events Gateway messages | `ai.flowx.dev.eventsgateway.receive.taskmanager.commands.message.v1` |
| `KAFKA_TOPIC_RESOURCESUSAGES_REFRESH` | Topic for resource usage refresh events | `ai.flowx.dev.application-version.resources-usages.refresh.v1` |
The Engine listens for messages on topics with specific naming patterns. Ensure you use the correct outgoing topic names when configuring the Task Management plugin to maintain proper communication with the engine.
## CAS lib configuration
| Environment Variable | Description | Default Value |
| --------------------- | ---------------------------- | --------------- |
| `FLOWX_SPICEDB_HOST` | SpiceDB server hostname | `spicedb` |
| `FLOWX_SPICEDB_PORT` | SpiceDB server port | `50051` |
| `FLOWX_SPICEDB_TOKEN` | SpiceDB authentication token | `spicedb-token` |
## Logging configuration
Control logging verbosity with these environment variables:
| Environment Variable | Description | Default Value |
| ---------------------------- | ---------------------------------- | ------------- |
| `LOGGING_LEVEL_ROOT` | Root Spring Boot microservice logs | - |
| `LOGGING_LEVEL_APP` | Application-level logs | `DEBUG` |
| `LOGGING_LEVEL_MONGO_DRIVER` | MongoDB driver logs | `INFO` |
| `LOGGING_LEVEL_REDIS` | Redis/Lettuce client log level | `OFF` |
## Filtering feature
| Environment Variable | Description |
| ------------------------------------- | ----------------------------------------------------- |
| `FLOWX_ALLOW_USERNAME_SEARCH_PARTIAL` | Enables filtering possible assignees by partial names |
## Scheduled jobs
Configure scheduled maintenance jobs:
| Environment Variable | Description | Default Value |
| --------------------------------------------- | -------------------------------------- | -------------------------------- |
| `SCHEDULER_USERSCACHESCLEANUP_CRONEXPRESSION` | Cron expression for user cache cleanup | `0 0 0 * *?` (daily at midnight) |
### Resource usage monitoring
The plugin includes a resource usage monitoring feature that can be configured:
| Environment Variable | Description | Default Value |
| -------------------------------------------------------------------------- | ------------------------------------------------------ | ------------------------------------- |
| `FLOWX_LIB_RESOURCESUSAGES_ENABLED` | Enable resource usage tracking | `true` |
| `FLOWX_LIB_RESOURCESUSAGES_REFRESHLISTENER_ENABLED` | Enable refresh listener | `true` |
| `FLOWX_LIB_RESOURCESUSAGES_REFRESHLISTENER_COLLECTOR_THREADCOUNT` | Number of threads for resource collection | `5` |
| `FLOWX_LIB_RESOURCESUSAGES_REFRESHLISTENER_COLLECTOR_MAXBATCHSIZE` | Maximum batch size for collection | `1000` |
| `FLOWX_LIB_RESOURCESUSAGES_KAFKA_CONSUMER_GROUPID_RESOURCESUSAGES_REFRESH` | Consumer group for resource usage refresh events | `taskMgmtResourcesUsagesRefreshGroup` |
| `FLOWX_LIB_RESOURCESUSAGES_KAFKA_CONSUMER_THREADS_RESOURCESUSAGES_REFRESH` | Number of threads for processing resource usage events | `3` |
### Database migration
The Task Management plugin uses Mongock for MongoDB migrations:
| Environment Variable | Description | Default Value |
| ------------------------------- | ---------------------------------------- | ----------------------------------------- |
| `MONGOCK_CHANGELOGSSCANPACKAGE` | Package to scan for database change logs | `ai.flowx.task.management.config.mongock` |
# Deployment guidelines v3.0
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.0.0-february-2023/deployment-guidelines-v3.0.0
Do not forget, when upgrading to a new platform version, always check and make sure your installed component versions match the versions stated in the release. To do that, go to **FLOWX.AI Designer > Platform Status**.
After updating to **3.0.0** FLOWX.AI release, importing old processes definitions in the new platform release is not possible (available for exports from **\< 3.0.0** releases).

## Component versions
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* In future FlowX.AI releases, the `paperflow-web-components` library will be deprecated (some old components still can be found inside this lib). Instead, the new components can be found in `@flowx/ui-toolkit@3.0`.
| :ballot\_box\_with\_check: | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 | 2.9.0 | 2.8.1 | 2.8.0 | 2.7.0 | 2.6.0 | 2.5.0 | 2.4.0 | 2.3.0 | 2.2.0 | 2.1.0 |
| ------------------------------ | --------- | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | --------- |
| **Process engine** | **2.0.7** | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 | 0.4.49 | 0.4.44 | 0.4.42 | 0.4.42 | 0.4.36 | 0.4.29 | 0.4.22 | 0.4.21 | 0.4.18 | 0.4.13 |
| **Admin** | **2.0.8** | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 | 0.3.55 | 0.3.47 | 0.3.43 | 0.3.40 | 0.3.36 | 0.3.34 | 0.3.29 | 0.3.23 | 0.3.21 | 0.3.13 |
| **Designer** | **3.2.1** | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 | 2.14.4 | 2.11.2 |
| **@flowx/ui-sdk** | **3.2.1** | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.2.1** | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | |
| **@flowx/ui-theme** | **3.2.1** | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **flowx-process-renderer** | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 | 2.14.4 | 2.11.2 |
| **paperflow-web-components** | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 | 0.2.10 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.5 | 0.2.4 |
| **CMS Core** | **1.0.2** | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.20 | 0.2.20 | 0.2.18 | 0.2.17 | 0.2.17 |
| **Scheduler Core** | **1.0.1** | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.24 | 0.0.24 | 0.0.23 | 0.0.23 | 0.0.23 |
| **Notification Plugin** | **2.0.1** | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 | 1.0.198 | 1.0.198 | 1.0.197 | 1.0.194 | 1.0.194 | 1.0.191 | 1.0.191 | 1.0.190 | 1.0.190 | 1.0.186-1 |
| **Document Plugin** | **2.0.2** | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 | 1.0.42 | 1.0.41 | 1.0.38 | 1.0.37 | 1.0.37 | 1.0.35 | 1.0.35 | 1.0.31 | 1.0.31 | 1.0.30 |
| **OCR Plugin** | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.0.109 | 0.0.109 | 0.0.109 |
| **License Core** | **1.0.1** | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.19 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.15 | 0.1.15 | 0.1.13 | 0.1.13 | 0.1.12 |
| **Customer Management Plugin** | **0.2.1** | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.20 | 0.1.20 | 0.1.18 | 0.1.18 | 0.1.18 |
| **Task Management Plugin** | **1.0.1** | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 | 0.0.28 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.22 | 0.0.22 | 0.0.21 | 0.0.21 | 0.0.16 |
| **Data search** | **0.1.3** | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Audit Core** | **1.0.1** | 0.0.8 | 0.0.5 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Reporting** | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **advancing-controller** | **0.1.2** | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **iOS renderer** | **2.0.0** | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | **2.0.1** | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
### 3.0.0 Minimum Recommended Versions
| FLOWX.AI Platform Version | Component name | Minimum recommended version (tested versions) |
| ------------------------- | ---------------------------- | --------------------------------------------- |
| 3.0 | Keycloak | 18.0.x |
| 3.0 | Kafka | 3.2.0 |
| 3.0 | PostgreSQL | 14.3.0 |
| 3.0 | MongoDB | 5.0.8 |
| 3.0 | Redis | 6.2.6 |
| 3.0 | Elasticsearch | 7.17 |
| 3.0 | S3 (Min.IO) / minio-operator | 2022-05-26T05-48-41Z / 4.5.4 |
| 3.0 | OracleDB | 19.8.0.0.0 |
| 3.0 | Angular (Web SDK) | 14.2.2 |
FlowX.AI supports any version of the third-party components listed as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://support.flowx.ai/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
## Additional configuration
### Updates
New updates have been made to the backend and designer configurations. The following changes have been made:
* **Backend**: The Java container base image has been updated from **11.0.15** to **11.0.17\_8**
* **Designer**: The Nginx container base image has been updated from **1.19** to **1.23.2**
### Redis configuration
```
disableCommands:
- CONFIG
# enable keyspace notif as CONFIG is disabled
notify-keyspace-events KEA
```
The above command is enabling key space notifications in Redis by setting the `notify-keyspace-events` configuration parameter to "KEA". The `notify-keyspace-events` configuration parameter is used to enable notifications for certain events that occur in the Redis key space.
The reason for enabling this as CONFIG is disabled is that, in this configuration, the CONFIG command is disabled, which means that the Redis server will not accept the command to change its configuration. Therefore, this line is allowing Redis to notify events in key space.
### Theming
There are two important items that need to be taken in consideration with it comes to theming:
* [`theme_components.json`](#theme_componentsjson)
* [`theme_tokens.json`](#theme_tokensjson)
#### `theme_components.json`
This JSON object is a collection of all components and their properties. Each element represents a different design element (e.g. "accordion","card", etc.).
Each element object has two main properties:
* `genericProperties` - is an array of objects that define properties such as background color, padding, and font styles for the element
* `modifiers` - is also an array of objects, each representing a different modification of the element's properties, each modifier object has a `name` property and a `properties` array, which contains more objects that define the modified properties of the element.
#### Example
```json theme={"system"}
{
"elementName": "card",
"genericProperties": [
{
"name": "backgroundColor",
"reference": "color@shades-0",
"value": null,
"unit": null
},
{
"name": "color",
"reference": "color@neutrals-900",
"value": null,
"unit": null
},
{
"name": "borderRadius",
"reference": null,
"value": "12",
"unit": "px"
},
{
"name": "borderWidth",
"reference": null,
"value": "1",
"unit": "px"
},
{
"name": "paddingTop",
"reference": null,
"value": "16",
"unit": "px"
},
{
"name": "paddingRight",
"reference": null,
"value": "16",
"unit": "px"
},
{
"name": "paddingBottom",
"reference": null,
"value": "16",
"unit": "px"
},
{
"name": "paddingLeft",
"reference": null,
"value": "16",
"unit": "px"
},
{
"name": "titleFont",
"reference": "typography@Heading/H6/Semi Bold",
"value": null,
"unit": null
},
{
"name": "subtitleFont",
"reference": "typography@Paragraph/P2/Regular",
"value": null,
"unit": null
},
{
"name": "contentFont",
"reference": "typography@Paragraph/P1/Regular",
"value": null,
"unit": null
},
{
"name": "gap",
"reference": null,
"value": "24",
"unit": "px"
}
],
"modifiers": [
{
"name": "border",
"properties": [
{
"name": "borderColor",
"reference": "color@neutrals-300",
"value": null,
"unit": null
}
]
},
{
"name": "raised",
"properties": [
{
"name": "boxShadow",
"reference": "dropShadow@m",
"value": null,
"unit": null
}
]
},
{
"name": "ios",
"properties": [
{
"name": "titleFont",
"reference": "typography@Heading/H6/Semi Bold",
"value": null,
"unit": null
},
{
"name": "subtitleFont",
"reference": "typography@Paragraph/P2/Regular",
"value": null,
"unit": null
},
{
"name": "gap",
"reference": null,
"value": "16",
"unit": "px"
}
]
},
{
"name": "android",
"properties": [
{
"name": "titleFont",
"reference": "typography@Heading/H6/Semi Bold",
"value": null,
"unit": null
},
{
"name": "subtitleFont",
"reference": "typography@Paragraph/P2/Regular",
"value": null,
"unit": null
},
{
"name": "gap",
"reference": null,
"value": "16",
"unit": "px"
}
]
}
]
}
```
#### `theme_tokens.json`
This JSON object is a collection of color tokens for a design system. The object is structured with a "colors" object that contains multiple color objects, each representing a different color category (e.g. "primary", "secondary", "success", "warning", "error" and "neutrals").
Each color object has properties such as "name", "main" and "shades". The "name" property contains the name of the color category, the "main" property contains the main shade of the color, the "shades" is an object with key-value pairs that represent different shades of the color.
Each key is a number representing the shade level, and each value is a hex code representing the color at that level.
#### Example
```typescript theme={"system"}
// COLORS
[
{
"name": "primary",
"shades": [
{"tint": 50, "hex": "#aabbcc"},
{"tint": 100, "hex": "#aabbcc"},
...
],
"main": 500
},
{
"name": "secondary",
"shades": [
{"tint": 50, "hex": "#aabbcc"},
{"tint": 100, "hex": "#aabbcc"},
...
],
"main": 500
}
]
interface ColorShade {
tint: number,
hex: string
}
interface Color {
name: string,
shades: ColorShade[]
}
```
For more information on how to use the web renderer, check the following section:
[Using the Angular Renderer - Theming](../../docs/3.0.0/platform-deep-dive/core-components/renderer-sdks/angular-renderer)
### Task management plugin
* `FLOWX_ALLOW_USERNAME_SEARCH_PARTIAL` - new environment variable added to filter users by partial username (default value: true)
[Task management plugin setup](../../docs/platform-deep-dive/plugins/plugins-setup-guide/task-management-plugin-setup)
### Data search
* `SPRING_ELASTICSEARCH_INDEX_SETTINGS_NAME` - must correspond to the index configured on `process-engine`
[Data search setup](../../docs/platform-setup-guides/search-data-service-setup-guide)
# v3.0.0 February 2023
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.0.0-february-2023/v3.0.0-february-2023
We are excited to announce the release of FLOWX.AI 3.0 🔥, featuring new and improved features that will elevate your workflow experience. From the new theming options to enhanced functionality, this update will take your productivity to the next level. 🚀
## **New features**
* **Theming:** FLOWX.AI 3.0 introduces a new theming feature, allowing users to personalize all components on both web and mobile. The new theming feature provides a better user experience and offers more flexibility in using the platform.
**Notes for FDEs Post-Migration**:
To ensure the proper functionality of the migrated styles, please follow check the post-migration steps, available [**here**](../../docs/building-blocks/ui-designer/render-ui-designer-changelog).
[Additional configuration](./deployment-guidelines-v3.0.0#theming)
* **Generic JSONs for components**: JSONs for components have been added.
* **UI Designer**: A refreshed new interface for UI Designer.

* **UI Components Redesign**: Redesigned UI components.
[UI components](../../docs/building-blocks/ui-designer/ui-component-types)
Below you will find a Storybook which will demonstrate how components behave under different states, props, and conditions:
[Storybook](https://storybook.demo.flowxai.dev/)
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of \**FlowX 4.0*, the `paperflow-web-components` library will be deprecated. Instead, the new components can be found in `@flowx/ui-toolkit`.
For more information, check the section below:
[Using the Angular Renderer](../../docs/3.0.0/platform-deep-dive/core-components/renderer-sdks/angular-renderer)
## **Fixed**
* Fixed a bug in the FLOWX.AI Designer where the datepicker component's default value overlapped with the field placeholder.
* Fixed an issue in FLOWX.AI Designer where users could not copy/paste nodes that had UI actions without parameters.
* Forwarding external notifications is now possible with the Notifications plugin.
* Fixed an issue where the GET enumerations list (CMS) displayed an error message about memory exceeding.
## **Changed**
### UI Designer
* Indicators → deleted **Info Tooltip** and **Hint** UI components
* added Helpertext (to replace **Info tooltip** and **Hint**) - this new element can be found on [Form elements](../../docs/building-blocks/ui-designer/ui-component-types/form-elements) and provides additional information about each element, which can be hidden within an infopoint

### Documents plugin
* Updated document plugin file download path to use file UUID (string) instead of a numeric file ID.
### Task management plugin
* Improved filtering feature, now is possible to filter users by partial names.
[Additional configuration here](./deployment-guidelines-v3.0.0#task-management-plugin)
### FLOWX.AI Designer 👩🏭
#### Audit log
* The audit log now displays the name instead of identifiers for process definition, node, action, and swimlanes entities.

[Audit log](../../docs/platform-deep-dive/core-components/core-extensions/audit)
#### Sensitive data
* Sensitive data tab has been removed from the process definition settings and a new Sensitive data switch has been added in the Data model tab.

* Sensitive data migration is required when cloning old processes (sensitive data is deleted when cloning as it is not compatible with the new process version). Users must add the data model and keys for the new process.
[Data model](../../docs/building-blocks/process/process-definition#data-model)
#### Platform status report
* Added a new option to export the Platform Status, which will download a JSON file containing the state details of all components, enabling users to communicate the state of their instance to the support team.
* Added more data to the platform status report.

#### Kafka send/receive nodes
* New icons for Kafka send/receive nodes were added.

### Process Designer
#### Process Designer keyboard commands
* Added new keyboard commands for deleting, copying, and renaming nodes in the Process Designer:
* `backspace` - delete one or several selected nodes
* `Ctrl/Cmd + C` - copy one or several selected nodes
* `R` - rename a node
### FLOWX.AI Engine 🚂
#### Kafka
* Standardized Kafka topics and naming pattern in FLOWX.AI Engine, reducing confusion and errors by allowing for configuration only for the package name, environment name, and version, without having to list all topic names.
#### Performance
* Databases performance improvements, including clear caching (clear cache must be performed per process for process definitions).
For stages, integrations, and generic parameters, clear cache is performed globally, when it comes to process definitions, clear cache must be done per process.
### License model
* In the license model, another label/alias can be used instead of PII.
### Data search
* The ElasticSearch index for data search is now configurable. More info on:
[Deployment guidelines](./deployment-guidelines-v3.0.0#data-search)
## **UX/UI Improvements**
* The process instance search button has been removed, and search is now done automatically.
* Swimlanes interaction has been improved.
* It is possible now to select and delete multiple nodes in Process Designer.
Additional information regarding the deployment for v3.0 is available below:
## **Security**
* Improved security for Redis configuration.
[Redis configuration](./deployment-guidelines-v3.0.0#redis-configuration)
## **Known issues**
### Reporting
* Reporting plugin is not compatible with Oracle DBs.
[Deployment guidelines v3.0](./deployment-guidelines-v3.0.0)
# Deployment guidelines v3.1.0
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.1.0-march-2023/deployment-guidelines-v3.1.0
Do not forget, when upgrading to a new platform version, always check and make sure your installed component versions match the versions stated in the release. To do that, go to **FLOWX.AI Designer > Platform Status**.
After updating to **3.1.0** FLOWX.AI release, importing old processes definitions in the new platform release is not possible (available for exports from **\< 3.1.0** releases).

## Component versions
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FlowX 4.0**, the `paperflow-web-components` library is no longer being maintained. Instead, the new components can be found in `@flowx/ui-toolkit`.
For more information, check [**Using the Angular Renderer**](../../docs/3.1.0/platform-deep-dive/core-components/renderer-sdks/angular-renderer) section.
| :ballot\_box\_with\_check: | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 | 2.9.0 | 2.8.1 | 2.8.0 | 2.7.0 | 2.6.0 | 2.5.0 | 2.4.0 | 2.3.0 | 2.2.0 | 2.1.0 |
| ------------------------------ | ---------- | ------ | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | --------- |
| **Process engine** | **2.1.2** | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 | 0.4.49 | 0.4.44 | 0.4.42 | 0.4.42 | 0.4.36 | 0.4.29 | 0.4.22 | 0.4.21 | 0.4.18 | 0.4.13 |
| **Admin** | **2.1.3** | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 | 0.3.55 | 0.3.47 | 0.3.43 | 0.3.40 | 0.3.36 | 0.3.34 | 0.3.29 | 0.3.23 | 0.3.21 | 0.3.13 |
| **Designer** | **3.15.1** | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 | 2.14.4 | 2.11.2 |
| **@flowx/ui-sdk** | **3.15.1** | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | 2.23.0 | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.15.1** | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.15.1** | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 | 0.2.10 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.5 | 0.2.4 |
| **flowx-process-renderer** | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 | 2.14.4 | 2.11.2 |
| **CMS Core** | **1.0.3** | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.20 | 0.2.20 | 0.2.18 | 0.2.17 | 0.2.17 |
| **Scheduler Core** | **1.0.4** | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.24 | 0.0.24 | 0.0.23 | 0.0.23 | 0.0.23 |
| **Notification Plugin** | **2.0.3** | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 | 1.0.198 | 1.0.198 | 1.0.197 | 1.0.194 | 1.0.194 | 1.0.191 | 1.0.191 | 1.0.190 | 1.0.190 | 1.0.186-1 |
| **Document Plugin** | **2.0.3** | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 | 1.0.42 | 1.0.41 | 1.0.38 | 1.0.37 | 1.0.37 | 1.0.35 | 1.0.35 | 1.0.31 | 1.0.31 | 1.0.30 |
| **OCR Plugin** | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.0.109 | 0.0.109 | 0.0.109 |
| **License Core** | **1.0.2** | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.19 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.15 | 0.1.15 | 0.1.13 | 0.1.13 | 0.1.12 |
| **Customer Management Plugin** | **0.2.3** | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.20 | 0.1.20 | 0.1.18 | 0.1.18 | 0.1.18 |
| **Task Management Plugin** | **1.0.4** | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 | 0.0.28 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.22 | 0.0.22 | 0.0.21 | 0.0.21 | 0.0.16 |
| **Data search** | **0.1.4** | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Audit Core** | **1.0.4** | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Reporting** | **0.0.40** | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **advancing-controller** | **0.1.4** | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **iOS renderer** | **2.0.4** | 2.0.0 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
### 3.1.0 Minimum Recommended Versions
| FLOWX.AI Platform Version | Component name | Minimum recommended version (tested versions) |
| ------------------------- | ---------------------------- | --------------------------------------------- |
| 3.1 | Keycloak | 18.0.x |
| 3.1 | Kafka | 3.2.0 |
| 3.1 | PostgreSQL | 14.3.0 |
| 3.1 | MongoDB | 5.0.8 |
| 3.1 | Redis | 6.2.6 |
| 3.1 | Elasticsearch | 7.17 |
| 3.1 | S3 (Min.IO) / minio-operator | 2022-05-26T05-48-41Z / 4.5.4 |
| 3.1 | OracleDB | 19.8.0.0.0 |
| 3.1 | Angular (Web SDK) | 14.2.2 |
FlowX.AI supports any version of the third-party components listed as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
## Additional configuration
### Process engine - scheduler
Configuration for scheduler to be added on [**Process engine setup**](../../docs/platform-setup-guides/flowx-engine-setup-guide).
```yaml theme={"system"}
scheduler:
processCleanup:
enabled: false
cronExpression: 0 */5 0-5 * * ? #every day during the night, every 5 minutes, at the start of the minute.
batchSize: 1000
masterElection:
cronExpression: 30 */3 * * * ? #master election every 3 minutes
websocket:
namespace:
cronExpression: 0 * * * * *
expireMinutes: 30
```
### Undo/redo
Configuration for undo/redo actions in UI Designer to be added on [**Admin setup**](../../docs/flowx-designer/designer-setup-guide).
```yaml theme={"system"}
flowx:
undo-redo:
ttl: 86400 # in seconds
cleanup:
cronExpression: 0 0 2 ? * * # every day at 2am
days: 2
```
### Advancing controller with Oracle
To use advancing controller with OracleDBs, the following .yml files must be edited, configuring the right environment variables:
#### Advancing controller
If the parallel advancing configuration already exists, resetting the 'advancing' database must be done by executing the SQL command `DROP DATABASE advancing;`. Once the database has been dropped, the Liquibase script will automatically re-enable it.
* `SPRING_JPA_DATABASE` - value: `oracle`
* `SPRING_JPA_DATABASE_PLATFORM`
* `SPRING_DATASOUCE_URL`
* `SPRING_DATASOURCE_DRIVERCLASSNAME`
[Advancing controller setup](../../docs/platform-setup-guides/flowx-engine-setup-guide/advancing-controller-setup-guide)
#### Process engine
* `SPRING_JPA_DATABASE` - value: `oracle`
* `SPRING_JPA_DATABASE_PLATFORM`
* `SPRING_DATASOUCE_URL` - environment variable used to configure a data source URL for a Spring application, it typically contains the JDBC driver name, the server name, port number, and database name
* `SPRING_DATASOURCE_DRIVERCLASSNAME` - environment variable used to set the class name of the JDBC driver that the Spring datasource will use to connect to the database
* `ADVANCING_DATASOURCE_DRIVERCLASSNAME`
* `ADVANCING_DATASOURCE_URL`
* `ADVANCING_DATASOURCE_JDBC_URL`
[Process engine setup](../../docs/platform-setup-guides/flowx-engine-setup-guide)
# v3.1.0 March 2023
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.1.0-march-2023/v3.1.0-march-2023
Drumroll please... 🥁 We are excited to announce **FLOWX.AI 3.1** release 🔥.

So, what are you waiting for? Grab a snack, sit back, and get ready to explore the newest version of **FLOWX.AI**.
## **New features** 🆕
### UI Designer ✍️
#### Undo/redo actions in UI Designer
The latest update now allows users to easily undo or redo any actions they perform within the UI Designer. This includes tasks such as dragging, dropping, or deleting elements from the preview section, as well as adjusting settings within the styling and settings panel.
To undo or redo an action, users can simply click the corresponding icons in the UI Designer toolbar, or use the keyboard commands (undo: Cmd/Ctrl + Z, redo: Cmd/Ctrl + Shift + Z) for even quicker access. This new functionality provides users with greater control and flexibility, allowing them to easily make changes and adjustments without fear of losing progress or making mistakes.

[Deployment guidelines v3.1](./deployment-guidelines-v3.1.0#undoredo)
#### New UI element: file preview
We are excited to announce the addition of a new ready-made UI component. This new component allows users to easily display previews of documents within their designs, whether the documents are uploaded, generated during a process, or static.
With this new feature, users can create more dynamic and interactive designs that incorporate real-time document previews.

[File preview](../../docs/building-blocks/ui-designer/ui-component-types/file-preview)
### Process designer
#### Generate data model
A data model can be generated using data values from a [process instance](../../docs/building-blocks/process/active-process/process-instance). This can be done by either merging the data model with an existing one or replacing it entirely.

[Data model](../../docs/building-blocks/process/process-definition#data-model)
## **Fixed** 🔧
* Fixed an issue where [Engine](../../docs/platform-deep-dive/core-components/flowx-engine) and [Advancing controller](../../docs/platform-deep-dive/core-components/flowx-engine#advancing-controller) should be restarted if the advancing controller's database is down for a couple of minutes.
* Fixed an issue where image preview is not displayed.
* Fixed an issue where `GET child enumerations` request is not using the correct version.
* Fixed an issue where the [scheduler](../../docs/platform-deep-dive/core-components/core-extensions/scheduler) was sending messages multiple times.
## **Changed** 🛠️
### FLOWX.AI Engine 🚂
* [Advancing controller](../../docs/platform-deep-dive/core-components/flowx-engine#advancing-controller) now supports OracleDBs
[Deployment guidelines v3.1](deployment-guidelines-v3.1.0#advancing-controller-with-oracle)
### UI Designer ✍️
UI Designer improvements:
* You can now select enumeration data source for [Select](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/select-form-field), [Checkbox](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/checkbox-form-field), and [Radio](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/radio-form-field) UI elements.
* Clear content button option is available in the UI Designer, as a setting at element level for [form elements](../../docs/building-blocks/ui-designer/ui-component-types/form-elements) populated with content.
* Form elements under hidden containers can be disabled now.
:::info
Here is a brief example: form → disabled = `true` + child form element: disabled = `false` ⇒ entire form is disabled.
:::
* Improved UI element configuration error experience - when there is an error in the element’s settings, then the element is marked and on hover, an error message is displayed.
* Added code editor in expression fields.
[UI Designer](../../docs/building-blocks/ui-designer)
### Process designer
* Added a new flag in process settings to use a process in task management.

[Task management](../../docs/platform-deep-dive/plugins/custom-plugins/task-management)
## **Known issues** 🙁
### Reporting
* Reporting plugin is not compatible with Oracle DBs.
### UI Designer
* When configuring an [Input UI element](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/input-form-field) with a 'Has clear' (content clear) property, we recommend setting a fixed width value for the element. If the width is set to 'fill', it may cause the UI to break
* The 'auto' size property for Fit W is not available for [input](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/input-form-field), [select](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/select-form-field), [switch](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/switch-form-field), [textarea](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/text-area) and [datepicker](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/datepicker-form-field) UI elements
[Deployment guidelines v3.1](./deployment-guidelines-v3.1.0)
# Deployment guidelines v3.2.0
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.2.0-april-2023/deployment-guidelines-v3.2.0
Do not forget, when upgrading to a new platform version, always check and make sure your installed component versions match the versions stated in the release. To do that, go to **FLOWX.AI Designer > Platform Status**.
After updating to **3.2.0** FLOWX.AI release, importing old processes definitions in the new platform release is not possible (available for exports from **\< 3.2.0** releases).

## Component versions
| :ballot\_box\_with\_check: | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 | 2.9.0 | 2.8.1 | 2.8.0 | 2.7.0 | 2.6.0 | 2.5.0 | 2.4.0 | 2.3.0 | 2.2.0 | 2.1.0 |
| ------------------------------ | ---------- | ------ | ------ | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | --------- |
| **Process engine** | **2.2.1** | 2.1.2 | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 | 0.4.49 | 0.4.44 | 0.4.42 | 0.4.42 | 0.4.36 | 0.4.29 | 0.4.22 | 0.4.21 | 0.4.18 | 0.4.13 |
| **Admin** | **2.2.2** | 2.1.3 | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 | 0.3.55 | 0.3.47 | 0.3.43 | 0.3.40 | 0.3.36 | 0.3.34 | 0.3.29 | 0.3.23 | 0.3.21 | 0.3.13 |
| **Designer** | **3.21.1** | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 | 2.14.4 | 2.11.2 |
| **@flowx/ui-sdk** | **3.21.1** | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.21.1** | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.21.1** | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 | 0.2.10 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.5 | 0.2.4 |
| **flowx-process-renderer** | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 | 2.14.4 | 2.11.2 |
| **CMS Core** | **1.2.0** | 1.0.3 | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.20 | 0.2.20 | 0.2.18 | 0.2.17 | 0.2.17 |
| **Scheduler Core** | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.24 | 0.0.24 | 0.0.23 | 0.0.23 | 0.0.23 |
| **Notification Plugin** | **2.0.5** | 2.0.3 | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 | 1.0.198 | 1.0.198 | 1.0.197 | 1.0.194 | 1.0.194 | 1.0.191 | 1.0.191 | 1.0.190 | 1.0.190 | 1.0.186-1 |
| **Document Plugin** | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 | 1.0.42 | 1.0.41 | 1.0.38 | 1.0.37 | 1.0.37 | 1.0.35 | 1.0.35 | 1.0.31 | 1.0.31 | 1.0.30 |
| **OCR Plugin** | **1.0.2** | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.0.109 | 0.0.109 | 0.0.109 |
| **License Core** | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.19 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.15 | 0.1.15 | 0.1.13 | 0.1.13 | 0.1.12 |
| **Customer Management Plugin** | 0.2.3 | 0.2.3 | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.20 | 0.1.20 | 0.1.18 | 0.1.18 | 0.1.18 |
| **Task Management Plugin** | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 | 0.0.28 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.22 | 0.0.22 | 0.0.21 | 0.0.21 | 0.0.16 |
| **Data search** | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Audit Core** | **1.0.5** | 1.0.4 | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Reporting** | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **advancing-controller** | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **iOS renderer** | **2.0.7** | 2.0.4 | 2.0.0 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | 2.0.1 | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FlowX 4.0**, the `paperflow-web-components` library will be deprecated. Instead, the new components can be found in `@flowx/ui-toolkit`.
### 3.2.0 Minimum Recommended Versions
| FLOWX.AI Platform Version | Component name | Minimum recommended version (tested versions) |
| ------------------------- | ---------------------------- | --------------------------------------------- |
| 3.2 | Keycloak | 18.0.x |
| 3.2 | Kafka | 3.2.0 |
| 3.2 | PostgreSQL | 14.3.0 |
| 3.2 | MongoDB | 5.0.8 |
| 3.2 | Redis | 6.2.6 |
| 3.2 | Elasticsearch | 7.17 |
| 3.2 | S3 (Min.IO) / minio-operator | 2022-05-26T05-48-41Z / 4.5.4 |
| 3.2 | OracleDB | 19.8.0.0.0 |
| 3.2 | Angular (Web SDK) | 15.0.0 |
FlowX.AI supports any version of the third-party components listed as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
## Additional configuration
### CMS audit log
New environment variable that needs to be configured on CMS microservice:
* `KAFKA_TOPIC_AUDIT_OUT` - the identifier for the Kafka topic used to receive audit logs
[CMS setup guide](../../docs/platform-setup-guides/cms-setup-guide)
### Notifications plugin
New environment variables added to configure the error handler on Notifications plugin - Kafka consumer (default values below):
```
KAFKA_CONSUMER_ERROR_HANDLING_ENABLED: FALSE
KAFKA_CONSUMER_ERROR_HANDLING_RETRIES: 0
KAFKA_CONSUMER_ERROR_HANDLING_RETRY_INTERVAL: 1000
```
More information about the new environment variables:
[Notifications plugin setup guide](../../docs/platform-deep-dive/plugins/plugins-setup-guide/notifications-plugin-setup#error-handling)
### Client and environment
Only users with the following admin role can set/edit the new client and environment feature:
* `ROLE_ADMIN_MANAGE_PLATFORM_ADMIN`
### OCR plugin
Replaced `MINIO_` prefix with `STORAGE_S3_` for storage related environment variables.
New environment variables:
* `STORAGE_S3_ACCESS_KEY`
* `STORAGE_S3_SECRET_KEY`
* `STORAGE_S3_HOST`
* `STORAGE_S3_LOCATION`
* `STORAGE_S3_OCR_SCANS_BUCKET`
* `STORAGE_S3_OCR_SIGNATURE_BUCKET`
* `STORAGE_S3_OCR_SIGNATURE_FILENAME`
The following environment from previous releases must be removed in order to use OCR plugin: `CELERY_BROKER_URL`.
More information available in the below section:
[OCR setup guide](../../docs/platform-deep-dive/plugins/plugins-setup-guide/ocr-plugin-setup)
# v3.2.0 April 2023
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.2.0-april-2023/v3.2.0-april-2023
Drumroll please... 🥁 We are excited to announce **FLOWX.AI 3.2** release 🔥.
So, what are you waiting for? Grab a snack, sit back, and get ready to explore the newest version of **FLOWX.AI**.
## **New features** 🆕
### UI Designer ✍️
New features for the UI Designer:
#### Segmented button
Added a new type of button - **segmented button**. It allows users to pick only one option from a group of options, and you can choose to have between 2 and 5 options in the group. The segmented button is easy to use, and can help make your application easier for people to use.

#### Shadows
The new shadow feature is a visual effect that creates a sense of depth and dimensionality in UI designer elements.
The shadow option can be customized to suit the overall design aesthetic of the interface, with properties for shadow color, opacity, blur and distance from the element. It can be applied to a range of UI elements, including [root elements](../../docs/building-blocks/ui-designer/ui-component-types/root-components), forms, [collections](../../docs/building-blocks/ui-designer/ui-component-types/collection), [buttons](../../docs/building-blocks/ui-designer/ui-component-types/buttons), messages, [images](../../docs/building-blocks/ui-designer/ui-component-types/image) and [file preview](../../docs/building-blocks/ui-designer/ui-component-types/file-preview).

#### Disable button - add disabled condition
A new feature has been added that allows a button to be disabled in cases where custom form validations are applied. The user can set a disabled condition for the button element, and the button will remain disabled until the validation criteria are met.

### Platform
#### Set client and environment
The Designer app now allows users to set the client and environment through the **Platform Status** tab. In cases where these are not configured, a modal will be displayed on the Flowx instance, and the user will be required to enter the necessary information before accessing any other section.

If the user lacks the required authorization, a separate modal will be prompted.

[Additional configuration for client and environment](./deployment-guidelines-v3.2.0#client-and-environment)
### Process designer
#### Floating menu
Added a floating menu with multiple actions, including "Home", "View instance data", "Process definition", and "Info". The menu will be visible during error or loading states, with toast error displayed over it and the menu displayed above during loading states:
* the "View instance data" action opens a process instance view that overlays the rendered interface
* the "Process definition" action opens the process definition in the same tab, displaying the same version that was run
* the "Info" action displays a card with process definition info and instance start and end

### Content Management
#### CMS audit log
Added audit options for the CMS system. It keeps track of changes made to different parts of the CMS, like [Enumerations](../../docs/platform-deep-dive/core-components/core-extensions/content-management/enumerations), [Substitution Tags](../../docs/platform-deep-dive/core-components/core-extensions/content-management/substitution-tags), [Languages](../../docs/platform-deep-dive/core-components/core-extensions/content-management/languages), [Source Systems](../../docs/platform-deep-dive/core-components/core-extensions/content-management/source-systems), and [Media Library](../../docs/platform-deep-dive/core-components/core-extensions/content-management/media-library).
Whether you need to troubleshoot an error or are just interested in keeping a close eye on changes, the audit log is a useful tool for monitoring and debugging

There is also a dedicated audit section for each element mentioned above.

[Additional configuration for CMS audit log](./deployment-guidelines-v3.2.0#cms-audit-log)
## **Bug fixes** 🔧
* **\[WEB\_SDK]** Fixed an issue where custom components were unable to access UI Actions when input keys were not defined
## **Changed** 🛠️
### UI Designer ✍️
#### Improved rendering mechanism
* The UI Designer now has an enhanced rendering mechanism that prevents the page from scrolling up upon reloading, improving the user experience
* Element bounding box in UI Designer view now reflects Spacing and Sizing settings
#### Added new "requiredTrue" validator - SWITCH element
The "requiredTrue" validator for the SWITCH element enforces that the toggle must be switched on to be valid.

### Notifications plugin
* New environment variables added to configure the error handler on Notifications plugin - Kafka consumer
[Additional configuration for Notifications plugin](./deployment-guidelines-v3.2.0#notifications-plugin)
### OCR plugin
* With the new release of ocr-plugin **1.0.x** version, RabbitMQ is no longer needed
* New environment variables
[Additional configuration here](./deployment-guidelines-v3.2.0#ocr-plugin)
### Process designer
* Improvement: process definitions names can only contain letters, numbers and the following special characters \`\[] () . \_ -
## **Known issues** 🙁
### Reporting
* Reporting plugin is not compatible with Oracle DBs.
### UI Designer
* When configuring an [Input UI element](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/input-form-field) with a 'Has clear' (content clear) property, we recommend setting a fixed width value for the element. If the width is set to 'fill', it may cause the UI to break
[Deployment guidelines v3.2](./deployment-guidelines-v3.2.0)
# Deployment guidelines v3.3.0
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.3.0-july-2023/deployment-guidelines-v3.3.0
Do not forget, when upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FLOWX.AI Designer > Platform Status**.
After updating to **3.3.0** FLOWX.AI release, it is not possible to import old process definitions into the new platform release (available for exports from releases **\< 3.3.0**).

## Component versions
| 🧩 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 | 2.9.0 | 2.8.1 | 2.8.0 | 2.7.0 | 2.6.0 | 2.5.0 | 2.4.0 | 2.3.0 | 2.2.0 | 2.1.0 |
| ------------------------------ | ----------- | ------ | ------ | ------ | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | --------- |
| **Process engine** | **3.6.0** | 2.2.1 | 2.1.2 | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 | 0.4.49 | 0.4.44 | 0.4.42 | 0.4.42 | 0.4.36 | 0.4.29 | 0.4.22 | 0.4.21 | 0.4.18 | 0.4.13 |
| **Admin** | **2.5.2** | 2.2.2 | 2.1.3 | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 | 0.3.55 | 0.3.47 | 0.3.43 | 0.3.40 | 0.3.36 | 0.3.34 | 0.3.29 | 0.3.23 | 0.3.21 | 0.3.13 |
| **Designer** | **3.28.13** | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 | 2.14.4 | 2.11.2 |
| **@flowx/ui-sdk** | **3.28.13** | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.28.13** | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.28.13** | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 | 0.2.10 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.5 | 0.2.4 |
| **flowx-process-renderer** | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 | 2.14.4 | 2.11.2 |
| **CMS Core** | **1.3.0** | 1.2.0 | 1.0.3 | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.20 | 0.2.20 | 0.2.18 | 0.2.17 | 0.2.17 |
| **Scheduler Core** | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.24 | 0.0.24 | 0.0.23 | 0.0.23 | 0.0.23 |
| **events-gateway** | **1.0.2** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **Notification Plugin** | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 | 1.0.198 | 1.0.198 | 1.0.197 | 1.0.194 | 1.0.194 | 1.0.191 | 1.0.191 | 1.0.190 | 1.0.190 | 1.0.186-1 |
| **Document Plugin** | **2.0.4** | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 | 1.0.42 | 1.0.41 | 1.0.38 | 1.0.37 | 1.0.37 | 1.0.35 | 1.0.35 | 1.0.31 | 1.0.31 | 1.0.30 |
| **OCR Plugin** | **1.0.8** | 1.0.2 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.0.109 | 0.0.109 | 0.0.109 |
| **License Core** | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.19 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.15 | 0.1.15 | 0.1.13 | 0.1.13 | 0.1.12 |
| **Customer Management Plugin** | **0.2.4** | 0.2.3 | 0.2.3 | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.20 | 0.1.20 | 0.1.18 | 0.1.18 | 0.1.18 |
| **Task Management Plugin** | **2.1.2** | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 | 0.0.28 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.22 | 0.0.22 | 0.0.21 | 0.0.21 | 0.0.16 |
| **Data search** | **0.2.0** | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Audit Core** | **1.0.6** | 1.0.5 | 1.0.4 | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Reporting** | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **advancing-controller** | **0.3.0** | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **iOS renderer** | **2.1.4** | 2.0.7 | 2.0.4 | 2.0.0 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FlowX 4.0**, the `paperflow-web-components` library will be deprecated. Instead, the new components can be found in `@flowx/ui-toolkit`.
### Recommended Versions for FLOWX.AI 3.3.0 ☑️
| FLOWX.AI Platform Version | Component name | Recommended version (tested versions) |
| ------------------------- | ---------------------------- | ------------------------------------- |
| 3.3 | Keycloak | 18.0.x |
| 3.3 | Kafka | 3.2.0 |
| 3.3 | PostgreSQL | 14.3.0 |
| 3.3 | MongoDB | 5.0.8 |
| 3.3 | Redis | 6.2.6 |
| 3.3 | Elasticsearch | 7.17 |
| 3.3 | S3 (Min.IO) / minio-operator | 2022-05-26T05-48-41Z / 4.5.4 |
| 3.3 | OracleDB | 19.8.0.0.0 |
| 3.3 | Angular (Web SDK) | 15.0.0 |
FlowX.AI supports any version of the third-party components listed as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
## Additional configuration
This section describes the additional configuration that is required to use the new features in FlowX.AI.
### Process engine
#### Process Instance Indexing through Kafka transport
Introducing a new Kafka transport strategy for sending details about process instances to be indexed in Elasticsearch. To enable indexing of process instances in Elasticsearch through Kafka, configure the following environment variables:
* `FLOWX_INDEXING_ENABLED`
| Variable Name | Values | Description |
| ------------------------ | ------ | ------------------------------------------------------ |
| FLOWX\_INDEXING\_ENABLED | true | Enables indexing with Elasticsearch for the whole app |
| FLOWX\_INDEXING\_ENABLED | false | Disables indexing with Elasticsearch for the whole app |
* `FLOWX_INDEXING_PROCESSINSTANCE_INDEXING_TYPE`
| Variable Name | Values | Definition |
| ------------------------------------------------ | ----------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| FLOWX\_INDEXING\_PROCESSINSTANCE\_INDEXING\_TYPE | no-indexing | No indexing is performed for process instances |
| FLOWX\_INDEXING\_PROCESSINSTANCE\_INDEXING\_TYPE | http | Process instances are indexed via HTTP (direct connection from process-engine to Elastic Search thorugh HTTP calls) |
| FLOWX\_INDEXING\_PROCESSINSTANCE\_INDEXING\_TYPE | kafka | Process instances are indexed via Kafka (send data to be indexed through a kafka topic - the new strategy for the applied solution) |
For Kafka indexing, the Kafka Connect with Elastic Search Sink Connector must be deployed in the infrastructure.
* `FLOWX_INDEXING_PROCESSINSTANCE_INDEX_NAME`: specify the name of the index used for process instances
| Variable Name | Values | Definition |
| ------------------------------------------------------- | ----------------- | ----------------------------------------------------------------------------------------------- |
| FLOWX\_INDEXING\_PROCESSINSTANCE\_INDEXING\_INDEX\_NAME | process\_instance | The name of the index used for storing process instances. It is also part of the search pattern |
* `FLOWX_INDEXING_PROCESSINSTANCE_SHARDS`: set the number of shards for the index
| Variable Name | Values | Definition |
| ---------------------------------------- | ------ | -------------------------------------------------------------------------- |
| FLOWX\_INDEXING\_PROCESSINSTANCE\_SHARDS | 1 | The number of shards for the Elasticsearch index storing process instances |
* `FLOWX_INDEXING_PROCESSINSTANCE_REPLICAS`: set the number of replicas for the index
| Variable Name | Values | Definition |
| ------------------------------------------ | ------ | ---------------------------------------------------------------------------- |
| FLOWX\_INDEXING\_PROCESSINSTANCE\_REPLICAS | 1 | The number of replicas for the Elasticsearch index storing process instances |
#### Topics related to process event messages
##### Process engine new Kafka topics
| Default parameter (env var) | Default FLOWX.AI value (can be overwritten) |
| --------------------------------- | ------------------------------------------- |
| KAFKA\_TOPIC\_PROCESS\_INDEX\_OUT | ai.flowx.dev.core.index.process.v1 |
For more details please check the following section:
[Process Instance Indexing through Kafka transport](../../docs/platform-setup-guides/flowx-engine-setup-guide/configuring-elasticsearch-indexing)
#### New service account
Added a new service account `flowx-process-engine-sa`. This service account is needed so the use of Start Catch Event node is possible.
[Service accounts](../../docs/platform-setup-guides/access-management/configuring-an-iam-solution#process-engine-service-account)
### Events gateway
Added a new **events-gateway** microservice, which requires the following configuration.
The events-gateway is designed specifically for handling events. Previously, each [**process-engine**](../../docs/terms/flowxai-process-engine) pod had a WebSocket (WS) server, and the front-end (FE) would connect to the process-engine to receive messages.
Now, instead of a server holding the messages, they are stored in Redis. However, the process-engine sends the messages to the events-gateway, which is responsible for sending them to Redis. Users connect to the events-gateway using an HTTP request and wait for Server-Sent Events (SSE) to flow in that request. They keep the request open for as long as they want SSE on a specific instance.
### Events-gateway Kafka topics
New Kafka topics have been added for the events-gateway. These topics are used to send and receive messages between the events-gateway and the process-engine.
| Topic Name | Description | Value |
| ---------------------------------------------- | --------------------------------------------------------- | ---------------------------------------------------- |
| KAFKA\_TOPIC\_EVENTS\_GATEWAY\_OUT\_MESSAGE | Outgoing messages from process-engine to events-gateway | ai.flowx.eventsgateway.engine.commands.message.v1 |
| KAFKA\_TOPIC\_EVENTS\_GATEWAY\_OUT\_DISCONNECT | Disconnect commands from process-engine to events-gateway | ai.flowx.eventsgateway.engine.commands.disconnect.v1 |
| KAFKA\_TOPIC\_EVENTS\_GATEWAY\_OUT\_CONNECT | Connect commands from process-engine to events-gateway | ai.flowx.eventsgateway.engine.commands.connect.v1 |
New Kafka topics that should be added in the events-gateway configuration.
| Topic Name | Description | Value |
| ---------------------------------------------------------------- | ------------------------------------------------------------- | ---------------------------------------------------- |
| KAFKA\_TOPIC\_EVENTS\_GATEWAY\_PROCESS\_INSTANCE\_IN\_MESSAGE | Where events-gateway listens for messages from process-engine | ai.flowx.eventsgateway.engine.commands.message.v1 |
| KAFKA\_TOPIC\_EVENTS\_GATEWAY\_PROCESS\_INSTANCE\_IN\_DISCONNECT | Disconnect commands from events-gateway to process-engine | ai.flowx.eventsgateway.engine.commands.disconnect.v1 |
| KAFKA\_TOPIC\_EVENTS\_GATEWAY\_PROCESS\_INSTANCE\_IN\_CONNECT | Connect commands from events-gateway to process-engine | ai.flowx.eventsgateway.engine.commands.connect.v1 |
[Events gateway](../../docs/platform-deep-dive/core-components/events-gateway)
[Events gateway setup guide](../../docs/platform-setup-guides/events-gateway-setup)
[Process engine topics](../../docs/platform-setup-guides/flowx-engine-setup-guide#configuring-events-gateway)
### SSE
Starting with the 3.3 platform release, the WebSocket protocol has been removed. Therefore, if you are using `socket.io-client`, you will need to make some changes. Here's what you should do:
1. Uninstall `socket.io-client`:
Before proceeding, ensure that you uninstall `socket.io-client` from your project. You can do this using the following command:
```bash theme={"system"}
npm uninstall socket.io-client
```
2. Install `event-source-polyfill@1.0.31`:
To replace the functionality provided by socket.io-client, you will need to use a new package called `event-source-polyfill@1.0.31` (as mentioned in the [**Installing the library**](../../docs/platform-deep-dive/core-components/renderer-sdks/angular-renderer#installing-the-library) section). This package serves as a polyfill for the EventSource API, which enables servers to send events to clients over HTTP. The EventSource API is commonly used for server-sent events (SSE) and real-time web applications.
```bash theme={"system"}
npm install event-source-polyfill@1.0.31
```
### Message events
#### Topics related to message events
New Kafka topics that should be added in the process-engine configuration.
| Default parameter (env var) | Default FLOWX.AI value (can be overwritten) | Definition |
| -------------------------------------------- | ---------------------------------------------------- | ------------------------------------------------------------ |
| KAFKA\_TOPIC\_PROCESS\_EVENT\_MESSAGE | ai.flowx.dev.core.message.event.process.v1 | This topic is used for throwing intermediate event messages. |
| KAFKA\_TOPIC\_PROCESS\_START\_FOR\_EVENT\_IN | ai.flowx.dev.core.trigger.start-for-event.process.v1 | This topic is used to start processes. |
### Bulk updates
New Kafka topics that should be added in the process-engine configuration, related to task management plugin - bulk updates.
| Default parameter (env var) | Default FLOWX.AI value (can be overwritten) | Definition |
| ------------------------------------------- | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| KAFKA\_TOPIC\_PROCESS\_OPERATIONS\_BULK\_IN | ai.flowx.core.trigger.operations.bulk.v1 | On this topic, you can perform operations from the "KAFKA\_TOPIC\_PROCESS\_OPERATIONS\_IN" topic and send them as an array, allowing you to send multiple operations at once. |
#### Example
```json theme={"system"}
{
"operations": [
{
"operationType": "TERMINATE",
"processInstanceUuid": "6ae8274a-2778-4ff9-8fcb-6c84a5eb2bc6",
"taskId": "doesn't matter"
},
{
"operationType": "HOLD",
"processInstanceUuid": "6ae8274a-2778-4ff9-8fcb-6c84a5eb2bc6",
"taskId": "doesn't matter"
}
]
}
```
[Process engine topics](../../docs/platform-setup-guides/flowx-engine-setup-guide#topics-related-to-the-task-management-plugin)
## Migration Steps
To upgrade to FLOWX.AI 3.3.0, follow these steps:
* Make sure you have taken a backup of your current platform and database configurations.
* Verify that your current installed component versions match the versions specified in the release notes.
* Update the FLOWX.AI platform and all related components to the recommended versions.
* Update the necessary configuration files according to the additional configuration requirements.
* Restart the FLOWX.AI platform and related services.
* Verify that the platform is running correctly and all processes are functioning as expected.
* If you encounter any issues or errors during the upgrade process, refer to the troubleshooting section in the release notes or contact FLOWX.AI support for assistance.
## Troubleshooting
If you encounter any issues during the upgrade process or while running the FLOWX.AI platform, refer to the troubleshooting section in the release notes or contact FLOWX.AI support for assistance.
# v3.3.0 July 2023
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.3.0-july-2023/v3.3.0-july-2023
We can't reinvent the wheel... but we can certainly give it a whole new spin! Drumroll, please! 🥁 **FLOWX.AI 3.3** has arrived, bringing a new wave of exciting new features and enhancements.

Buckle up, hold on tight, and prepare for an extraordinary experience! 🚀
## **New features** 🆕
### New nodes: message events
Message events play a crucial role in integrating messaging capabilities within business process modeling. These [**events**](../../docs/terms/events) are specifically crafted to capture the interaction between different participants in a [**process**](../../docs/terms/flowx-process) by referencing messages. By leveraging message events, processes can temporarily halt their execution until the anticipated messages are received, facilitating efficient coordination and communication among [**process instances**](../../docs/terms/flowx-process-instance).

* **Message Throw Intermediate Event** - the events can be triggered at any time while the associated task is being performed
* **Interrupting event** - when the message is received, the user task is finished and the [**token**](../../docs/terms/token) advances in the process flow
* **Non-Interrupting event** - when messages are received, the user task, to which the catching boundary event is attached, is not finished immediately.
* **Message Catch Intermediate Event** - waits for a message to catch before continuing with the process flow
* **Message Catch Start Event** - starts an instance after receiving a message
[Message events](../../docs/building-blocks/node/message-events)
### 📢 Announcement: Transitioning from WebSockets to SSE (Server-Sent Events)
We are replacing WebSockets with SSE (Server-Sent Events) as the preferred technology for real-time communication in our system. SSE offers a lightweight and efficient solution for delivering server-initiated updates to the clients, enhancing the responsiveness and user experience.
With SSE, we can streamline the communication flow by eliminating the need for bidirectional channels. Instead, the server can send events directly to the clients, reducing network overhead and simplifying the implementation. SSE is built on top of the HTTP protocol, making it widely supported and easily integrable into existing systems.
Check the deployment guildelines for more information about the impact on the configs:
[SSE](deployment-guidelines-v3.3.0#sse)
### Events gateway
Added a new [**FLOWX.AI microservice**](../../docs/terms/microservices). The Events Gateway is a central communication service that processes and distributes SSE (Server-sent events) messages from Backend to Frontend. It acts as an intermediary between different system components, handling event processing, message distribution, and event publication. By reading messages from a Kafka topic and publishing events to the frontend renderer, it enables real-time updates in the user interface. Additionally, it integrates with Redis to publish events on a stream for other system components to consume. The Events Gateway ensures efficient event handling and facilitates seamless communication within the system.

[Events gateway](../../docs/platform-deep-dive/core-components/events-gateway)
[Events gateway setup guide](../../docs/platform-setup-guides/events-gateway-setup)
### Process engine
#### NEW: process instance indexing through Kafka transport
Sending data through **Kafka** : Rather than sending data directly from the process engine to ElasticSearch (ES), a new strategy is introduced where the [**process engine**](../../docs/terms/flowxai-process-engine) sends messages to a Kafka topic whenever there is something to be indexed from a [**process instance**](../../docs/terms/flowx-process-instance). [Kafka Connect](https://kafka.apache.org/documentation.html#connect) is configured to read these messages and send them to ElasticSearch for indexing. This approach allows for fire-and-forget communication, eliminating the need for the process engine to wait for indexing requests to complete.
[Process instance indexing](../../docs/platform-setup-guides/flowx-engine-setup-guide/configuring-elasticsearch-indexing)
#### KafkaConnect ElasticSearch sink plugin
A new component, Kafka Connect with configuration, has been added. This component enables Kafka Connect to listen to a specific topic where process instances generate messages and sends them to ElasticSearch indexes. The configuration includes the utilization of a KafkaConnect ElasticSearch sink connector plugin, which is responsible for handling this task. The plugin is configured with a connector.
[Example configuration for applying the solution with Kafka Connect](../../docs/platform-setup-guides/flowx-engine-setup-guide/configuring-elasticsearch-indexing#example-configuration-for-applying-the-solution-with-kafka-connect)
Check the deployment guidelines for version 3.3:
[Kafka transport](./deployment-guidelines-v3.3.0#process-engine)
### UI Designer ✍️
#### Dynamic values
Added the possibility to add dynamic values in various element settings. You can now use process parameters or [**substitution tags**](../../docs/terms/flowx-substitutions-tags) for the following element properties: default value (excluding switch), label, placeholder, helpertext, error message, prefix, and suffix. Additionally, dynamic values are supported for specific elements such as [**Document Preview**](../../docs/building-blocks/ui-designer/ui-component-types/file-preview), [**Card**](../../docs/building-blocks/ui-designer/ui-component-types/root-components/card), [**Form**](../../docs/building-blocks/ui-designer/ui-component-types/form-elements), Message, [**Button**](../../docs/building-blocks/ui-designer/ui-component-types/buttons), [**Upload**](../../docs/building-blocks/ui-designer/ui-component-types/buttons), [**Select**](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/select-form-field), [**Checkbox**](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/checkbox-form-field), [**Radio**](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/radio-form-field), [**Segmented button**](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/segmented-button), Text, Link, Modal, and Step. This enhancement allows for greater flexibility and customization.

#### Computed values
Computed values are dynamically generated or calculated values based on JavaScript expressions instead of static predefined values.
Computed values can be created using the [**UI Designer**](../../docs/terms/flowx-ai-ui-designer) by writing JavaScript expressions that operate on process parameters or other variables within the application. These expressions can perform calculations, transformations, or other operations to generate the desired value at runtime. By enabling computed values, the application provides flexibility and the ability to create dynamic and responsive user interfaces.

[Dynamic & computed values](../../docs/building-blocks/ui-designer/dynamic-and-computed-values)
#### New value slider UI element
Introducing a new slider UI element that allows users to select and adjust numerical values within a specified range. The slider element can be added under a parent form element by dragging and dropping or pasting.

#### Icons
The new Icons feature enhances the visual appeal and customization options for the following UI components: [**Input**](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/input-form-field), [**Select**](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/select-form-field) and [**Button**](../../docs/building-blocks/ui-designer/ui-component-types/buttons).

* Added support for customizing icons in UI elements by uploading and managing SVG files through the [Media Library](../../docs/platform-deep-dive/core-components/core-extensions/content-management/media-library)
* Improved UI Designer integration for easy icon customization.
* Introduced options to set colors for icons in UI Designer
* Enhanced icon management with the ability to mark SVG files as icons in the Media Library

For more information, check the following section:
[Media Library](../../docs/platform-deep-dive/core-components/core-extensions/content-management/media-library#icons)
## **Bug Fixes** 🔧
#### Document Plugin
* Fixed an issue that caused an error when splitting PDF documents without a barcode on the first page.
#### Admin
* Addressed an issue that resulted in the creation of duplicate processes with the same UUID when cloning and renaming a published process. Now, a new UUID is generated for the renamed process, ensuring uniqueness and preventing duplication.
#### Integrations
* Fixed an issue where the received message in the callback action, configured with parameters from integration, was incorrectly saved on the node ID instead of the configured key. The fix ensures that integrations correctly map the received message to the intended key, saving it in the intended location.
#### Task Manager
* Resolved an issue where processes started with the "inherit" option did not connect to the correct namespace when opened from the task manager. Subprocesses now establish the connection using the appropriate contextInstanceUuid from the Child Process, ensuring they connect to the correct namespace and receive the expected updates.
:::caution
Currently the two triggers lacks support for Service Level Agreement (SLA) functionality.
:::
## **Changed** 🛠️
### Task Management - Bulk updates
Now you have the ability to send bulk update requests on [**Kafka**](../../docs/terms/flowx-kafka). You can now perform multiple operations at once.
[Bulk updates](./deployment-guidelines-v3.3.0#bulk-updates)
### Data model
#### Viewing data model references
This update introduces the ability to view attribute usage within the process. You can now easily see where a specific attribute is being used by accessing the "View References" feature. This feature provides a list of process data keys associated with each attribute and displays possible references, such as UI Elements.

Please note that the option to view references is not available for object and array attribute types.
[Data model reference](../../docs/building-blocks/process/process-definition#data-model-reference)
To ensure smooth upgrading to the v3.3 platform release and to automatically link already existing data models, please execute the following command:
```shell theme={"system"}
curl --location --request PATCH '{{baseUrl}}/api/internal/ui-templates/data-model/link' \
--header 'Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXX' \
--data ''
```
Please replace `{{baseUrl}}` with the appropriate base URL for your platform.
Make sure to execute this command with the necessary permissions and valid authorization token to ensure a successful upgrade process: `manage-processes` and `admin`. For more information about the needed roles and scopes, check the [**Configuring access rights for Admin**](../../docs/flowx-designer/designer-setup-guide/configuring-access-rights-for-admin) section.
#### Reporting
* You can now set "Used in reporting" and “Sensitive data” flags for an object or array of objects (all the child attributes will inherit its value - "true" or "false"), without the need to edit each attribute
#### Copy-paste objects
* Copy-paste objects structure under data model

### Platform
#### Set client and environment
To configure the client and environment settings in the platform, you can use the following environment variables:
* `FLOWX_CLIENT_NAME`
* `FLOWX_ENVIRONMENT_NAME`
Both configurations must be set for the admin component to retrieve them. In case the environment variables are not overridden, the administrator can manually configure them in FLOWX Designer. Here's how you can do it:

By setting the appropriate values for these environment variables, you ensure that the platform is correctly configured with the desired client and environment settings.
### Process designer
#### Swimlanes interaction
* We have introduced a new and improved way to interact with process swimlanes by incorporating a contextual menu.
Check out the animation below to see the new swimlanes interaction.

### Other
* The autoarrange function has been removed from [**Process Designer**](../../docs/terms/flowx-process-designer).
## **Known issues** 🙁
* **Slider UI element**: Currently, there is an issue where the value thumb of a slider component does not display the correct value when sourced from process data.
* **Business rules**: Presently, there is an issue where changing the language of a [**business rule**](../../docs/terms/business-rules) does not result in its execution using the new language. Despite updating the language value in the database, the business rule continues to be executed with the original language, leading to unexpected behavior.
* **Process Designer**:
* In certain cases, deleting a boundary node in the process designer and navigating back to the [**process designer**](../../docs/terms/flowx-process-designer) from the [**UI Designer**](../../docs/terms/flowx-ai-ui-designer) does not remove the associated sequence from the boundary event. This issue specifically occurs when the sequence is linked to the deleted boundary node.
* Select Sequence buttons in the nodes UI interface may overlap.
* There is a known issue where users are unable to select the node name with the mouse in the user interface.
* **Plugins**: Reporting plugin is not compatible with Oracle DBs.
[Deployment guidelines v3.3](./deployment-guidelines-v3.3.0)
# null
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.0-september-2023/deployment-guidelines-v3.4.0
Do not forget, when upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FLOWX.AI Designer > Platform Status**.
After updating to **3.4.0** FLOWX.AI release, it is not possible to import old process definitions into the new platform release (available for exports from releases **\< 3.4.0**).

## Component versions
| 🧩 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 | 2.9.0 | 2.8.1 | 2.8.0 | 2.7.0 | 2.6.0 | 2.5.0 | 2.4.0 | 2.3.0 |
| ------------------------------ | ----------- | ------- | ------ | ------ | ------ | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| **process-engine** | **4.2.4** | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 | 0.4.49 | 0.4.44 | 0.4.42 | 0.4.42 | 0.4.36 | 0.4.29 | 0.4.22 | 0.4.21 |
| **admin** | **3.2.3** | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 | 0.3.55 | 0.3.47 | 0.3.43 | 0.3.40 | 0.3.36 | 0.3.34 | 0.3.29 | 0.3.23 |
| **designer** | **3.33.10** | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 |
| **@flowx/ui-sdk** | **3.33.10** | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.33.10** | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.33.10** | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | - | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 | 0.2.10 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 |
| **flowx-process-renderer** | - | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 |
| **cms-core** | **1.3.6** | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.20 | 0.2.20 | 0.2.18 |
| **scheduler-core** | **1.2.0** | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.24 | 0.0.24 | 0.0.23 |
| **events-gateway** | **1.0.6** | 1.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **notification-plugin** | **2.0.5** | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 | 1.0.198 | 1.0.198 | 1.0.197 | 1.0.194 | 1.0.194 | 1.0.191 | 1.0.191 | 1.0.190 |
| **document-plugin** | **2.0.6** | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 | 1.0.42 | 1.0.41 | 1.0.38 | 1.0.37 | 1.0.37 | 1.0.35 | 1.0.35 | 1.0.31 |
| **ocr-plugin** | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.0.109 |
| **license-core** | **1.0.4** | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.19 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.15 | 0.1.15 | 0.1.13 |
| **customer-management-plugin** | **0.2.6** | 0.2.4 | 0.2.3 | 0.2.3 | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.20 | 0.1.20 | 0.1.18 |
| **task-management-plugin** | **3.0.0** | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 | 0.0.28 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.22 | 0.0.22 | 0.0.21 |
| **data-search** | **0.2.3** | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **audit-core** | **2.1.0** | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **reporting-plugin** | **0.1.2** | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **advancing-controller** | **0.3.2** | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **iOS renderer** | **2.3.0** | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | **2.1.4** | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FLOWX.AI 3.0**, the `paperflow-web-components` library will be deprecated (some components still can be found inside this lib). Instead, the new components can be found in `@flowx/ui-toolkit@3.0`.
### Recommended Versions for FLOWX.AI 3.4.0 ☑️
| FLOWX.AI Platform Version | Component name | Recommended version (tested versions) |
| ------------------------- | ----------------- | ------------------------------------- |
| 3.4 | Keycloak | 18.0.x |
| 3.4 | Kafka | 3.2.3 |
| 3.4 | PostgreSQL | 14.3.0 |
| 3.4 | MongoDB | 5.0.8 |
| 3.4 | Redis | 6.2.6 |
| 3.4 | Elasticsearch | 7.17 |
| 3.4 | OracleDB | 19.8.0.0.0 |
| 3.4 | Angular (Web SDK) | 15.0.0 |
FlowX.AI supports any version of the third-party components listed as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
# Additional configuration
This section outlines the supplementary configurations required to leverage the newly introduced features within FLOWX.AI.
## Data Model Update Procedure
When deploying the new version, it's mandatory to migrate the data model index using the following procedure.
Follow the next steps:
1. **Access Kibana**: Start by connecting to Kibana and locate the data model index, which is typically named "process-data-model."
2. **Open Kibana Devtools**: Navigate to Kibana → Devtools. In the Console tab, you should proceed with the following steps.
3. **Check Index Documents**: Copy and paste the following script into the left-hand window, replacing any existing content, and then execute it. This script will retrieve the existing documents in the index to validate that the index name is correct.
```json theme={"system"}
GET process-data-model/_search
{
"query": {
"match_all": {}
}
}
```
4. **Update Documents**: Replace any existing content in the left window with the following script, and then run it. This script updates the documents in the index by adding a new attribute, "processDefinitionVersionId," with the same value as "processDefinitionId."
```json theme={"system"}
POST process-data-model/_update_by_query?wait_for_completion=false
{
"query": {
"match_all": {}
},
"script": {
"source": "ctx._source.processDefinitionVersionId=ctx._source.processDefinitionId",
"lang": "painless"
}
}
```
5. **Verify the Update**: Re-run the script from step 3 to confirm that the new attribute, "processDefinitionVersionId," has been added with the same value as "processDefinitionId."
These steps will ensure a smooth migration of the data model index when deploying the new version.
## Access rights for Fonts
In order to utilize the new fonts feature in the CMS microservice, it's mandatory to configure the following access rights:
| Module | Scope | Role default value | Microservice |
| ------------- | ------ | -------------------- | ------------------ |
| manage-themes | import | ROLE\_THEMES\_IMPORT | Content Management |
| | import | ROLE\_THEMES\_EDIT | Content Management |
| | import | ROLE\_THEMES\_ADMIN | Content Management |
| manage-themes | read | ROLE\_THEMES\_READ | Content Management |
| | read | ROLE\_THEMES\_EDIT | Content Management |
| | read | ROLE\_THEMES\_ADMIN | Content Management |
| | read | ROLE\_THEMES\_IMPORT | Content Management |
| manage-themes | edit | ROLE\_THEMES\_EDIT | Content Management |
| | edit | ROLE\_THEMES\_ADMIN | Content Management |
| manage-themes | admin | ROLE\_THEMES\_ADMIN | Content Management |
## Markdown support
New lib added:
* `marked@^5.0.0` refers to a specific version of the "marked" library or package in the npm ecosystem. "marked" is an open-source JavaScript library used for parsing and rendering Markdown text into HTML.
To install the lib please make sure to run the following command:
`npm install marked@^5.0.0`
## Timer events
Incorporating new Kafka Topics and Consumer Groups.
### Admin
1. **KAFKA\_TOPIC\_PROCESS\_SCHEDULED\_TIMER\_EVENTS\_OUT\_SET**:
* Facilitates the transmission of scheduled message requests from the Admin microservice to the Scheduler.
* Utilize when setting up scheduled messages for precise timing and orchestration.
2. **KAFKA\_TOPIC\_PROCESS\_SCHEDULED\_TIMER\_EVENTS\_OUT\_STOP**:
* Responsible for forwarding requests from the Admin microservice to the Scheduler to halt scheduled messages.
* Utilize to cease previously scheduled messages for streamlined management.
3. **KAFKA\_TOPIC\_PROCESS\_START\_FOR\_EVENT\_IN**:
* Enabling the initiation of process definitions that commence with a timer start event node.
* Aids in the launch of process flows driven by time-based triggers.
### Scheduler
1. **KAFKA\_TOPIC\_PROCESS\_SCHEDULED\_TIMER\_EVENTS\_IN\_SET**:
* Receives scheduled message setting requests from the Admin and Process engine microservices.
* Utilized for setting up precise message scheduling with a focus on timing accuracy.
2. **KAFKA\_TOPIC\_PROCESS\_SCHEDULED\_TIMER\_EVENTS\_IN\_STOP**:
* Handles requests from the Admin and Process engine microservices to terminate scheduled messages.
* Essential for promptly halting scheduled messages according to operational requirements.
3. **KAFKA\_TOPIC\_AUDIT\_OUT**:
* Introduction of audit functionality to the Scheduler microservice through Kafka.
* Enables tracking and management of scheduling activities.
New consumer groups:
```yaml theme={"system"}
kafka:
consumer:
threads: 1
scheduled-timer-events:
threads: 1
group-id: scheduled-timer-events
stop-scheduled-timer-events:
threads: 1
group-id: stop-scheduled-timer-events
```
### Process engine
1. **KAFKA\_TOPIC\_PROCESS\_SCHEDULED\_TIMER\_EVENTS\_OUT\_SET**:
* Sent to the scheduler for setting scheduled messages.
2. **KAFKA\_TOPIC\_PROCESS\_SCHEDULED\_TIMER\_EVENTS\_OUT\_STOP**:
* Sent to the scheduler for stopping scheduled messages.
New consumer groups:
```yaml theme={"system"}
kafka:
consumer:
threads: 1
scheduled-timer-events:
threads: 1
group-id: scheduled-timer-events
stop-scheduled-timer-events:
threads: 1
group-id: stop-scheduled-timer-events
```
### New service account
A new service account has been introduced. This service account is essential for enabling the usage of the Start Timer Event node. Detailed information is available in the following section:
[Service accounts](../../docs/platform-setup-guides/access-management/configuring-an-iam-solution#scheduler-service-account)
## Scheduler: New timer-event-scheduler (Cron)
Introducing a new timer event scheduler designed to manage timer events. This scheduler scans for expired messages every second, processing batches of 100 messages per iteration. For situations with higher message volumes, the scheduler ensures thorough message consumption:
```yaml theme={"system"}
timer-event-scheduler:
batchSize: 100
cronExpression: "*/1 * * * * *" #every 1 seconds
```
## Scheduler: new recovery mechanism
```yaml theme={"system"}
flowx:
timer-calculator:
delay-max-repetitions: 1000000
```
You have a "next execution" set for 10:25, and the cycle step is 10 minutes. If the instance goes down for 2 hours, the next execution time should be 12:25, not 10:35. To calculate this, you add 10 minutes repeatedly to 10:25 until you reach the current time. So, it would be 10:25 + 10 min + 10 min + 10 min, until you reach the current time of 12:25. This ensures that the next execution time is adjusted correctly after the downtime.
* `FLOWX_TIMER_CALCULATOR_DELAY_MAX_REPETITIONS` - This means that, for example, if our cycle step is set to one second and the system experiences a downtime of two weeks, which is equivalent to 1,209,600 seconds, and we have the "max repetitions" set to 1,000,000, it will attempt to calculate the next schedule. However, when it reaches the maximum repetitions, an exception is thrown, making it impossible to calculate the next schedule. As a result, the entry remains locked and needs to be rescheduled. This scenario represents a critical case where the system experiences extended downtime, and the cycle step is very short (e.g., 1 second), leading to the inability to determine the next scheduled event.
# v3.4.0 September 2023
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.0-september-2023/v3.4.0-september-2023
Welcome to the FLOWX.AI 3.4 release! 🚀 This update introduces exciting new features and improvements to enhance your experience with FLOWX.AI. Get ready for an extraordinary journey! 🚀

## **What's New?** 🆕
# Introducing the Enhanced Versioning Module
We are excited to unveil the latest enhancements to our Versioning module, designed to improve your experience and streamline your workflow.

**Watch our video overview** to discover all the new features and improvements:
For more in-depth information and to explore the Versioning module further, please visit our documentation:
[Versioning Module Documentation](/3.x/docs/building-blocks/process/versioning)
Stay updated and take advantage of these exciting updates in our Versioning module!
### Fresh nodes: Timer Events
These nodes enable you to trigger specific actions or events at predefined time intervals, durations, or cycles. With timer event nodes, you can design processes that respond to time-related conditions, ensuring smoother workflow execution and enhanced automation.

Three primary Timer Event node types:
* [**Timer Start Event**](/3.x/docs/building-blocks/node/timer-events/timer-start-event) (interrupting/non-interrupting)
* [**Timer Intermediate Event**](/3.x/docs/building-blocks/node/timer-events/timer-intermediate-event)
* [**Timer Boundary Event**](/3.x/docs/building-blocks/node/timer-events/timer-boundary-event) (interrupting/non-interrupting)
So whether it's reminders, recurring tasks, or tasks with deadlines, these Timer Event nodes are your go-to for keeping things in sync with the clock.
[Timer Events](/3.x/docs/building-blocks/node/timer-events)
### FLOWX.AI Designer
#### Font Management
Font Management allows you to upload and manage multiple font files, which can be later utilized when configuring UI templates using the UI Designer. You can now upload multiple TTF font files, the platform will identify additional data like font family, weight, and style for each file. That can be done using the new menu entry added under **Content Management > Font files**.

[Font Management](../../docs/platform-deep-dive/core-components/core-extensions/content-management/font-files)
### UI Designer
#### Attributed strings for Markdown support
Enhance the design of UI components with the new Markdown support, including features such as bold, italic, strikethrough, and clickable URLs. This feature integrates with the following UI components: text, [switch](/3.x/docs/building-blocks/ui-designer/ui-component-types/form-elements/switch-form-field), and [message indicators](/3.x/docs/building-blocks/ui-designer/ui-component-types/indicators), ensuring a consistent and polished rendering experience.

Supported tags in the current iteration: bold, italic, bold italic, strikethrough and URLs.
#### Example:
* **Bold**
```markdown theme={"system"}
**Bold**
```
* *italic*
```markdown theme={"system"}
*italic*
```
* ***bold italic***
```markdown theme={"system"}
***bold italic***
```
* strikethrough
```markdown theme={"system"}
~~strikethrough~~
```
* URL
```markdown theme={"system"}
[URL](https://url.net)
```
Let's take the following Markdown text example:
```markdown theme={"system"}
Be among the *first* to receive updates about our **exciting new products** and releases. Subscribe [here](flowx.ai/newsletter) to stay in the loop! Do not ~~miss~~ it!
```
When running the process, it will be displayed like this:

## **Bug Fixes** 🔧
* Addressed a bug where the boundary sequence incorrectly moved to the parent node after copy-paste.
* Resolved an issue where the "Select Sequence" buttons within the node UI interface could overlap, ensuring a better user experience.
## **Changed** 🛠️
### Process Designer
#### Keyboard commands
* To edit a selected node label, press "R," which puts the label in edit mode. After editing, press "Enter" to save the new name.
* To copy selected nodes, use "CMD/Ctrl + C," and to paste them into a selected swimlane, use "CMD/Ctrl + V."
* To delete selected node(s), press "Backspace."
#### Data model
* Revamped Object-Level Settings with Enhanced Attribute Flags.

### Other Bits
* Bid farewell to the autoarrange function in the [**Process Designer**](../../docs/terms/flowx-process-designer).
## **Gremlins to Watch Out For** 🙁
* **Slider UI element**: Our slider component can be a bit mysterious at times. Currently, it enjoys a game of hide-and-seek with the correct value when sourced from process data.
* **Document preview UI element**: Our document preview component has a unique sense of style. It prefers to take up only a portion of the screen, even when told to "fill" the entire width. It's a rebel with a cause.
* **Business rules**: Our [**business rule**](../../docs/terms/business-rules) have a language barrier, but they're working on it. Changing the language of a business rule doesn't always lead to using the new language for execution. It's like they have a favorite phrase they won't let go of.
* **Process Designer**: Deleting a boundary node in the process designer and coming back from the UI Designer doesn't always clean up the associated sequence from the boundary event. It's like they left a party and forgot their hat.
* **Timer Events**:
* Our timer events can sometimes be a bit shy and not show up on the canvas when added after creating a new process version or branch. They need a little nudge to make their appearance after refreshing the page.
* Mandatory Fields Error Messages: Our system has a sense of humor when it comes to mandatory fields. It forgets to deliver the error messages when these fields are left empty. It's a bit too laid-back.
* Timer Expression Validators: Our timer expressions can be a bit wild and free-spirited because they don't always follow the rules. We haven't implemented their validators yet, so they do as they please.
* Timer Events on Read-Only Process Versions: Our timer events are a bit of a rebel when it comes to read-only process versions. They refuse to disable their fields, as if they have a mind of their own.
* **Versioning**:
* Our versioning system can be a bit finicky at times. It might throw a server error when merging branches or refuse to ignore the Flowx UUID key, causing conflicts. And sometimes, the branching graph prefers to play hide-and-seek during import/export. But hey, we're working on it!
* Swimlane Allocation UI: Even after a process definition is deleted, you might catch a glimpse of the UI for swimlane allocation. It's like a ghost from the past that refuses to fade away.
## **Additional information**
For deployment guidelines, refer to:
[Deployment guidelines v3.4.0](./deployment-guidelines-v3.4.0)
# Deployment guidelines v3.4.1
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.1-september-2023/deployment-guidelines-v3.4.1
Do not forget, when upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FLOWX.AI Designer > Platform Status**.
After updating to **3.4.1** FLOWX.AI release, it is not possible to import old process definitions into the new platform release (available for exports from releases **\< 3.4.1**).

## Component versions
| 🧩 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 | 2.9.0 | 2.8.1 | 2.8.0 | 2.7.0 | 2.6.0 | 2.5.0 | 2.4.0 | 2.3.0 | 2.2.0 |
| ------------------------------ | ---------- | ------ | ------- | ------ | ------ | ------ | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| **process-engine** | **4.3.1** | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 | 0.4.49 | 0.4.44 | 0.4.42 | 0.4.42 | 0.4.36 | 0.4.29 | 0.4.22 | 0.4.21 | 0.4.18 |
| **admin** | **3.3.7** | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 | 0.3.55 | 0.3.47 | 0.3.43 | 0.3.40 | 0.3.36 | 0.3.34 | 0.3.29 | 0.3.23 | 0.3.21 |
| **designer** | **3.35.6** | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 | 2.14.4 |
| **@flowx/ui-sdk** | **3.35.6** | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.35.6** | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.35.6** | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | **3.35.6** | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 | 0.2.10 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.5 |
| **flowx-process-renderer** | - | - | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 | 2.14.4 |
| **cms-core** | **1.3.9** | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.20 | 0.2.20 | 0.2.18 | 0.2.17 |
| **scheduler-core** | **1.2.4** | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.24 | 0.0.24 | 0.0.23 | 0.0.23 |
| **events-gateway** | **1.1.0** | 1.0.6 | 1.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **notification-plugin** | **2.0.8** | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 | 1.0.198 | 1.0.198 | 1.0.197 | 1.0.194 | 1.0.194 | 1.0.191 | 1.0.191 | 1.0.190 | 1.0.190 |
| **document-plugin** | **2.0.8** | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 | 1.0.42 | 1.0.41 | 1.0.38 | 1.0.37 | 1.0.37 | 1.0.35 | 1.0.35 | 1.0.31 | 1.0.31 |
| **ocr-plugin** | **1.0.12** | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.0.109 | 0.0.109 |
| **license-core** | **1.0.7** | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.19 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.15 | 0.1.15 | 0.1.13 | 0.1.13 |
| **customer-management-plugin** | **0.2.8** | 0.2.6 | 0.2.4 | 0.2.3 | 0.2.3 | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.20 | 0.1.20 | 0.1.18 | 0.1.18 |
| **task-management-plugin** | **3.0.3** | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 | 0.0.28 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.22 | 0.0.22 | 0.0.21 | 0.0.21 |
| **data-search** | **0.2.6** | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **audit-core** | **2.1.3** | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **reporting-plugin** | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **advancing-controller** | **0.3.5** | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **iOS renderer** | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FLOWX.AI 4.0**, the `paperflow-web-components` library will be deprecated. Instead, the new components can be found in `@flowx/ui-toolkit`.
### Recommended Versions for FLOWX.AI 3.4.1 ☑️
| FLOWX.AI Platform Version | Component name | Recommended version (tested versions) |
| ------------------------- | ----------------- | ------------------------------------- |
| 3.4.1 | Keycloak | 18.0.x |
| 3.4.1 | Kafka | 3.2.3 |
| 3.4.1 | PostgreSQL | 14.3.0 |
| 3.4.1 | MongoDB | 5.0.8 |
| 3.4.1 | Redis | 6.2.6 |
| 3.4.1 | Elasticsearch | 7.17 |
| 3.4.1 | OracleDB | 19.8.0.0.0 |
| 3.4.1 | Angular (Web SDK) | 15.0.0 |
FlowX.AI supports any version of the third-party components listed as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
# Additional configuration
This section outlines the supplementary configurations required to leverage the newly introduced features within FLOWX.AI (for a smooth transition please check first what's new in [3.4.0](../v3.4.0-september-2023/v3.4.0-september-2023.md)).
## Scheduler configuration
```yaml theme={"system"}
scheduler:
thread-count: 30 # Configure the number of threads to be used for sending expired messages.
callbacks-thread-count: 60 # Configure the number of threads for handling Kafka responses, whether the message was successfully sent or not
cronExpression: "*/10 * * * * *" #every 10 seconds
retry: # new retry mechanism
max-attempts: 3
seconds: 1
thread-count: 3
cronExpression: "*/10 * * * * *" #every 10 seconds
cleanup:
cronExpression: "*/25 * * * * *" #every 25 seconds
```
### Explanation
* `SCHEDULER_THREAD_COUNT` - Used to configure the number of threads to be used for sending expired.
* `CALLBACKS_THREAD_COUNT` - Used to configure the number of threads for handling Kafka responses, whether the message was successfully sent or not.
### New retry mechanism
* `SCHEDULER_RETRY_THREAD_COUNT` - Specify the number of threads to use for resending messages that need to be retried.
* `SCHEDULER_RETRY_MAX_ATTEMPTS` - This configuration parameter sets the number of retry attempts. For instance, if it's set to 3, it means that the system will make a maximum of three retry attempts for message resending.
* `SCHEDULER_RETRY_SECONDS` - This configuration parameter defines the time interval, in seconds, for retry attempts. For example, when set to 1, it indicates that the system will retry the operation after a one-second delay.
[Scheduler setup guide](../../docs/platform-setup-guides/scheduler-setup-guide)
## Revised Cache Key Organization
To ensure a smooth transition for the **3.4.1** release, it is crucial to make use of the clear cache endpoint with the following request body:
**Request:**
```http theme={"system"}
POST /api/internal/cache/clear
```
This endpoint is designed to purge Redis caches selectively. It will exclusively delete caches that are specified in the admin microservice properties under the property key: "application.redis.clearable-caches".
Request body:
```json theme={"system"}
{
"cacheNames": [
"events",
"admin",
"allowedSwimlanes",
"initiatedProcessFromStartEvent",
"flowx:core"
]
}
```
Please take note that after upgrading to the new system version, you should refrain from including the flowx:core cache in the request body when invoking the clear cache endpoint to avoid unintended consequences.
# v3.4.1 September 2023
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.1-september-2023/v3.4.1-september-2023
Welcome to the FLOWX.AI v3.4.1 patch release! In this update, we've fine-tuned your FLOWX.AI experience with fixes and enhancements. While it may not be a major version update, it's packed with valuable improvements.
## **What's new**
### Scheduler Configuration
* We've introduced a new configuration for the Scheduler microservice. Learn more in our [**deployment guidelines**](./deployment-guidelines-v3.4.1.md#scheduler-configuration).
## **Bug Fixes** 🔧
### Timer Events
* **Fixed Timer Events Shyness**
* We've given our timer events a little nudge, and they will now reliably appear on the canvas after refreshing the page.
* **Resolved Mandatory Fields Error Messages**
* Our system has become more serious about mandatory fields and will now consistently display error messages when required fields are empty.
* **Improved Timer Expression Validators**
* We've implemented validators for timer expressions, ensuring they follow the rules as expected.
* **Fixed Timer Events in Read-Only Process Versions**
* Timer events will now behave appropriately and disable their fields in read-only process versions.
### Versioning
* **Enhanced Versioning System**
* We've made significant improvements to the versioning system to resolve these issues. Branch merging and UUID handling have been optimized, and the branching graph now consistently appears during import/export operations.
### Swimlane allocation
* **Removed Lingering UI After Process Definition Deletion**
* We've cleared away this lingering UI, so you won't encounter remnants of deleted process definitions in the swimlane allocation interface anymore.
### Revised Cache Key Organization
* Check the deployment guidelines for more information:
[Revised Cache Key Organization](deployment-guidelines-v3.4.1#revised-cache-key-organization)
### Other Bits
* Bid farewell to the autoarrange function in the **Process Designer**.
## **Gremlins to Watch Out For** 🙁
Keep an eye out for these quirks:
* **Slider UI element**: Our slider component can be a bit mysterious at times. Currently, it enjoys a game of hide-and-seek with the correct value when sourced from process data.
* **Document preview UI element**: Our document preview component has a unique sense of style. It prefers to take up only a portion of the screen, even when told to "fill" the entire width. It's a rebel with a cause.
* **Business rules**: Our business rule have a language barrier, but they're working on it. Changing the language of a business rule doesn't always lead to using the new language for execution. It's like they have a favorite phrase they won't let go of.
* **Process Designer**: Deleting a boundary node in the process designer and coming back from the UI Designer doesn't always clean up the associated sequence from the boundary event. It's like they left a party and forgot their hat.
## **Additional information**
For deployment guidelines, refer to:
[Deployment guidelines v3.4.1](./deployment-guidelines-v3.4.1)
# Deployment guidelines v3.4.2
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.2-october-2023/deployment-guidelines-v3.4.2
Do not forget, when upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FLOWX.AI Designer > Platform Status**.
After updating to **3.4.2** FLOWX.AI release, it is not possible to import old process definitions into the new platform release (available for exports from releases **\< 3.4.2**).

## Component versions
| 🧩 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 | 2.9.0 | 2.8.1 | 2.8.0 | 2.7.0 | 2.6.0 | 2.5.0 | 2.4.0 | 2.3.0 |
| ------------------------------ | ---------- | ------ | ------ | ------- | ------ | ------ | ------ | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| **process-engine** | **4.3.2** | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 | 0.4.49 | 0.4.44 | 0.4.42 | 0.4.42 | 0.4.36 | 0.4.29 | 0.4.22 | 0.4.21 |
| **admin** | **3.3.10** | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 | 0.3.55 | 0.3.47 | 0.3.43 | 0.3.40 | 0.3.36 | 0.3.34 | 0.3.29 | 0.3.23 |
| **designer** | **3.35.9** | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 |
| **@flowx/ui-sdk** | **3.35.9** | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.35.9** | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.35.9** | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | **3.35.9** | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 | 0.2.10 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 |
| **cms-core** | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.20 | 0.2.20 | 0.2.18 |
| **scheduler-core** | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.24 | 0.0.24 | 0.0.23 |
| **events-gateway** | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **notification-plugin** | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 | 1.0.198 | 1.0.198 | 1.0.197 | 1.0.194 | 1.0.194 | 1.0.191 | 1.0.191 | 1.0.190 |
| **document-plugin** | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 | 1.0.42 | 1.0.41 | 1.0.38 | 1.0.37 | 1.0.37 | 1.0.35 | 1.0.35 | 1.0.31 |
| **ocr-plugin** | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.0.109 |
| **license-core** | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.19 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.15 | 0.1.15 | 0.1.13 |
| **customer-management-plugin** | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.4 | 0.2.3 | 0.2.3 | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.20 | 0.1.20 | 0.1.18 |
| **task-management-plugin** | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 | 0.0.28 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.22 | 0.0.22 | 0.0.21 |
| **data-search** | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **audit-core** | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **reporting-plugin** | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **advancing-controller** | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **iOS renderer** | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FlowX 4.0**, the `paperflow-web-components` library will be deprecated. Instead, the new components can be found in `@flowx/ui-toolkit`.
### Recommended Versions for FLOWX.AI 3.4.2 ☑️
| FLOWX.AI Platform Version | Component name | Recommended version (tested versions) |
| ------------------------- | ----------------- | ------------------------------------- |
| 3.4.2 | Keycloak | 18.0.x |
| 3.4.2 | Kafka | 3.2.3 |
| 3.4.2 | PostgreSQL | 14.3.0 |
| 3.4.2 | MongoDB | 5.0.8 |
| 3.4.2 | Redis | 6.2.6 |
| 3.4.2 | Elasticsearch | 7.17 |
| 3.4.2 | OracleDB | 19.8.0.0.0 |
| 3.4.2 | Angular (Web SDK) | 15.0.0 |
FlowX.AI supports any version of the third-party components listed as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
# Additional configuration
## Designer values configuration
New environment variable
* `LEGACY_HTTP_VERSION`: false (default value) - Set this to `true` only for HTTP versions \< 2 in order for SSE to work properly. Can be omitted otherwise.
# v3.4.2 October 2023
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.2-october-2023/v3.4.2-october-2023
Welcome to the FLOWX.AI v3.4.2 patch release! This update brings several enhancements and fixes to improve your FLOWX.AI experience. While it may not be a major version update, it's packed with valuable improvements.
## **What's new**
### Web Renderer - Enhanced SSE Connection Handling
* Introducing the `LEGACY_HTTP_VERSION` variable: When set to `true`, it will automatically disconnect the Server-Sent Events (SSE) tab when it becomes inactive, and then seamlessly reconnect and retrieve the status when it becomes active. By default, `LEGACY_HTTP_VERSION` is set to `false`, meaning there will be no SSE disconnection when switching tabs, ensuring a smoother user experience.
Set `LEGACY_HTTP_VERSION` to `true` only for HTTP versions \< 2 to ensure proper SSE functionality. It can be omitted for other cases.
## **Bug Fixes** 🔧
* Addressed various bugs from previous versions to enhance stability and reliability.
### Other Bits
* We've bid farewell to the autoarrange function in the [**Process Designer**](../../docs/terms/flowx-process-designer).
## **Gremlins to Watch Out For** 🙁
Keep an eye out for these quirks:
* **Slider UI element**: Our slider component can be a bit mysterious at times. Currently, it enjoys a game of hide-and-seek with the correct value when sourced from process data.
* **Document preview UI element**: Our document preview component has a unique sense of style. It prefers to take up only a portion of the screen, even when told to "fill" the entire width. It's a rebel with a cause.
* **Business rules**: Our business rule have a language barrier, but they're working on it. Changing the language of a business rule doesn't always lead to using the new language for execution. It's like they have a favorite phrase they won't let go of.
* **Process Designer**: Deleting a boundary node in the process designer and coming back from the UI Designer doesn't always clean up the associated sequence from the boundary event. It's like they left a party and forgot their hat.
* **Datepicker Date Transformation**: Our Datepicker seems to possess a hidden talent. It mysteriously transforms random text into the current date when used with validators in UI Designer.
* **Text Element Issue**: Our text element tends to vanish when set to "0" or "-". Expected it to show up, but it's playing hide-and-seek instead!
## **Additional information**
For deployment guidelines, refer to:
[Deployment guidelines v3.4.2](./deployment-guidelines-v3.4.2)
# Deployment guidelines v3.4.3
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.3-october-2023/deployment-guidelines-v3.4.3
Do not forget, when upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FLOWX.AI Designer > Platform Status**.
After updating to **3.4.3** FlowX release, it is not possible to import old process definitions into the new platform release (available for exports from releases **\< 3.4.3**).

## Component versions
| 🧩 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 | 2.9.0 | 2.8.1 | 2.8.0 | 2.7.0 | 2.6.0 | 2.5.0 | 2.4.0 |
| ------------------------------ | ----------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| **process-engine** | **4.3.5** | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 | 0.4.49 | 0.4.44 | 0.4.42 | 0.4.42 | 0.4.36 | 0.4.29 | 0.4.22 |
| **admin** | **3.3.19** | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 | 0.3.55 | 0.3.47 | 0.3.43 | 0.3.40 | 0.3.36 | 0.3.34 | 0.3.29 |
| **designer** | **3.35.18** | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 |
| **@flowx/ui-sdk** | **3.35.18** | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.35.18** | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.35.18** | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | **3.35.18** | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 | 0.2.10 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 |
| **cms-core** | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.20 | 0.2.20 |
| **scheduler-core** | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.24 | 0.0.24 |
| **events-gateway** | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **notification-plugin** | **2.0.9** | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 | 1.0.198 | 1.0.198 | 1.0.197 | 1.0.194 | 1.0.194 | 1.0.191 | 1.0.191 |
| **document-plugin** | **2.0.10** | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 | 1.0.42 | 1.0.41 | 1.0.38 | 1.0.37 | 1.0.37 | 1.0.35 | 1.0.35 |
| **ocr-plugin** | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 |
| **license-core** | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.19 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.15 | 0.1.15 |
| **customer-management-plugin** | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.4 | 0.2.3 | 0.2.3 | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.20 | 0.1.20 |
| **task-management-plugin** | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 | 0.0.28 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.22 | 0.0.22 |
| **data-search** | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **audit-core** | **2.2.0** | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **reporting-plugin** | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **advancing-controller** | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **iOS renderer** | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FlowX 4.0**, the `paperflow-web-components` library will be deprecated. Instead, the new components can be found in `@flowx/ui-toolkit`.
### Recommended Versions for FLOWX.AI 3.4.3 ☑️
| FLOWX.AI Platform Version | Component name | Recommended version (tested versions) |
| ------------------------- | ----------------- | ------------------------------------- |
| 3.4.3 | Keycloak | 18.0.x |
| 3.4.3 | Kafka | 3.2.3 |
| 3.4.3 | PostgreSQL | 14.3.0 |
| 3.4.3 | MongoDB | 5.0.8 |
| 3.4.3 | Redis | 6.2.6 |
| 3.4.3 | Elasticsearch | 7.17 |
| 3.4.3 | OracleDB | 19.8.0.0.0 |
| 3.4.3 | Angular (Web SDK) | 15.0.0 |
FlowX.AI supports any version of the third-party components listed as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
# v3.4.3 October 2023
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.3-october-2023/v3.4.3-october-2023
In FLOWX.AI version 3.4.3, we've addressed several bugs to improve the stability and reliability of the platform. Here are the key bug fixes in this release.
## **Bug Fixes** 🔧
### Notification and Document plugins
* Fixed limited entries problem in Document plugin and Notification plugin, previously restricted to 20 entries.
* Resolved the issue causing the Document plugin to restart when starting with lag in Kafka topics.
### Web SDK
* Addressed CSS class assignment for `` issue, ensuring correct class assignment.
* Fixed a UI issue where adding a left margin to COLLECTION\_PROTOTYPE caused it to extend beyond the parent card.
* Corrected a bug in certain UI elements where selecting a 2nd level child value didn't clear when the parent value was updated.
* Resolved rendering issues for '0' and '-' values in text elements.
### Designer and Versioning
* Fixed the Designer issue where options in certain UI elements weren't displayed in dropdowns after previous selections.
* Resolved the Import Published Version Selection issue during process import, now displaying only available versions.
### Admin
* Fixed an issue that previously prevented the creation of new versions for processes with swimlane names containing empty spaces.
## **Other Bits**
* We've bid farewell to the autoarrange function in the [**Process Designer**](../../docs/terms/flowx-process-designer).
## **Gremlins to Watch Out For** 🙁
Keep an eye out for these quirks:
* **Document preview UI element**: Our document preview component has a unique sense of style. It prefers to take up only a portion of the screen, even when told to "fill" the entire width. It's a rebel with a cause.
* **Business rules**: Our business rule have a language barrier, but they're working on it. Changing the language of a business rule doesn't always lead to using the new language for execution. It's like they have a favorite phrase they won't let go of.
* **Process Designer**: Deleting a boundary node in the process designer and coming back from the UI Designer doesn't always clean up the associated sequence from the boundary event. It's like they left a party and forgot their hat.
* **Datepicker Date Transformation**: Our Datepicker seems to possess a hidden talent. It mysteriously transforms random text into the current date when used with validators in UI Designer.
## **Additional information**
For deployment guidelines, refer to:
[Deployment guidelines v3.4.3](./deployment-guidelines-v3.4.3)
# Deployment guidelines v3.4.4
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.4-november-2023/deployment-guidelines-v3.4.4
Do not forget, when upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FLOWX.AI Designer > Platform Status**.
After updating to **3.4.4** FLOWX.AI release, it is not possible to import old process definitions into the new platform release (available for exports from releases **\< 3.4.4**).

## Component versions
| 🧩 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 | 2.9.0 | 2.8.1 | 2.8.0 | 2.7.0 | 2.6.0 | 2.5.0 |
| ------------------------------ | ------------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| **process-engine** | **4.3.5-2v1** | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 | 0.4.49 | 0.4.44 | 0.4.42 | 0.4.42 | 0.4.36 | 0.4.29 |
| **admin** | **3.3.19-1** | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 | 0.3.55 | 0.3.47 | 0.3.43 | 0.3.40 | 0.3.36 | 0.3.34 |
| **designer** | **3.35.18-1** | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 |
| **@flowx/ui-sdk** | **3.35.18-1** | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.35.18-1** | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.35.18-1** | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | **3.35.18-1** | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 | 0.2.10 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 |
| **cms-core** | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.20 |
| **scheduler-core** | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.24 |
| **events-gateway** | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **notification-plugin** | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 | 1.0.198 | 1.0.198 | 1.0.197 | 1.0.194 | 1.0.194 | 1.0.191 |
| **document-plugin** | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 | 1.0.42 | 1.0.41 | 1.0.38 | 1.0.37 | 1.0.37 | 1.0.35 |
| **ocr-plugin** | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 |
| **license-core** | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.19 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.15 |
| **customer-management-plugin** | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.4 | 0.2.3 | 0.2.3 | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.20 |
| **task-management-plugin** | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 | 0.0.28 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.22 |
| **data-search** | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **audit-core** | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **reporting-plugin** | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **advancing-controller** | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **iOS renderer** | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FlowX 4.0**, the `paperflow-web-components` library will be deprecated. Instead, the new components can be found in `@flowx/ui-toolkit`.
### Recommended Versions for FLOWX.AI 3.4.4 ☑️
| FLOWX.AI Platform Version | Component name | Recommended version (tested versions) |
| ------------------------- | ----------------- | ------------------------------------- |
| 3.4.4 | Keycloak | 18.0.x |
| 3.4.4 | Kafka | 3.2.3 |
| 3.4.4 | PostgreSQL | 14.3.0 |
| 3.4.4 | MongoDB | 5.0.8 |
| 3.4.4 | Redis | 6.2.6 |
| 3.4.4 | Elasticsearch | 7.17 |
| 3.4.4 | OracleDB | 19.8.0.0.0 |
| 3.4.4 | Angular (Web SDK) | 15.0.0 |
FlowX.AI supports any version of the third-party components listed as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
# v3.4.4 November 2023
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.4-november-2023/v3.4.4-november-2023
In version 3.4.4 of FLOWX.AI, we have addressed some issues to improve the stability and reliability of the platform. Here are the key bug fixes in this release:
## **Bug Fixes** 🔧
### FLOWX.AI Engine 🚂
* Fixed an issue where sending an extra key when using [**bulk operations**](../../docs/platform-setup-guides/flowx-engine-setup-guide#topics-related-to-the-task-management-plugin) was not working as expected. Now you can attach extra keys to the header and they will be copied to the response. See the example below:

### Web SDK
* Fixed a small performance issue
## **Other Bits**
* We've bid farewell to the autoarrange function in the [**Process Designer**](../../docs/terms/flowx-process-designer).
## **Gremlins to Watch Out For** 🙁
Keep an eye out for these quirks:
* **Document preview UI element**: Our document preview component has a unique sense of style. It prefers to take up only a portion of the screen, even when told to "fill" the entire width. It's a rebel with a cause.
* **Business rules**: Our business rule have a language barrier, but they're working on it. Changing the language of a business rule doesn't always lead to using the new language for execution. It's like they have a favorite phrase they won't let go of.
* **Process Designer**: Deleting a boundary node in the process designer and coming back from the UI Designer doesn't always clean up the associated sequence from the boundary event. It's like they left a party and forgot their hat.
* **Datepicker Date Transformation**: Our Datepicker seems to possess a hidden talent. It mysteriously transforms random text into the current date when used with validators in UI Designer.
## **Additional information**
For deployment guidelines, refer to:
[Deployment guidelines v3.4.4](./deployment-guidelines-v3.4.4)
# Deployment guidelines v3.4.5
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.5-november-2023/deployment-guidelines-v3.4.5
Do not forget, when upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FLOWX.AI Designer > Platform Status**.
After updating to **3.4.5** FLOWX.AI release, it is not possible to import old process definitions into the new platform release (available for exports from releases **\< 3.4.5**).

## Component versions
| 🧩 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 | 2.9.0 | 2.8.1 | 2.8.0 | 2.7.0 | 2.6.0 |
| ------------------------------ | ------------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| **process-engine** | **4.3.5-2v2** | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 | 0.4.49 | 0.4.44 | 0.4.42 | 0.4.42 | 0.4.36 |
| **admin** | **3.3.19-3** | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 | 0.3.55 | 0.3.47 | 0.3.43 | 0.3.40 | 0.3.36 |
| **designer** | **3.35.18-2** | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 |
| **@flowx/ui-sdk** | **3.35.18-2** | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.35.18-2** | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.35.18-2** | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | **3.35.18-2** | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 | 0.2.10 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 |
| **cms-core** | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 |
| **scheduler-core** | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 |
| **events-gateway** | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **notification-plugin** | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 | 1.0.198 | 1.0.198 | 1.0.197 | 1.0.194 | 1.0.194 |
| **document-plugin** | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 | 1.0.42 | 1.0.41 | 1.0.38 | 1.0.37 | 1.0.37 |
| **ocr-plugin** | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 |
| **license-core** | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.19 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.18 |
| **customer-management-plugin** | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.4 | 0.2.3 | 0.2.3 | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 |
| **task-management-plugin** | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 | 0.0.28 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 |
| **data-search** | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **audit-core** | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **reporting-plugin** | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **advancing-controller** | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **iOS renderer** | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FlowX 4.0**, the `paperflow-web-components` library will be deprecated. Instead, the new components can be found in `@flowx/ui-toolkit`.
### Recommended Versions for FLOWX.AI 3.4.5 ☑️
| FLOWX.AI Platform Version | Component name | Recommended version (tested versions) |
| ------------------------- | ----------------- | ------------------------------------- |
| 3.4.5 | Keycloak | 18.0.x |
| 3.4.5 | Kafka | 3.2.3 |
| 3.4.5 | PostgreSQL | 14.3.0 |
| 3.4.5 | MongoDB | 5.0.8 |
| 3.4.5 | Redis | 6.2.6 |
| 3.4.5 | Elasticsearch | 7.17 |
| 3.4.5 | OracleDB | 19.8.0.0.0 |
| 3.4.5 | Angular (Web SDK) | 15.0.0 |
FlowX.AI supports any version of the third-party components listed as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
# v3.4.5 November 2023
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.5-november-2023/v3.4.5-november-2023
In version 3.4.5 of FLOWX.AI, we have addressed some issues to improve the stability and reliability of the platform. Here are the key bug fixes in this release:
## **Changed** 🛠️
### Process Versioning
* **Delete process definition** - After deleting or renaming a process definition, you can now add a new one with the same name, whether manually or through import, without any limitations or constraints.
## **Bug Fixes** 🔧
### Versioning
* Our version control got tangled in a game of interdimensional hopscotch, leaving branches stranded without their past travel tickets. We've straightened out the interdimensional portals now, ensuring that branches maintain their historical travel logs. No more lost branches in the space-time continuum!
### Web SDK
* **UI Designer** - We trained our containers in the art of origami, hoping they'd master the art of rearranging themselves gracefully. Unfortunately, they got carried away with their newfound skill and refused to listen when asked to reorder themselves properly. **We've had a serious talk with them, and now they promise to behave! You can copy, paste, and rearrange containers without them folding into chaos.**
## **Other Bits**
* We've bid farewell to the autoarrange function in the [**Process Designer**](../../docs/terms/flowx-process-designer).
## **Gremlins to Watch Out For** 🙁
Keep an eye out for these quirks:
* **Document preview UI element**: Our document preview component has a unique sense of style. It prefers to take up only a portion of the screen, even when told to "fill" the entire width. It's a rebel with a cause.
* **Business rules**: Our business rule have a language barrier, but they're working on it. Changing the language of a business rule doesn't always lead to using the new language for execution. It's like they have a favorite phrase they won't let go of.
* **Process Designer**: Deleting a boundary node in the process designer and coming back from the UI Designer doesn't always clean up the associated sequence from the boundary event. It's like they left a party and forgot their hat.
* **Datepicker Date Transformation**: Our Datepicker seems to possess a hidden talent. It mysteriously transforms random text into the current date when used with validators in UI Designer.
## **Additional information**
For deployment guidelines, refer to:
[Deployment guidelines v3.4.5](./deployment-guidelines-v3.4.5)
# Deployment guidelines v3.4.6
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.6-december-2023/deployment-guidelines-v3.4.6
Do not forget, when upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FLOWX.AI Designer > Platform Status**.
After updating to **3.4.6** FLOWX.AI release, it is not possible to import old process definitions into the new platform release (available for exports from releases **\< 3.4.6**).

## Component versions
| 🧩 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 | 2.9.0 | 2.8.1 | 2.8.0 | 2.7.0 |
| ------------------------------ | ------------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| **process-engine** | **4.3.5-2v6** | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 | 0.4.49 | 0.4.44 | 0.4.42 | 0.4.42 |
| **admin** | **3.3.19-4** | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 | 0.3.55 | 0.3.47 | 0.3.43 | 0.3.40 |
| **designer** | **3.35.18-3** | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 |
| **@flowx/ui-sdk** | **3.35.18-3** | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.35.18-3** | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.35.18-3** | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | **3.35.18-3** | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 | 0.2.10 | 0.2.6 | 0.2.6 | 0.2.6 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 |
| **cms-core** | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 |
| **scheduler-core** | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 |
| **events-gateway** | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - | - | - | - | - | - | - | - | - | - |
| **notification-plugin** | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 | 1.0.198 | 1.0.198 | 1.0.197 | 1.0.194 |
| **document-plugin** | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 | 1.0.42 | 1.0.41 | 1.0.38 | 1.0.37 |
| **ocr-plugin** | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 |
| **license-core** | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.19 | 0.1.18 | 0.1.18 | 0.1.18 |
| **customer-management-plugin** | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.4 | 0.2.3 | 0.2.3 | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 |
| **task-management-plugin** | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 | 0.0.28 | 0.0.28 | 0.0.27 | 0.0.27 |
| **data-search** | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a |
| **audit-core** | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **reporting-plugin** | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **advancing-controller** | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **iOS renderer** | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FlowX v4.0**, the `paperflow-web-components` library will be deprecated. Instead, the new components can be found in `@flowx/ui-toolkit`.
### Recommended Versions for FLOWX.AI 3.4.6 ☑️
| FLOWX.AI Platform Version | Component name | Recommended version (tested versions) |
| ------------------------- | ----------------- | ------------------------------------- |
| 3.4.6 | Keycloak | 18.0.x |
| 3.4.6 | Kafka | 3.2.3 |
| 3.4.6 | PostgreSQL | 14.3.0 |
| 3.4.6 | MongoDB | 5.0.8 |
| 3.4.6 | Redis | 6.2.6 |
| 3.4.6 | Elasticsearch | 7.17 |
| 3.4.6 | OracleDB | 19.8.0.0.0 |
| 3.4.6 | Angular (Web SDK) | 15.0.0 |
FlowX.AI supports any version of the third-party components listed as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
# v3.4.6 December 2023
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.6-december-2023/v3.4.6-december-2023
In version 3.4.6 of FLOWX.AI, we have addressed some issues to improve the stability and reliability of the platform. Here are the key bug fixes in this release:
## **Bug Fixes** 🔧
### Process Designer
* Cured a case of the "Start-Subprocess Stumper": now configuring existing start subprocess actions is a breeze! No more invisible barriers.
### Process Engine
* Liberated process versioning on Oracle from its migration woes! No more version control drama, it's all harmonious now.
* Put an end to the confusion: JavaScript arrays will no longer masquerade as Java maps. They've embraced their true identities.
* Our token instance ID DB index on Oracle has been reincarnated! It’s back and better than ever, ready to keep track of those elusive tokens.
### Versioning
* Put an end to the process definition merge branch mayhem! No more tangled branches, just clean, pristine definitions merging like old friends at a reunion.
## **Other Bits**
* We've bid farewell to the autoarrange function in the [**Process Designer**](../../docs/terms/flowx-process-designer).
## **Gremlins to Watch Out For** 🙁
Keep an eye out for these quirks:
* **Document preview UI element**: Our document preview component has a unique sense of style. It prefers to take up only a portion of the screen, even when told to "fill" the entire width. It's a rebel with a cause.
* **Business rules**: Our business rule have a language barrier, but they're working on it. Changing the language of a business rule doesn't always lead to using the new language for execution. It's like they have a favorite phrase they won't let go of.
* **Process Designer**: Deleting a boundary node in the process designer and coming back from the UI Designer doesn't always clean up the associated sequence from the boundary event. It's like they left a party and forgot their hat.
* **Datepicker Date Transformation**: Our Datepicker seems to possess a hidden talent. It mysteriously transforms random text into the current date when used with validators in UI Designer.
## **Additional information**
For deployment guidelines, refer to:
[Deployment guidelines v3.4.6](./deployment-guidelines-v3.4.6)
# Deployment guidelines v3.4.7
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.7-january-2024/deployment-guidelines-v3.4.7
Do not forget, when upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FLOWX.AI Designer > Platform Status**.
After upgrading to **3.4.7** FlowX.AI release, it is not possible to import old process definitions into the new platform release (exported from releases **\< 3.4.7**).

## Component versions
| 🧩 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 |
| ------------------------------ | -------------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ | -------- | ------- | ------- | ------- | ------- |
| **process-engine** | **4.3.5-2v11** | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 |
| **admin** | **3.3.19-6** | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 |
| **designer** | **3.35.18-5** | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 |
| **@flowx/ui-sdk** | **3.35.18-5** | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.35.18-5** | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.35.18-5** | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | **3.35.18-5** | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 |
| **cms-core** | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 |
| **scheduler-core** | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 |
| **events-gateway** | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - | - | - | - | - | - |
| **notification-plugin** | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 |
| **document-plugin** | **2.0.10-1** | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 |
| **ocr-plugin** | **1.0.15** | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 |
| **license-core** | **1.1.0** | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 |
| **customer-management-plugin** | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.4 | 0.2.3 | 0.2.3 | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 |
| **task-management-plugin** | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 |
| **data-search** | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a |
| **audit-core** | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a |
| **reporting-plugin** | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a |
| **advancing-controller** | **0.3.5-1** | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a |
| **iOS renderer** | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a |
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FlowX v4.0**, the `paperflow-web-components` library will be deprecated. Instead, the new components can be found in `@flowx/ui-toolkit`.
### Third-party recommended component versions
| FLOWX.AI Platform Version | Component name | Recommended versions (tested versions) |
| ------------------------- | ----------------- | -------------------------------------- |
| 3.4.7 | Keycloak | 18.x |
| 3.4.7 | Kafka | 3.2.3 |
| 3.4.7 | PostgreSQL | 14.3.0 |
| 3.4.7 | MongoDB | 5.0.8 |
| 3.4.7 | Redis | 6.2.6 |
| 3.4.7 | Elasticsearch | 7.17 |
| 3.4.7 | OracleDB | 19.8.0.0.0 |
| 3.4.7 | Angular (Web SDK) | 15.0.0 |
FlowX.AI supports any listed version of the prerequisite third-party components in the table above.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
## Additional Configuration
### Process Engine
Introducing a new environment variable designed to facilitate the coordinated or independent expiration of subprocesses within a parent process.
| Environment Variable | Default Value | Explanation |
| ----------------------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------- |
| `FLOWX_PROCESS_EXPIRE_SUBPROCESSES` | true | When set to true, expiration of a parent process triggers simultaneous expiration of all associated subprocesses |
For further details, refer to the documentation [**here**](../../3.x/setup-guides/flowx-engine-setup-guide/engine-setup#managing-subprocesses-expiration).
### Documents Plugin
The DPI value for the PDF to JPEG conversion can now be configured via the `FLOWX_CONVERT_DPI` environment variable.
| Environment Variable | Default Value | Explanation |
| -------------------- | ------------- | ---------------------------------------------------------------------------------------------------------- |
| `FLOWX_CONVERT_DPI` | 150 | Sets the DPI (dots per inch) for PDF to JPEG conversion. Higher values result in higher resolution images. |
For further details, refer to the documentation [**here**](../../3.x/setup-guides/plugins-setup-guide/documents-plugin-setup#conversion).
### OCR Plugin
The following environment variables were introduced to control the acceptable aspect ratio range for recognizing signed documents in OCR processes. Here's a brief description of each:
| Environment Variable | Definition | Default Value |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------- |
| `OCR_SIGNATURE_MAX_RATIO` | This variable sets the maximum acceptable aspect ratio for a signed scanned document (the OCR plugin will recognize a signature only if the document ratio is greater than or equal to the specified minimum ratio) | `1.43` |
| `OCR_SIGNATURE_MIN_RATIO` | This variable sets the minimum acceptable aspect ratio for a signed scanned document (in this context, the OCR plugin will consider a detected signature only if the document aspect ratio is less than or equal to the specified maximum ratio) | `1.39` |
The plugin has been tested with aspect ratio values between 1.38 and 1.43. However, caution is advised when using untested values outside this range, as they may potentially disrupt the functionality. Adjust these parameters at your own risk and consider potential consequences, as untested values might lead to plugin instability or undesired behavior.
For further details, refer to the documentation [**here**](../../3.x/setup-guides/plugins-setup-guide/ocr-plugin-setup#control-aspect-ratio).
# Release Notes
Source: https://docs.flowx.ai/release-notes/overview
🚀 Welcome to FlowX.AI Release Notes.
Stay updated with the latest features and improvements. Follow the Release Notes space to discover what's happening in the FlowX.AI world and the exciting updates we have for you.
**Long Term Support (LTS) Versions:** LTS versions receive extended support with security updates and critical bug fixes. Currently, **versions 4.7.x and 5.1.0** are our LTS releases, recommended for production environments requiring stability and long-term support.
🚀 Introducing Release 5.2.0 - Released on **November 10th, 2025**
🛡️ **LTS Release** 5.1.1 - Released on **November 10th, 2025**
🛡️ **LTS Release** 4.7.9 - Released on **October 16th, 2025**
🛡️ **LTS Release** 5.1.0 - Released on **October 2nd, 2025**
🛡️ **LTS Release** 4.7.8 - Released on **September 16th, 2025**
🛡️ **LTS Release** 4.7.7 - Released on **August 20th, 2025**
🚀 Introducing Release 5.0.0 - Released on **July 31st, 2025**
🛡️ **LTS Release** 4.7.6 - Released on **July 18th, 2025**
🛡️ **LTS Release** 4.7.5 - Released on **June 19th, 2025**
🛡️ **LTS Release** 4.7.4 - Released on **May 15th, 2025**
🛡️ **LTS Release** 4.7.3 - Released on **April 14th, 2025**
🛡️ **LTS Release** 4.7.2 - Released on **March 26th, 2025**
🛡️ **LTS Release** 4.7.1 - Released on **March 7th, 2025**
🛡️ **LTS Release** 4.7.0 - Released on **February 24th, 2025**
🛡️ **LTS Release** 4.6.1 - Released on **February 7th, 2025**
🛡️ **LTS Release** 4.6.0 - Released on **January 23rd, 2025**
🚀 Introducing Release 4.1.5 - Released on **September 23rd, 2024**
🚀 Introducing Release 4.1.4 - Released on **September 6th, 2024**
🚀 Introducing Release 4.1.3 - Released on **August 12th, 2024**
🚀 Introducing Release 4.1.2 - Released on **June 8th, 2024**
🚀 Introducing Release 4.1.1 - Released on **June 17th, 2024**
🚀 Introducing Release 4.1.0 - Released on **May 30th, 2024**
🚀 Introducing Release 4.0.0 - Released on **April 18th, 2024**
***
Explore the latest enhancements and fixes introduced in June 2024.
Explore the latest enhancements and fixes introduced in January 2024.
Explore the latest enhancements and fixes introduced in December 2023.
Explore the latest enhancements and fixes introduced in November 2023.
Discover the significant changes and improvements made in November 2023.
Discover the significant changes and improvements made in October 2023.
Discover the significant changes and improvements made in October 2023.
Discover the significant changes and improvements made in September 2023.
Discover the significant changes and improvements made in September 2023.
Discover the significant changes and improvements made in July 2023.
Discover the significant changes and improvements made in April 2023.
Discover the significant changes and improvements made in April 2023.
Discover the significant changes and improvements made in February 2023.
# Deployment guidelines v4.5.3
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.3-november-2024/deployment-guidelines-v4.5.3
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
It is not possible to import old process definitions from versions earlier than v4.5.0

## Component versions
| Component | 4.5.3 | 4.5.1 | 4.5.0 | 4.1.5 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------------------- | ---------- | ------ | ------ | -------- | -------- | -------- | -------- | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **7.4.3** | 7.4.1 | 7.3.5 | 6.1.7 | 6.1.6 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **6.2.7** | 6.2.2 | 6.1.11 | 5.1.7 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.22.9** | 5.18.0 | 5.9.8 | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | **5.22.9** | 5.18.0 | 5.9.8 | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | **5.22.9** | 5.18.0 | 5.9.8 | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | **5.22.9** | 5.18.0 | 5.9.8 | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.22.9** | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.22.9** | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.22.9** | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.22.9** | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.22.9** | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **4.2.1** | 4.1.10 | 4.1.6 | 3.0.3 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.2 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.3 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **5.1.1** | 5.0.4 | 5.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **5.1.1** | 5.0.4 | 5.0.4 | 4.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 4.1.3 | 4.1.3 | 4.1.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | **6.0.9** | 6.0.5 | 6.0.1 | 5.0.5 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | 3.1.2 | 3.1.2 | 3.1.2 | 2.0.5 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | 5.0.3 | 5.0.3 | 5.0.3 | 4.0.5 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | 3.0.3 | 3.0.3 | 3.0.3 | 2.0.3 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **1.6.0** | 1.4.3 | 1.3.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **application-manager** | **1.7.1** | 1.4.6 | 1.3.7 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **data-sync** | **1.5.0** | 1.3.6 | 1.3.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **iOS renderer** | 4.0.2 | 4.0.2 | 4.0.2 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 4.0.0 | 4.0.0 | 4.0.0 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
Note: The same container image and Helm chart are used for **Application Manager** and **Runtime Manager**.
## AI Agents
| Component | 4.5.3 | 4.5.1 | 4.5.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ---------- | ----- | ----- | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.3.4** | 1.0.6 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.0.5** | 1.0.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.3.6** | 1.2.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.0.20** | 1.0.4 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.0.10** | 1.0.7 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.5.3 | Keycloak | 22.x |
| 4.5.3 | Kafka | 3.2.x |
| 4.5.3 | PostgreSQL | 16.2.x |
| 4.5.3 | MongoDB | 7.0.x |
| 4.5.3 | Redis | 7.2.x |
| 4.5.3 | Elasticsearch | 7.17.x |
| 4.5.3 | OracleDB | 19.23.0.0.0 |
| 4.5.3 | Angular (Web SDK) | 17.x |
| 4.5.3 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
**Update default application**: If you have already updated to **v4.5.0** or **v4.5.1**, ensure that you create at least one new version of the default\_application(where all the process definitions from previous versions are migrated). This step verifies that your default application remains up to date with the latest changes:
1. Open the default\_application in the UI.
2. Check for a new version (either draft or committed).
3. Ensure that there is a new version compared to the committed version that was automatically created during the migration from Release 4.5.0.
4. Save or commit a new version if necessary.
This step ensures your application configurations are aligned with the latest migration requirements.
## New environment variables
### Runtime database integration
Both Notifications and Documents services now seamlessly connect to the runtime database.
Add the following environment variables:
* `SPRING_DATA_MONGODB_RUNTIME_ENABLED` - Enables Runtime MongoDB usage (default value: `true`)
* `RUNTIME_DB_USERNAME`: `app-runtime`
* `SPRING_DATA_MONGODB_RUNTIME_URI` - URI for connecting to the Runtime MongoDB instance - `app-runtime`
* `SPRING_DATA_MONGODB_STORAGE` - Specifies the storage type used for the Runtime MongoDB instance (Azure environments only)
* **Possible Values:** `mongodb`, `cosmosdb`
* **Default Value:** `mongodb`
### Data-sync service enhancements
Two new migrations added to the data-sync service.
Requires connectivity with Notifications and Documents databases for proper operation:
* `NOTIFICATIONPLUGIN_MONGO_USERNAME`: `mongodb-username` -> Represents the username for authenticating to the MongoDB database used by the Notifications Plugin.
* `NOTIFICATIONPLUGIN_MONGO_PASSWORD`: `mongodb-password` -> Represents the password associated with the `NOTIFICATIONPLUGIN_MONGO_USERNAME` for database access.
* `DOCUMENTPLUGIN_MONGO_USERNAME`: `mongodb-username` -> Represents the username for authenticating to the MongoDB database used by the Documents Plugin.
* `DOCUMENTPLUGIN_MONGO_PASSWORD`: `mongodb-password` -> Represents the password associated with the `DOCUMENTPLUGIN_MONGO_USERNAME` for database access.
* `FLOWX_DATASOURCE_DOCUMENTPLUGIN_URI`: Specifies the connection details for the MongoDB database used by the Documents Plugin.
* `FLOWX_DATASOURCE_NOTIFICATIONPLUGIN_URI`: Specifies the connection details for the MongoDB database used by the Notifications Plugin.
# FlowX.AI 4.5.3 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.3-november-2024/v4.5.3-november-2024
FlowX.AI 4.5.3 introduces advanced branch merging capabilities, enhanced table customization, plugin integration improvements, significant performance optimizations, and essential bug fixes. This release provides a robust, user-friendly experience with improved operational clarity and efficiency.
**Release Date:** 25th November 2024
## What's new? 🆕
The Merge Conflicts feature now delivers an elevated collaboration experience for managing branch versions. This update focuses on improving conflict detection, resolution efficiency, and seamless merging workflows.
### Key enhancements to merge conflicts
The 4.5.3 release introduces robust enhancements to merge conflict handling, focusing on user experience and operational clarity. Key updates include:
#### Merging without conflicts
Easily merge secondary branches into main or other branches when no conflicts are detected. The updated merge modal offers:
* A clean interface with streamlined branch selection.
* A mandatory, validated commit message field (max 50 characters).
* Real-time feedback for successful merges and branching graph updates.

#### Advanced conflict detection
A new Conflicts Detected Modal lists all resources with conflicting changes. Key highlights include:
* Clear grouping by resource type (e.g., Processes, Enumerations, Media Library).
* Scrollable lists and clickable entries to resolve specific conflicts.
* A detailed overview of source and target branch differences for full context.

#### Resource-Level conflict resolution
Conflicts can now be resolved directly at the resource level with an intuitive interface:
* **JSON Comparisons**: Differences highlighted with color-coded visuals (source: yellow, target: blue).

* **Navigation Support**: Jump between differences for efficient resolution.
* **Progress Tracking**: Mark resources as “Reviewed” or “Seen” to monitor resolution status.

#### Flexible merge overrides
Proceed with merges even if some conflicts are unresolved, using the Merge Anyway option.
* A confirmation modal outlines how unresolved conflicts will be handled (e.g., prioritizing source branch changes).
* Provides flexibility while maintaining control over merge outcomes.

***
### Plugin updates
#### Notifications & Documents plugins
Notifications and Documents plugins have been integrated as **application resources**.
**Deployment changes**: Added **Runtime Database Integration** and **Data-Sync Service Enhancements**
See the [**Deployment guidelines**](deployment-guidelines-v4.5.3#new-environment-variables) for more details.
***
### Rendering updates
#### Table enhancements
The table component has been enhanced with several new customization options to provide greater control over its appearance and functionality:
* **Min-Max Cell Width**: Define precise minimum and maximum widths for table cells to ensure optimal layout and readability.
* **Header Text Alignment**: Customize the alignment of header text for better visual consistency across tables.

* **Padding and Spacing**: Fine-tune padding and spacing properties for both rows and columns to improve table design and usability.

* **"No Data" Message Customization**: Introduced the ability to set a custom system message (through `sys_table_empty` system substitution tag) for tables when no data is available, offering a more user-friendly experience.


***
## Bug fixes 🐞
* Resolved multiple rendering issues for smoother user experience.
* Fixed substitution tag conflicts to ensure correct rendering during process execution.
* Addressed issues with enum mapper loss during merges when system names change.
* Improved conflict detection for swim lanes, including start/end nodes and node mismatches.
* Prevented errors during branch merges with updated allocation rules and modified views.
* Ensured proper deletion of workflows, notification templates, and document templates across merged branches.
* Resolved issues where `viewColumnFlowxUuid` became null after updates.
***
## Changes 🔧
### Enhanced merge experience
* Polished resource-specific conflict handling for better error feedback.
* Improved clarity and guidance in merge modals and resolution interfaces.
### Export and runtime improvements
* Enhanced allocation rule export capabilities.
* Added retry token support in process instance views for better runtime resilience.
***
## Known issues
We’re aware of a few quirks during merge conflicts and are working to fix them. Here’s a quick rundown:
1. **Nodes and Resources**: Some nodes aren’t returned when creating WIP versions:
* When creating a new WIP version after merging branches, some nodes are not returned, resulting in incomplete swimlanes. This issue occurs particularly when new nodes are added to both custom and default swimlanes across branches before merging. It may lead to missing nodes in the final version, affecting process completeness.
2. **Enumerations**:
* **Duplicate content values can be created during Merging**: Merging branches with enumeration updates can result in duplicate content values or child enums with the same code. This occurs when identical names are added to the same enum in different branches, bypassing backend validation. Instead of flagging a conflict, the merge proceeds, creating duplicate entries. This issue disrupts the expected uniqueness constraint for enumeration values.
* **Enum content values might not save correctly in some cases**: In specific scenarios involving transformations of content values into child enums across branches, content values added in one branch may not appear after merging. Despite accepting changes from the branch where the content value was added, the merged version omits it, leading to incomplete or inconsistent enumeration data.
3. **Swim Lanes**:
* **Branches with deleted swim lanes cannot be merged**: Branches with swim lanes deleted in separate versions cannot be merged successfully. An API error occurs when attempting to merge, even after accepting all changes from one branch. This issue arises when swim lanes with nodes are deleted in parallel branches, disrupting the merge process and resulting in a 500 Internal Server Error.
4. **Error When Merging Branches with Identical Resource Names Across All Resource Types**:
* Merging branches that include newly created resources (e.g., views, stages, processes) with identical names results in a 500 Internal Server Error. Although backend validation prevents duplicate names during normal creation, this check is bypassed during merging. The error occurs due to a unique constraint violation when attempting to insert resources with the same name, disrupting the merge process for all resource types.
5. **Conflict Detection Gaps**:
* **New substitution tags with the same name on different branches aren’t flagged**: Merging branches that include new substitution tags with identical names on different branches does not trigger a conflict. Instead, both tags are retained, resulting in duplicate substitution tags with the same name but different values. This issue bypasses expected conflict detection and can lead to inconsistencies in substitution tag usage.
* **Adding values to deleted data model keys does not raise conflicts**: When values are added to a data model key in one branch and the same key is deleted in another, merging does not generate a conflict. Instead, the added values from the first branch are silently lost in the merged version. This issue bypasses expected conflict detection, leading to data loss and inconsistencies in the resulting data model.
6. **Media Library**
* **Branches with media library assets sometimes fail to merge into the main branch**: Merging branches with media library assets can result in a 500 Internal Server Error when changes to the same asset occur across multiple branches. This issue typically arises when one branch is merged into another, and then the combined branch is merged into the main branch. The failure occurs due to null parameter handling during the merge process, preventing the merge from completing successfully.
7. **UI/UX**:
* **Unnecessary scrollbars appear in the merge modal for single items**: The merge conflict modal displays unnecessary scrollbars when only a single item is present in the list. This occurs in scenarios where media library assets with long keys are involved, creating a layout issue that affects the user interface. While functionality is not impacted, this visual inconsistency can reduce the overall user experience during conflict resolution.
* **Fields like `originalCreationTimestamp` and `flowxUuid` are incorrectly flagged as conflicts**: The merge conflict modal displays unnecessary scrollbars when only a single item is present in the list. This occurs in scenarios where media library assets with long keys are involved, creating a layout issue that affects the user interface. While functionality is not impacted, this visual inconsistency can reduce the overall user experience during conflict resolution.
***
## Additional information
For deployment guidelines, refer to:
# Deployment guidelines v4.5.4
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.4-december-2024/deployment-guidelines-v4.5.4
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

## Component versions
| Component | 4.5.4 | 4.5.3 | 4.5.1 | 4.5.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------------------- | ---------- | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **7.4.12** | 7.4.3 | 7.4.1 | 7.3.5 | 6.1.6 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **6.4.2** | 6.2.7 | 6.2.2 | 6.1.11 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.34.0** | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | **5.34.0** | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | **5.34.0** | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | **5.34.0** | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.34.0** | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.34.0** | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.34.0** | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.34.0** | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.34.0** | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **4.2.6** | 4.2.1 | 4.1.10 | 4.1.6 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **5.1.3** | 5.1.1 | 5.0.4 | 5.0.4 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **5.2.0** | 5.1.1 | 5.0.4 | 5.0.4 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 4.1.3 | 4.1.3 | 4.1.3 | 4.1.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | **6.0.13** | 6.0.9 | 6.0.5 | 6.0.1 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | 3.1.2 | 3.1.2 | 3.1.2 | 3.1.2 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **5.1.1** | 5.0.3 | 5.0.3 | 5.0.3 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **1.7.0** | 1.6.0 | 1.4.3 | 1.3.9 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **1.11.0** | 1.7.1 | 1.4.6 | 1.3.7 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | 1.5.0 | 1.5.0 | 1.3.6 | 1.3.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.2 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 4.0.0 | 4.0.0 | 4.0.0 | 4.0.0 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
Note: The same container image and Helm chart are used for **Application Manager** and **Runtime Manager**.
## AI Agents
| Component | 4.5.4 | 4.5.3 | 4.5.1 | 4.5.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ---------- | ------ | ----- | ----- | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.7.5** | 1.3.4 | 1.0.6 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.4.2** | 1.0.5 | 1.0.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.6.2** | 1.3.6 | 1.2.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.0.29** | 1.0.20 | 1.0.4 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.1.3** | 1.0.10 | 1.0.7 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.5.4 | Keycloak | 22.x |
| 4.5.4 | Kafka | 3.2.x |
| 4.5.4 | PostgreSQL | 16.2.x |
| 4.5.4 | MongoDB | 7.0.x |
| 4.5.4 | Redis | 7.2.x |
| 4.5.4 | Elasticsearch | 7.17.x |
| 4.5.4 | OracleDB | 19.23.0.0.0 |
| 4.5.4 | Angular (Web SDK) | 17.x |
| 4.5.4 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
**Update default application**: If you have already updated to **v4.5.0** or **v4.5.1**, ensure that you create at least one new version of the default\_application(where all the process definitions from previous versions are migrated). This step verifies that your default application remains up to date with the latest changes:
1. Open the default\_application in the UI.
2. Check for a new version (either draft or committed).
3. Ensure that there is a new version compared to the committed version that was automatically created during the migration from Release 4.5.0.
4. Save or commit a new version if necessary.
This step ensures your application configurations are aligned with the latest migration requirements.
# FlowX.AI 4.5.4 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.4-december-2024/v4.5.4-december-2024
This internal release brings various enhancements and new features to improve functionality, usability, and performance across the platform.
## What's new? 🆕
### Integration designer updates
* **Testing on Upper Environments**: Users can now test endpoints and workflows in upper environments with customizable configurations and detailed runtime logs, ensuring smooth and accurate testing.
* **System Enumeration Toggle**: Added a toggle to manage system enumeration mapping:
* Turning it ON includes the system in the enumeration table and enables the Enum Mapper.
* Turning it OFF removes the system, disables related mappings, and clears existing data with a warning.
* **Duplicate Workflow & Endpoint**: A new "Duplicate" option streamlines the creation of similar workflows or endpoints, supporting renaming, optional descriptions, and independent modifications. Success or error notifications ensure clarity during the duplication process.
* **Testing on Committed Versions**: Enables testing of endpoints and workflows on committed versions with editable inputs, detailed logs, and response previews in modals tailored to the selected version.
* **Enum Translation in Lists**: Expanded support for enum translation in lists of objects and arrays of enums, with simplified and efficient JSON path formatting.
* **Multiple Incoming Sequences**: Workflow nodes now support multiple incoming sequences, allowing for complex designs where conditions or actions converge.
* **Rename Workflow Nodes**: Introduced in-place editing for workflow node names, with validations to ensure uniqueness and compliance with naming rules.
* **Start/Call Subworkflow Node (Sync)**: Added a new node with the ability to reuse predefined workflows (local or library) within parent workflows. Subworkflows complete before proceeding and halt the parent workflow on failure.
* **Configurable Timeout & Retry**: Endpoint nodes now allow configurable timeouts (default: 10,000 ms) and retry mechanisms with exponential backoff, ensuring resilience during API interactions.
* **Missing Sequence Alerts**: Workflow nodes with unmapped branches now display a yellow warning icon and provide actionable guidance for resolution.
***
### AI agents
* **AI Designer**: Modified keys for Data Models.
* **AI Analyst**: Added support for boundary events.
* **AI Developer**: Enhanced business rule explanations.
***
### Analytics integration for container apps
This feature is compatible with the new Angular packages, scheduled for release in v4.5.5.
Container apps now support tracking "Screen Displayed" and "Action Executed" events, configurable in the UI Designer to improve insights into user interactions.
**UI Designer updates**:
* **Analytics Screen Name**: Configurable under Root UI components (Cards and Containers) to enable tracking in analytics platforms like Google Analytics.
"Screen Displayed" events support user task-based reporting, such as when a user task screen is shown.

The configured values are stored in `flowxProps.analytics`, making them accessible for integration with analytics tools.
* **Action Analytics**: Tracks user actions (e.g., button clicks) with tags set directly in the UI Action Form.
Added analytics configuration in the **UX Section** for all UI action types.

Values are saved in `params.analytics` via the PATCH `/actions` request.
**Renderers updates**:
Renderers now expose a public API for triggering analytics events:
* **Screen Events**: Triggered on user task display, using `flowxProps.analytics`.
* **Action Events**: Triggered on action execution, using `params.analyticcs`.
Dynamic values such as process store keys and replace tags are supported for more contextual tracking.
***
### UI action form updates
* Introduced **Functional** and **UX sections** for all action types, with a checkbox for **Add Analytics Name** in the UX section.
* Removed the **Start Process Inherit** UI action type.
* Simplified custom and exclude key management.

***
### Hide expressions enhancements
This feature is compatible with the new Angular packages, scheduled for release in v4.5.5.
The [**Hide Expressions**](../../4.6.0/docs/building-blocks/ui-designer/ui-component-types/form-elements/input-form-field#hidedisable-expressions) feature is now standardized across all FlowX components extending functionality to collection prototypes, table cell children, and more.
Supported components include:
* Card
* Collection
* Collection Prototype children (excluding the Collection Prototype itself)
* Text
* Link
* Image
* File Preview
* File Upload
* Button
* Table cell children (e.g.: texts, images, buttons, links)
***
### Grid improvements in preview
* Enhanced grid placeholder design.
* Added drag-and-drop support for placeholder column and row spans.
***
## Bug fixes 🐞
***
## Changes 🔧
* **Web Renderer Caching**: Improved CMS resource caching using browser mechanisms keyed to the build ID.
* **Process Designer**: Enhanced drop-node-on-sequence functionality.
***
## Additional information
For deployment guidelines, refer to:
# Deployment guidelines v4.5.5
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.5-december-2024/deployment-guidelines-v4.5.5
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

## Component versions
| Component | 4.5.5 | 4.5.4 | 4.5.3 | 4.5.1 | 4.5.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **7.6.0** | 7.4.12 | 7.4.3 | 7.4.1 | 7.3.5 | 6.1.6 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **6.4.4** | 6.4.2 | 6.2.7 | 6.2.2 | 6.1.11 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.41.3** | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.41.3** | | | | | | | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.41.3** | | | | | | | | | | | | | | | | | | | | | | |
| **@flowx/ui-sdk** | - | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-ui-toolkit** | **5.41.3** | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | - | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.41.3** | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.41.3** | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | - | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.41.3** | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.41.3** | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **4.3.2** | 4.2.6 | 4.2.1 | 4.1.10 | 4.1.6 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | 5.1.3 | 5.1.3 | 5.1.1 | 5.0.4 | 5.0.4 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **5.2.1** | 5.2.0 | 5.1.1 | 5.0.4 | 5.0.4 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 4.1.3 | 4.1.3 | 4.1.3 | 4.1.3 | 4.1.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | 6.0.13 | 6.0.13 | 6.0.9 | 6.0.5 | 6.0.1 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | 3.1.2 | 3.1.2 | 3.1.2 | 3.1.2 | 3.1.2 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | 5.1.1 | 5.1.1 | 5.0.3 | 5.0.3 | 5.0.3 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **1.7.3** | 1.7.0 | 1.6.0 | 1.4.3 | 1.3.9 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **1.14.1** | 1.11.0 | 1.7.1 | 1.4.6 | 1.3.7 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | 1.5.0 | 1.5.0 | 1.5.0 | 1.3.6 | 1.3.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | **4.0.3** | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.2 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **4.0.7** | 4.0.0 | 4.0.0 | 4.0.0 | 4.0.0 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
Note: The same container image and Helm chart are used for **Application Manager** and **Runtime Manager**.
## AI Agents
| Component | 4.5.5 | 4.5.4 | 4.5.3 | 4.5.1 | 4.5.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ---------- | ------ | ------ | ----- | ----- | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.8.0** | 1.7.5 | 1.3.4 | 1.0.6 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.5.0** | 1.4.2 | 1.0.5 | 1.0.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.8.3** | 1.6.2 | 1.3.6 | 1.2.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.0.32** | 1.0.29 | 1.0.20 | 1.0.4 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.2.0** | 1.1.3 | 1.0.10 | 1.0.7 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.5.5 | Keycloak | 22.x |
| 4.5.5 | Kafka | 3.2.x |
| 4.5.5 | PostgreSQL | 16.2.x |
| 4.5.5 | MongoDB | 7.0.x |
| 4.5.5 | Redis | 7.2.x |
| 4.5.5 | Elasticsearch | 7.17.x |
| 4.5.5 | OracleDB | 19.23.0.0.0 |
| 4.5.5 | Angular (Web SDK) | 17.x |
| 4.5.5 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
**Update default application**: If you have already updated to **v4.5.0** or **v4.5.1**, ensure that you create at least one new version of the default\_application(where all the process definitions from previous versions are migrated). This step verifies that your default application remains up to date with the latest changes:
1. Open the default\_application in the UI.
2. Check for a new version (either draft or committed).
3. Ensure that there is a new version compared to the committed version that was automatically created during the migration from Release 4.5.0.
4. Save or commit a new version if necessary.
This step ensures your application configurations are aligned with the latest migration requirements.
# FlowX.AI 4.5.5 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.5-december-2024/v4.5.5-december-2024
This release brings various enhancements and new features to improve functionality, usability, and performance across the platform.
## **What's new?** 🆕
### **Integration designer updates**
* **Testing on Upper Environments:** Test endpoints and workflows in upper environments with customizable configurations and detailed runtime logs for smooth and accurate testing.
* **System Enumeration Toggle:** Manage system enumeration mapping with a new toggle.
* **ON:** Includes the system in the enumeration table and enables the Enum Mapper.
* **OFF:** Removes the system, disables related mappings, and clears existing data with a warning.
* **Duplicate Workflow & Endpoint:** Streamline the creation of similar workflows or endpoints with the "Duplicate" option. Includes support for renaming, optional descriptions, and independent modifications. Success or error notifications ensure clarity.
* **Testing on Committed Versions:** Test endpoints and workflows on committed versions with editable inputs, detailed logs, and response previews displayed in tailored modals.
* **Enum Translation in Lists:** Expanded support for enum translation in lists of objects and arrays of enums, with simplified JSON path formatting for enhanced efficiency.
* **Multiple Incoming Sequences:** Workflow nodes now support multiple incoming sequences, enabling complex designs where conditions or actions converge.
* **Rename Workflow Nodes:** Added in-place editing for workflow node names, ensuring unique and compliant naming through validations.
* **Show System-Auth Details in Test Modal:** Introduced visibility for system-auth details directly in the test modal, improving debugging and configuration insights.
* **Default Retry Values for REST Endpoints:** Updated default retry values for REST endpoints to enhance reliability and optimize configurations.
* **Start/Call Subworkflow Node (Sync):** Added a new node that allows reusing predefined workflows (local or library) within parent workflows. Subworkflows complete before proceeding and halt the parent workflow on failure.
* **Configurable Timeout & Retry Mechanisms:** Endpoint nodes now allow configurable timeouts (default: 10,000 ms) and retry mechanisms with exponential backoff, ensuring resilience during API interactions.
* **Missing Sequence Alerts:** Workflow nodes with unmapped branches now display a yellow warning icon, providing actionable guidance to resolve missing sequences.
***
### UI Designer updates
#### UI action form updates
* Introduced **Functional** and **UX sections** for all action types, with a checkbox for **Add Analytics Name** in the UX section.
* Removed the **Start Process Inherit** UI action type.
* Simplified custom and exclude key management.

#### Hide expressions enhancements
The [**Hide Expressions**](../../4.6.0/docs/building-blocks/ui-designer/ui-component-types/form-elements/input-form-field#hidedisable-expressions) feature is now standardized across all FlowX components extending functionality to collection prototypes, table cell children, and more.
Supported components include:
* Card
* Collection
* Collection Prototype children (excluding the Collection Prototype itself)
* Text
* Link
* Image
* File Preview
* File Upload
* Button
* Table cell children (e.g.: texts, images, buttons, links)
#### Grid improvements in preview
* Enhanced grid placeholder design.
* Added drag-and-drop support for placeholder column and row spans.
#### Table UI component enhancements
Added in-place editing and validations for table cells, along with support for row deletions.
#### Conditional formatting for UI elements
This release introduces the ability to dynamically change styling and configuration properties of UI elements based on specified conditions. You can set multiple conditions and corresponding styling overrides—such as colors, fonts, and borders—and update Image or Document URLs contextually. This enhancement reduces the need for multiple prototypes, simplifies the UI configuration process, and makes it easier to highlight data patterns, outliers, or trends directly within the interface.
***
### AI agents
* **AI Designer**: Modified keys for Data Models.
* **AI Analyst**: Added support for boundary events.
* **AI Developer**: Enhanced business rule explanations.
***
### Analytics integration for container apps
Container apps now support tracking "Screen Displayed" and "Action Executed" events, configurable in the UI Designer to improve insights into user interactions.
**UI Designer updates**:
* **Analytics Screen Name**: Configurable under Root UI components (Cards and Containers) to enable tracking in analytics platforms like Google Analytics.
"Screen Displayed" events support user task-based reporting, such as when a user task screen is shown.

The configured values are stored in `flowxProps.analytics`, making them accessible for integration with analytics tools.
* **Action Analytics**: Tracks user actions (e.g., button clicks) with tags set directly in the UI Action Form.
Added analytics configuration in the **UX Section** for all UI action types.

Values are saved in `params.analytics` via the PATCH `/actions` request.
**Renderers updates**:
Renderers now expose a public API for triggering analytics events:
* **Screen Events**: Triggered on user task display, using `flowxProps.analytics`.
* **Action Events**: Triggered on action execution, using `params.analytics`.
Dynamic values such as process store keys and replace tags are supported for more contextual tracking.
***
### New Angular SDK
We're excited to announce new releases for new Flowx packages to support web applications:
* `@flowx/core-sdk`
* `@flowx/angular-sdk`
* `@flowx/angular-theme`
* `@flowx/angular-ui-toolkit`
* `@flowx/core-theme`
We recommend upgrading to the **latest** versions of all @flowx packages to take full advantage of these new features and improvements. Check the deployment guidelines for version details.
***
### Projects updates
#### Export/Import Builds with Binaries
We’ve introduced flexible export/import options to accommodate diverse deployment scenarios, including fully isolated environments:
* **With Binaries**: Packages now include all necessary binaries within the exported .zip file, enabling offline and on-premise usage where public URLs may not be accessible.
* **Without Binaries**: Retains the existing metadata-only approach, referencing publicly accessible binaries to keep export packages lightweight.
* **Dynamic Import Behavior**: The import process automatically adapts, either utilizing embedded binaries or fetching them from public URLs as needed.
Whether you’re operating in an isolated on-premise setup or a fully connected environment, you can seamlessly manage builds without compromising on flexibility or compatibility.
#### Application Runtime
* Start processes via Kafka messages for improved integrations to offer more flexible process initialization.
### Plugins
* **Audit Logs for Task Management, Resources, and Templates (Docs & Notif)**:
Improved observability and traceability within the Task Management plugin. Audit logs now capture key events and changes across tasks, related resources, and template configurations (Documentation & Notifications), providing a clearer historical record and aiding in compliance and troubleshooting.
* **All Tasks Displayed in Runtime Tab**:
Streamlined access to task-related information by displaying all tasks directly in the Runtime tab. This consolidation simplifies navigation and makes it easier to monitor and manage task execution and status in real-time.
* **Number of Tasks Displayed Picker**:
Introduced a configurable picker to control how many tasks are displayed at once. Users can tailor the task view density to their preferences, enhancing the management experience and visibility.
* **Removed Support for Unreferenced Enumerations**:
Enumerations not referenced by any resources are no longer supported. This change reduces clutter and ensures cleaner, more maintainable configurations within the plugin environment.
***
## Changes 🔧
* **Web Renderer Caching**: Improved CMS resource caching using browser mechanisms keyed to the build ID.
* **Process Designer**: Enhanced drop-node-on-sequence functionality.
* **FlowX.AI Designer**: Applications are now marked and referred to as "Projects".
* **FlowX.AI Designer**: Renamed “System assets” to Global Media Library, clarifying resource locations and responsibilities.
***
## Additional information
For deployment guidelines, refer to:
# Deployment guidelines v4.5.6
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.6-december-2024/deployment-guidelines-v4.5.6
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

## Component versions
| Component | 4.5.6 | 4.5.5 | 4.5.4 | 4.5.3 | 4.5.1 | 4.5.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | 7.6.0 | 7.6.0 | 7.4.12 | 7.4.3 | 7.4.1 | 7.3.5 | 6.1.6 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **6.4.5** | 6.4.4 | 6.4.2 | 6.2.7 | 6.2.2 | 6.1.11 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.45.3** | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.45.3** | 5.41.3 | - | - | - | - | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.45.3** | 5.41.3 | - | - | - | - | - | - | | | | | | | | | | | | | | | | |
| **@flowx/ui-sdk** | - | - | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-ui-toolkit** | **5.45.3** | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | - | - | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.45.3** | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.45.3** | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | - | - | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.45.3** | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.45.3** | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **4.3.3** | 4.3.2 | 4.2.6 | 4.2.1 | 4.1.10 | 4.1.6 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **5.1.5** | 5.1.3 | 5.1.3 | 5.1.1 | 5.0.4 | 5.0.4 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **5.2.3** | 5.2.1 | 5.2.0 | 5.1.1 | 5.0.4 | 5.0.4 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 4.1.3 | 4.1.3 | 4.1.3 | 4.1.3 | 4.1.3 | 4.1.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | **6.0.14** | 6.0.13 | 6.0.13 | 6.0.9 | 6.0.5 | 6.0.1 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | 3.1.2 | 3.1.2 | 3.1.2 | 3.1.2 | 3.1.2 | 3.1.2 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | 5.1.1 | 5.1.1 | 5.1.1 | 5.0.3 | 5.0.3 | 5.0.3 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | 1.7.3 | 1.7.3 | 1.7.0 | 1.6.0 | 1.4.3 | 1.3.9 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **1.14.2** | 1.14.1 | 1.11.0 | 1.7.1 | 1.4.6 | 1.3.7 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **1.5.1** | 1.5.0 | 1.5.0 | 1.5.0 | 1.3.6 | 1.3.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | 4.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.2 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 4.0.7 | 4.0.7 | 4.0.0 | 4.0.0 | 4.0.0 | 4.0.0 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
Note: The same container image and Helm chart are used for **Application Manager** and **Runtime Manager**.
## AI Agents
| Component | 4.5.6 | 4.5.5 | 4.5.4 | 4.5.3 | 4.5.1 | 4.5.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | --------- | ------ | ------ | ------ | ----- | ----- | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.8.1** | 1.8.0 | 1.7.5 | 1.3.4 | 1.0.6 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.6.0** | 1.5.0 | 1.4.2 | 1.0.5 | 1.0.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | 1.8.3 | 1.8.3 | 1.6.2 | 1.3.6 | 1.2.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | 1.1.0 | 1.0.32 | 1.0.29 | 1.0.20 | 1.0.4 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | 1.2.0 | 1.2.0 | 1.1.3 | 1.0.10 | 1.0.7 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.5.6 | Keycloak | 22.x |
| 4.5.6 | Kafka | 3.2.x |
| 4.5.6 | PostgreSQL | 16.2.x |
| 4.5.6 | MongoDB | 7.0.x |
| 4.5.6 | Redis | 7.2.x |
| 4.5.6 | Elasticsearch | 7.17.x |
| 4.5.6 | OracleDB | 19.23.0.0.0 |
| 4.5.6 | Angular (Web SDK) | 17.x |
| 4.5.6 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
**Update default application**: If you have already updated to **v4.5.0** or **v4.5.1**, ensure that you create at least one new version of the default\_application(where all the process definitions from previous versions are migrated). This step verifies that your default application remains up to date with the latest changes:
1. Open the default\_application in the UI.
2. Check for a new version (either draft or committed).
3. Ensure that there is a new version compared to the committed version that was automatically created during the migration from Release 4.5.0.
4. Save or commit a new version if necessary.
This step ensures your application configurations are aligned with the latest migration requirements.
# FlowX.AI 4.5.6 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.6-december-2024/v4.5.6-december-2024
Version 4.5.6 brings enhanced export options for media libraries, key bug fixes, and improved plugin functionality for better performance and usability.
## **What's new?** 🆕
***
### Projects updates
#### Export media library with binaries
We’ve introduced flexible export options to accommodate diverse deployment scenarios, including fully isolated environments:
* **With Binaries**: Packages now include all necessary binaries within the exported .zip file, enabling offline and on-premise usage where public URLs may not be accessible.
* **Without Binaries**: Retains the existing metadata-only approach, referencing publicly accessible binaries to keep export packages lightweight.
***
## Bug fixes 🐞
* Change Document and Notification Plugin REST endpoint: Updated to use substring search for consistency with other endpoints.
* \[Audit] Incorrect sent event: Resolved an issue where the Notification and Document templates audit recorded incorrect sent events.
* \[Audit] Wrong subject identifier: Fixed a bug where the template's data model event used the wrong subject identifier when deleting the last entry.
***
## Additional information
For deployment guidelines, refer to:
# Deployment guidelines v4.5.7
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.7-january-2025/deployment-guidelines-v4.5.7
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

## Component versions
| Component | 4.5.7 | 4.5.6 | 4.5.5 | 4.5.4 | 4.5.3 | 4.5.1 | 4.5.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **7.6.3** | 7.6.0 | 7.6.0 | 7.4.12 | 7.4.3 | 7.4.1 | 7.3.5 | 6.1.6 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **6.6.6** | 6.4.5 | 6.4.4 | 6.4.2 | 6.2.7 | 6.2.2 | 6.1.11 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.54.0** | 5.45.3 | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.54.0** | 5.45.3 | 5.41.3 | - | - | - | - | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.54.0** | 5.45.3 | 5.41.3 | - | - | - | - | - | - | | | | | | | | | | | | | | | | |
| **@flowx/ui-sdk** | **5.54.0** | - | - | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-ui-toolkit** | **5.54.0** | 5.45.3 | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | **5.54.0** | - | - | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.54.0** | 5.45.3 | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.54.0** | 5.45.3 | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.54.0** | - | - | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.54.0** | 5.45.3 | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.54.0** | 5.45.3 | 5.41.3 | 5.34.0 | 5.22.9 | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **4.4.0** | 4.3.3 | 4.3.2 | 4.2.6 | 4.2.1 | 4.1.10 | 4.1.6 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **4.0.5** | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **4.0.5** | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **5.2.0** | 5.1.5 | 5.1.3 | 5.1.3 | 5.1.1 | 5.0.4 | 5.0.4 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **5.3.0** | 5.2.3 | 5.2.1 | 5.2.0 | 5.1.1 | 5.0.4 | 5.0.4 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 4.1.3 | 4.1.3 | 4.1.3 | 4.1.3 | 4.1.3 | 4.1.3 | 4.1.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | **6.0.24** | 6.0.14 | 6.0.13 | 6.0.13 | 6.0.9 | 6.0.5 | 6.0.1 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | 3.1.2 | 3.1.2 | 3.1.2 | 3.1.2 | 3.1.2 | 3.1.2 | 3.1.2 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | 5.1.1 | 5.1.1 | 5.1.1 | 5.1.1 | 5.0.3 | 5.0.3 | 5.0.3 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **1.9.1** | 1.7.3 | 1.7.3 | 1.7.0 | 1.6.0 | 1.4.3 | 1.3.9 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **1.16.3** | 1.14.2 | 1.14.1 | 1.11.0 | 1.7.1 | 1.4.6 | 1.3.7 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **1.5.3** | 1.5.1 | 1.5.0 | 1.5.0 | 1.5.0 | 1.3.6 | 1.3.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.2 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 4.0.7 | 4.0.7 | 4.0.7 | 4.0.0 | 4.0.0 | 4.0.0 | 4.0.0 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
Note: The same container image and Helm chart are used for **Application Manager** and **Runtime Manager**.
## AI Agents
| Component | 4.5.7 | 4.5.6 | 4.5.5 | 4.5.4 | 4.5.3 | 4.5.1 | 4.5.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | --------- | ----- | ------ | ------ | ------ | ----- | ----- | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.9.6** | 1.8.1 | 1.8.0 | 1.7.5 | 1.3.4 | 1.0.6 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.6.4** | 1.6.0 | 1.5.0 | 1.4.2 | 1.0.5 | 1.0.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.9.3** | 1.8.3 | 1.8.3 | 1.6.2 | 1.3.6 | 1.2.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.2.4** | 1.1.0 | 1.0.32 | 1.0.29 | 1.0.20 | 1.0.4 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.5.2** | 1.2.0 | 1.2.0 | 1.1.3 | 1.0.10 | 1.0.7 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.5.7 | Keycloak | 22.x |
| 4.5.7 | Kafka | 3.2.x |
| 4.5.7 | PostgreSQL | 16.2.x |
| 4.5.7 | MongoDB | 7.0.x |
| 4.5.7 | Redis | 7.2.x |
| 4.5.7 | Elasticsearch | 7.17.x |
| 4.5.7 | OracleDB | 19.23.0.0.0 |
| 4.5.7 | Angular (Web SDK) | 18.x |
| 4.5.7 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
**Update default application**: If you have already updated to **v4.5.0** or **v4.5.1**, ensure that you create at least one new version of the default\_application(where all the process definitions from previous versions are migrated). This step verifies that your default application remains up to date with the latest changes:
1. Open the default\_application in the UI.
2. Check for a new version (either draft or committed).
3. Ensure that there is a new version compared to the committed version that was automatically created during the migration from Release 4.5.0.
4. Save or commit a new version if necessary.
This step ensures your application configurations are aligned with the latest migration requirements.
# FlowX.AI 4.5.7 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.7-january-2025/v4.5.7-january-2025
## **What's new?** 🆕
### New runtime manager service account
As of **FlowX.AI 4.5.7**, we have introduced a **new runtime manager service account** in Keycloak. This account is required for several key operations including:
1. **Export/Import of builds and application versions**
2. **Managing scheduled events when transitioning from one build to another**
3. **Performing requests from the application manager or runtime manager to other resource services**
If you encounter errors during export/import of builds or application versions, verify that the `flowx-runtime-manager-sa` service account exists in Keycloak and has the correct **service account roles** assigned. This same service account is leveraged across multiple modules to ensure secure and seamless communication with Keycloak.
For configuration details, check the following docs section:
## Additional information
For deployment guidelines, refer to:
# Deployment guidelines v4.6.0
Source: https://docs.flowx.ai/release-notes/v4.x/v4.6.x/v4.6.0-january-2025/deployment-guidelines-v4.6.0
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

After upgrading to the 4.6.0 FlowX.AI release, you cannot import old process definitions or resources into the new platform from older versions .
## Component versions
| Component | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **8.0.2** | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **7.2.3** | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.64.5** | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.64.5** | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.64.5** | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **5.64.5** | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.64.5** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.64.5** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.64.5** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.64.5** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.64.5** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.1.2** | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **5.0.0** | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **5.0.2** | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **6.0.3** | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **6.0.3** | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | **4.1.3** | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | **7.0.3** | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **4.0.0** | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **6.0.0** | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | **0.1.12** | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | **4.0.0** | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.0.1** | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.0.18** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **2.0.18** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **2.0.2** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | **4.0.3** | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **4.0.9** | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
## AI Agents
| Component | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ---------- | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.9.10** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.6.9** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.10.3** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.2.24** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.5.5** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.6.0 | Keycloak | 22.x |
| 4.6.0 | Kafka | 3.2.x |
| 4.6.0 | PostgreSQL | 16.2.x |
| 4.6.0 | MongoDB | 7.0.x |
| 4.6.0 | Redis | 7.2.x |
| 4.6.0 | Elasticsearch | 7.17.x |
| 4.6.0 | Oracle Database | 21C/ 21-XE |
| 4.6.0 | Angular (Web SDK) | 19.x |
| 4.6.0 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
## New microservices - setup guides
## New access rights and roles
## Updated access rights and roles
Added new roles for **manage-views**.
## New service accounts
# Deployment changes for v4.6.0
Source: https://docs.flowx.ai/release-notes/v4.x/v4.6.x/v4.6.0-january-2025/migrating-from-v4.1.x-to-v4.6.0/migrating-from-v4.1.x
This document outlines the configuration and infrastructure changes introduced from v4.1.x to v4.6.0 for deploying the FlowX.AI platform.
## CMS Setup
### MongoDB configuration
In version 4.6.0, the CMS setup includes a more comprehensive MongoDB configuration, especially for runtime data handling:
* **Runtime MongoDB Instance**: A dedicated MongoDB instance for managing runtime data.
* **New Environment Variables**:
* `RUNTIME_DB_USERNAME`: Username for runtime MongoDB access.
* `SPRING_DATA_MONGODB_RUNTIME_URI`: Connection URI for the runtime MongoDB instance.
* `SPRING_DATA_MONGODB_STORAGE`: Specifies storage type for Azure environments (`mongodb` or `cosmosdb`). Default is `mongodb`.
* **Transaction Settings for Mongock Library**:
* `MONGOCK_TRANSACTIONENABLED`: Controls MongoDB transaction support with Mongock, defaulting to `false` due to compatibility concerns with MongoDB 5.
### Private storage configuration
Private CMS to securely store uploaded documents and AI-generated documents, ensuring they are accessible only via authenticated endpoints. This CMS will support AI services and workflows while maintaining strict access controls.
Private CMS ensures secure file storage by keeping documents hidden from the Media Library and accessible only through authenticated endpoints with access token permissions. Files can be retrieved using tags (e.g., ai\_document, ref:UUID\_doc) and are excluded from project builds as they aren't needed at runtime.
* `APPLICATION_FILE_STORAGE_S3_PRIVATE_SERVER_URL`: This environment variable specifies the URL of the S3 server used for private file storage.
* `APPLICATION_FILE_STORAGE_S3_PRIVATE_BUCKET_NAME`: This environment variable specifies the name of the S3 bucket dedicated to private file storage.
* `APPLICATION_FILE_STORAGE_S3_PRIVATE_CREATE_BUCKET`: This environment variable indicates whether the private S3 bucket should be created if it does not already exist. It can be set to true or false.
* `APPLICATION_FILE_STORAGE_S3_PRIVATE_ACCESS_KEY`: This environment variable holds the access key used to authenticate to the S3 server for private file storage.
* `APPLICATION_FILE_STORAGE_S3_PRIVATE_SECRET_KEY`: This environment variable holds the secret key used to authenticate to the S3 server for private file storage.
***
## Admin setup
### MongoDB configuration
Version 4.6.0 introduces a new MongoDB setup in the Admin service for managing data model information:
* **New MongoDB Data Model Configuration**:
* **Environment Variables**:
* `SPRING_DATA_MONGODB_URI`: URI for connecting to the MongoDB data model instance.
* `DB_USERNAME`: Set to `data-model` for data model access.
* `SPRING_DATA_MONGODB_STORAGE`: Specifies storage type for Azure environments (`mongodb` or `cosmosdb`).
***
## Engine setup
### MongoDB configuration
The Engine configuration now includes additional setup for a runtime MongoDB instance to manage runtime builds:
* **Runtime MongoDB for Engine**:
* **New Environment Variables**:
* `SPRING_DATA_MONGODB_RUNTIME_URI`: URI for connecting to the runtime MongoDB.
* `DB_USERNAME`: Set to `app-runtime` for runtime data access.
# Configuration and migration guide
Source: https://docs.flowx.ai/release-notes/v4.x/v4.6.x/v4.6.0-january-2025/migrating-from-v4.1.x-to-v4.6.0/process-configuration
This guide outlines changes in process and UI configuration from v4.1.x to 4.6.0 version.
## Projects
The **Projects** feature in FlowX AI v4.6.0 is a new structure that organizes all dependencies and resources required for a project into a single deployable view. This enhancement simplifies configuration, deployment, and maintenance by layering projects on top of processes, offering a centralized workspace that encapsulates everything needed for project execution.

Several key configuration changes impact how resources and dependencies are managed, deployed, and maintained. This guide provides a breakdown of the configuration changes, automatic migration processes, and manual steps required to ensure a smooth transition.

***
### Consolidated resource management
* **Change**: All resources that were previously managed individually within processes are now grouped within Projects. This includes content management elements, integrations, themes, task configurations, and permissions.
* **Impact**: Resources like **enumerations**, **substitution tags**, and **generic parameters** are now managed within Projects, allowing centralized configuration and version control.
* **Migration**: All process-related resources will be migrated automatically into a **default project**, ensuring continuity of functionality in the new framework. After migration, you should verify that all critical resources are correctly configured within this default project.
### Enhanced version control and dependency management
* **Impact**: Projects support **dependency management** through **Libraries** and enforce version-controlled resources. Setting up a project now requires careful dependency management and versioning to prevent unintended updates.
* **Benefit**: Allows for modular, reusable resources and stable deployments across projects, reducing resource duplication and enhancing project compatibility.
### Migration checklist
To ensure a smooth transition, complete the following steps:
1. **Verify Process Migration**: Confirm that all existing process definitions have been correctly migrated into the default project.
2. **Set Configuration Parameter Overrides**: Post-deployment, adjust environment-specific Configuration Parameters in the default project.
3. **Update Task Views**: Replace the global "All Tasks" feature with project-specific Views in each project.
4. **Transfer Processes and Dependencies Manually**: If moving a process from the default project to another project, manually transfer associated resources and re-check dependencies.
***
## Generic parameters migration
* **Overview**: In version 4.6.0, global generic parameters (from versions prior to 4.6.0) have been migrated to project-level as Configuration Parameters, consolidating parameter management within specific projects for improved organization and control.

* **Migration**: All generic parameters will be automatically migrated to Configuration Parameters section under a default project.
* **Business Rules Unaffected**: There is no impact on existing business rules; they will continue to function as before without requiring updates.
* **Process Export Considerations**: If you export a process from one project to another, ensure that you also transfer the associated configuration parameters. This step is crucial to maintain process functionality and consistency across projects.
* **Important Note**: Only values of generic parameters associated with the specific environment, or where `env = null` (displayed as "all" in the interface in versions prior to 4.6.0), will be migrated. You must ensure that you have correctly set the values for generic parameters, paying attention to environment values (which are case-sensitive), and export these generic parameters before migration to avoid any potential data loss.

* **Post-Deployment Step**: After the first deployment to an upper environment, you will need to create configuration parameter overrides with the specific values required for that environment. This ensures that all environment-specific configurations are accurately maintained and applied across different deployment stages.
To set configuration parameter overrides, navigate to **Your App -> Runtime -> Configuration Parameters Overrides**.

***
## Source systems migration
* **Change**: Source systems have not been migrated automatically and need to be manually recreated.
* **New Location**: In v4.6.0, source systems have been moved under Integration Designer.
* Manual Migration Required:
1. Navigate to Integration Designer.
2. Recreate each source system manually with the same code as in the original configuration.
3. Ensure the "Enable enumeration value mapping" checkbox is enabled.
* **Impact**: Failure to manually migrate source systems may result in broken integrations and missing data mappings.
**v4.6.0**:

**\< v.4.6.0**:

## Task management
* "All Tasks" as a View: The global "All Tasks" feature is no longer standalone and will now function as a View in a project.
**v4.6.0:**

**v4.1.x:**

***
## General
Before starting the migration, complete the following steps:
1. **Merge All Feature Branches**: Ensure all feature branches for processes are merged into the latest version on the main branch.
2. **Remove Unnecessary Resources**: Delete any test processes or resources that are no longer needed.
3. **Export Generic Parameters**: Export generic parameters as a backup to ensure they migrate accurately to project-specific Configuration Parameters.
### Migration steps
During migration, resources will be transferred into a single **default project** with one committed version.
* **Process Definitions**: Only the last committed process version on the main branch will migrate. If no committed version exists, the latest WIP version will be used.
* **Enumerations, Substitution Tags, and Task Manager**: These resources will be migrated to the default project.
* **Generic Parameters**: Migrated as **Configuration Parameters** within the default project, covering only values where `env = null` or that match the platform’s environment setting.
* **Languages**: Language settings (available languages and default) will be moved to project settings. Languages remain globally available.
### Resources excluded from migration
Some resources will remain globally available or are deprecated:
* **Themes**
* **Fonts**
* **Global Media Library** (for media used in themes)
* **Out of Office (Task Manager)**
* **Integration Management** (will not be available in v4.6.0)
***
## Datepicker Migration
In version 4.6.0, significant updates have been introduced to the **Datepicker** component to ensure compatibility with ISO 8601 date formats and enhanced handling of date attributes within the **Data Model**. This migration affects both newly created and existing processes.
### Key changes
1. **Introduction of Date Types**:
* **Standard Date**: Stores and displays date values in ISO 8601 format, respecting the project's locale and timezone settings.
* **Legacy Date**: Retains previous formatting to ensure compatibility with existing business rules and processes.
2. **Properties Updates**:
* The **Datepicker** now supports dependent properties such as `minDate`, `maxDate`, and `defaultValue`. These properties:
* Follow the formatting rules of the selected date type (Standard or Legacy).
* Ensure that dynamic date values pulled from the **Data Model** are displayed correctly.
3. **Backward Compatibility**:
* **Existing Processes**: All migrated processes with legacy Datepicker components will default to `Legacy Date` type. This preserves the original formatting and ensures no disruption in business rules or workflows.
* **New Processes**: Newly created processes will default to `Standard Date` type, saving values in ISO 8601 format.
***
### Migration process
1. **Legacy Datepickers**:
* Automatically flagged during migration.
* Continue to work with existing business rules.
* Require manual review for future updates to transition to the **Standard Date** format.
2. **Business Rules Updates**:
* Legacy Datepickers may require manual adjustments if associated business rules reference hardcoded date formats.
* Ensure that any dynamic dates used in business rules are compatible with the ISO 8601 standard.
3. **Standard Datepickers**:
* All new Datepicker components save date values directly in ISO 8601 format.
* Fully compatible with updated **Data Model** attributes, allowing seamless integration with external systems, adaptors, and reporting plugins.
### Considerations
* **Default Values**:
* For **Standard Datepickers**, the `defaultValue` must be in ISO 8601 format.
* Dynamic defaults can also be set using **Data Model** attributes or process data.
* **Data Model Integration**:
* All external and internal date attributes, including those used by adaptors or business rules, must be explicitly defined in the **Data Model**.
* **UI Designer Overrides**:
* Overrides can be applied to display dates differently for specific UI elements, ensuring flexibility for localized formatting.
### Recommendations for transition
* **Existing Processes**:
* Leave Datepicker components in `Legacy` mode unless business rules and workflows are updated to support ISO 8601.
* **New Processes**:
* Use `Standard Date` to ensure future compatibility and alignment with ISO 8601 formatting.
* **Documentation**:
* Review and update all timer expressions, adaptors, and external data feeds to use ISO 8601 format for consistency.
***
## Updates to expression evaluation
**What Changed:**
* A fix was implemented in the web expression evaluator regarding how string values are handled during process value replacement.
* Previously, when evaluating dynamic and computed expressions, string variables required manual insertion of double quotes (`""`) because the system did not automatically add them.
* With the recent fix, the system now **automatically adds the necessary quotes** for string replacements.
**Impact:**
* **Existing Expressions:** If your current dynamic or computed expressions include manually added quotes around string values, these might now result in redundant quotes or incorrect string formatting.
* **Behavioral Shift:** The automatic quote addition alters how string values are processed, which might affect outputs if the expressions were structured with the expectation of manual quotes.
**Action Required:**
1. **Review Your Expressions:** Check any dynamic and computed expressions in your processes that currently include manual double quotes around string values.
2. **Modify as Needed:** Remove unnecessary double quotes where the system now handles them automatically to prevent duplicate quoting or formatting issues.
***
## Export/import enumerations (CSV)
In the transition from version 4.1.x to 4.6.0, the following columns have been removed from the enum CSV export format:
* description.application
* description.draft
* contentValue.childContentDescription.application
* contentValue.childContentDescription.draft
* contentValue.childContentDescription.type
Existing CSV export/import processes should be updated to remove references to these columns to ensure compatibility with the 4.6.0 release.
***
## Post-migration recommendations
For complex projects with multiple use cases, **do not use the default project for ongoing development or production builds**. Instead:
1. **Create Branches within the Default Project**: Organize and streamline resources by creating branches. This enables a lightweight build focused on production.
2. **Split the Default Project into Smaller Projects**: Use the import/export feature to separate the default project into individual projects by use case.
* **Note**: When importing processes into a new project, resource references may need to be manually reconfigured.
***
# Renderer SDKs
Source: https://docs.flowx.ai/release-notes/v4.x/v4.6.x/v4.6.0-january-2025/migrating-from-v4.1.x-to-v4.6.0/renderers
This guide assists in migrating from FlowX v4.1.x to v4.6.0.
## Android SDK migration guide
### Initialization config changes
A new configuration parameter named `locale` was added in order to improve formatting the dates, numbers and currencies.
When the SDK initialization happens through the `FlowxSdkApi.getInstance().init(...)` method, the argument must be included inside the `config: SdkConfig` parameter value:
```kotlin theme={"system"}
FlowxSdkApi.getInstance().init(
...
config = SdkConfig(
baseUrl = "URL to FlowX backend",
imageBaseUrl = "URL to FlowX CMS Media Library",
enginePath = "some_path",
language = "en",
locale = Locale.getDefault(), // e.g. Locale("en", "US"), Locale("fr", "CA")
validators = mapOf("exact_25_in_length" to { it.length == 25 }),
enableLog = false,
),
...
)
```
### Changes when starting a Flowx process
Two new parameters were added:
| Name | Description | Type | Requirement |
| ---------------- | -------------------------------------------------------------------------------------- | --------------- | -------------------------------- |
| `projectId` | The id of the project containing the process to be started | `String` | Mandatory |
| `onProcessEnded` | Callback function where you can do additional processing when the started process ends | `(() -> Unit)?` | Optional. It defaults to `null`. |
```kotlin theme={"system"}
fun startProcess(
projectId: String,
processName: String,
params: JSONObject = JSONObject(),
isModal: Boolean = false,
onProcessEnded: (() -> Unit)? = null,
closeModalFunc: ((processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
### Changes when resuming a Flowx process
One new parameter was added:
| Name | Description | Type | Requirement |
| ---------------- | ---------------------------------------------------------------------------------------- | --------------- | -------------------------------- |
| `onProcessEnded` | Callback function where you can do additional processing when the continued process ends | `(() -> Unit)?` | Optional. It defaults to `null`. |
```kotlin theme={"system"}
fun continueProcess(
processUuid: String,
isModal: Boolean = false,
onProcessEnded: (() -> Unit)? = null,
closeModalFunc: ((processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
### Changes regarding the implementation of Custom Components
The support for classical **[Android View](https://developer.android.com/reference/android/view/View)** system has been dropped.
A Custom Component can now be implemented only by using the **[Compose](https://developer.android.com/compose)** UI system.
This means that the `CustomViewComponent` is now ignored in the internals of the SDK and has been marked as `@Deprecated`, in order to be completely removed in the next release.
There is no immediate need to update any of the existing components.
### Public API changes
The `changeLanguage` method has been updated and renamed to `changeLocaleSettings`, in order to accommodate the newly added `locale` config parameter:
```kotlin theme={"system"}
fun changeLocaleSettings(locale: Locale, language: String)
```
### Library dependencies updates
* **[Kotlin](https://kotlinlang.org/)**: 1.9.22 **↗** **1.9.24**
* **[Compose BOM](https://developer.android.com/jetpack/compose/bom/bom-mapping)**: 2024.02.00 **↗** **2024.06.00**
* **[Compose Compiler](https://developer.android.com/jetpack/androidx/releases/compose-compiler)**: 1.5.9 **↗** **1.5.14**
* **[Gson](https://github.com/google/gson)**: 2.10.1 **↗** **2.11.0**
***
## iOS SDK migration guide
### Initialization config changes
A new configuration parameter, named `locale` was added in order to improve formatting the dates, numbers and currencies.
The locale needs to be set on the `FXConfig.sharedInstance.configure` method
```swift theme={"system"}
FXConfig.sharedInstance.configure { (config) in
config.locale = "en-US"
...
}
```
### Changes when starting a process
Two new parameters were added on the 3 available start process methods:
| Name | Description | Type | Requirement |
| ---------------- | -------------------------------------------------------------------------------------- | --------------- | ------------------------------- |
| `projectId` | The uuid string of the project containing the process to be started | `String` | Mandatory |
| `onProcessEnded` | Callback function where you can do additional processing when the started process ends | `(() -> Void)?` | Optional. It defaults to `nil`. |
```swift theme={"system"}
func startProcess(projectId: String,
name: String,
params: [String : Any]?,
isModal: Bool = false,
showLoader: Bool = false,
completion: ((UIViewController?) -> Void)?,
onProcessEnded: (() -> Void)? = nil)
```
### Changes when resuming a Flowx process
One new parameter was added on the 3 available continue process methods:
| Name | Description | Type | Requirement |
| ---------------- | -------------------------------------------------------------------------------------- | --------------- | ------------------------------- |
| `onProcessEnded` | Callback function where you can do additional processing when the started process ends | `(() -> Void)?` | Optional. It defaults to `nil`. |
```swift theme={"system"}
func continueExistingProcess(uuid: String,
name: String,
isModal: Bool = false,
completion: ((UIViewController?) -> Void)? = nil,
onProcessEnded: (() -> Void)? = nil)
```
### Updated FXDataSource protocol
A new method has been added to the `FXDataSource` protocol. Update conformance to protocol by adding the implementation of the new func.
```swift theme={"system"}
func newProcessStarted(processInstanceUuid: String) {
}
```
### Public API changes
The `changeLanguage` method has been updated and renamed to `changeLocaleSettings`, in order to accommodate the newly added `locale` config parameter:
```swift theme={"system"}
func changeLocaleSettings(locale: String?, language: String?)
```
***
## Angular SDK migration guide
### Upgrading to the new SDK libraries
The Angular SDK node packages have been updated and will use the latest versions Angular (version 19), thus all container apps that want to use the new SDKs should first update the Angular version of the container apps.
In the following we cover the migration guide for a container app from Angular v17 to v19 and the new SDKs.
* remove `material-moment-adapter` unless its not used in custom components (usually together with material datepicker) and also the `moment` package (unless used elsewhere in the project )
```bash theme={"system"}
npm uninstall @angular/material-moment-adapter
npm uninstall moment
```
* remove old FlowX SDK libraries:
```bash theme={"system"}
npm uninstall @flowx/ui-sdk @flowx/ui-theme @flowx/ui-toolkit
```
* in `angular.json` remove references to old stylesheets:
```bash theme={"system"}
"./node_modules/@flowx/ui-sdk/src/assets/scss/style.scss"
"./node_modules/paperflow-web-components/src/assets/scss"
"./node_modules/@flowx/ui-sdk/src/assets/scss"
```
* remove old FlowX SDKs explicit dependencies. Please check before removing that packages are not used in the container app or custom components.
```bash theme={"system"}
npm uninstall date-fns event-source-polyfill inputmask ng2-pdfjs-viewer vanillajs-datepicker @ngneat/input-mask deepmerge-ts marked-mangle
```
* remove deprecated `Angular Flex` library (the new sdks don't use it anymore and the package has been deprecated by the Angular team) unless it is not used in container app or custom components
```bash theme={"system"}
npm uninstall @angular/flex-layout
```
* Make sure to have the Angular CLI installed at version 18 (check with `ng --version`)
```bash theme={"system"}
npm install -g @angular/cli@18
```
* Run the Angular update for version 18
```bash theme={"system"}
ng update @angular/core@18 @angular/cli@18
```
* Update Angular CDK or Angular Material
```bash theme={"system"}
ng update @angular/cdk@18
```
or, if the container app uses Angular Material, run:
```bash theme={"system"}
ng update @angular/material@18
```
* Optionally, if your project uses other angular packages (ex. `NgRx`) please run migrations to v18 for each of them before proceeding. You can find details on the libraries documentation pages.
* Angular has changed the default build path in the `dist` folder, it now uses a `browser` folder for the build output. In order to place the output of the build command directly in the `dist/[APP_NAME]` folder, add the following change in `angular.json`:
```json theme={"system"}
{
...
"architect": {
...
"build": {
...
"options": {
...
"outputPath": {
"base": "dist/flowx-demo-app",
"browser": "" <-- add this line
},
}
}
}
}
```
* Make sure to have the Angular CLI installed at version 19 (check with `ng --version`)
```bash theme={"system"}
npm install -g @angular/cli@19
```
* Run the Angular update for version 19
```bash theme={"system"}
ng update @angular/core@19 @angular/cli@19
```
* Update Angular CDK or Angular Material
```bash theme={"system"}
ng update @angular/cdk@19
```
or, if the container app uses Angular material, run:
```bash theme={"system"}
ng update @angular/material@19
```
* Optionally, if your project uses other Angular packages (ex. `NgRx`) please run migrations to v19 for each of them before proceeding. You can find details on the libraries documentation pages.
* Also, it is recommended that you update the `target` and `module` settings in the `tsconfig.json` file to the new version, although be advised that this might require additional changes in the codebase due to new compilation errors that might arise.
```json theme={"system"}
{
...
"compilerOptions": {
...
"target": "ES2022",
"module": "ES2022"
}
}
```
**Adding overrides for libraries that have a dependency on Angular version \< 19**
For some libraries, the required angular version might not be up to date or compatible with the new Angular version. In this case, you can add an override in the `package.json` file to force the library to use the new Angular version.
* For example, the `ng2-pdfjs-viewer` library has a dependency on Angular version 18 and will not work with the installed Angular version 19. To force the library to use the new Angular version, add the following override in the `package.json` file:
```json theme={"system"}
{
...
"overrides": {
"ng2-pdfjs-viewer": {
"@angular/common": "^19.0.0",
"@angular/core": "^19.0.0",
"ng-packagr": "^19.0.0"
}
}
}
```
**Install new packages**:
**ACTION REQUIRED**: Update to the latest version 4.6 to ensure optimal performance and compatibility.
```bash theme={"system"}
npm install @flowx/core-sdk@5.63.0 @flowx/core-theme@5.63.0 @flowx/angular-sdk@5.63.0 @flowx/angular-theme@5.63.0 @flowx/angular-ui-toolkit@5.62.1
```
* Install a type dependency for the SSE library:
```bash theme={"system"}
npm install --save-dev @types/event-source-polyfill
```
* run through all the migration steps in the [New SDK Api changes](#new-sdk-api-changes) section below.
Each migration requires a 'clean' repository state. Make sure to commit all changes before starting the next migration step.
After each Angular update it is recommended you restart your editor or TS Server, to use the new TS version since some import errors might appear.
### New SDK API changes
#### Renderer SDK component usage
In the Angular SDK, the `` component has two new parameters have been introduced: `projectInfo` and `locale`. These additions help support localization and project-specific configurations.
| Name | Description | Type | Requirement |
| ------------- | ----------------------------------------------------------------------------------------------- | --------------------- | ----------- |
| `projectInfo` | Object containing an `projectId` key, which identifies the project of the process to be started | `{projectId: string}` | Mandatory |
| `locale` | Provides region-specific settings for localization. | `string` | Mandatory |
Add the definitions for these properties in the class file of the component that uses the process renderer component:
```typescript theme={"system"}
projectInfo = { projectId: 'your-project-id' },
locale = 'en-US',
```
Use these parameters in the template as inputs for the `` component:
```html theme={"system"}
```
#### API changes
Process Renderer:
| Category | Old Approach | New Approach |
| -------------------- | --------------------------------- | ------------------------------------ |
| **Process Renderer** | `FlxProcessModule.forRoot({...})` | `FlxProcessModule.withConfig({...})` |
#### Import path updates
| Category | Old Approach | New Approach |
| -------------------------- | --------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| **Import Paths** | `@flowx/ui-sdk` | `@flowx/angular-sdk` (or, in some cases `@flowx/core-sdk`) |
| | `@flowx/ui-theme` | `@flowx/angular-theme` |
| | `@flowx/ui-toolkit` | `@flowx/angular-ui-toolkit` |
| **Process Module** | `import {FlxProcessModule} from '@flowx/ui-sdk';` | `import {FlxProcessModule} from @flowx/angular-sdk` |
| **Localization Module** | `import {FlxLocalizationModule} from '@flowx/ui-sdk';` Include in module imports | `import {FlxLocalizePipe} from '@flowx/angular-sdk';` Remove from module imports |
| **Task Management** | `import {FlxTaskManagementModule} from '@flowx/ui-sdk';` | `import {FlxTasksManagementComponent} from '@flowx/angular-sdk';` |
| **Client Store Interface** | `import {ClientStoreInterface} from '@flowx/ui-sdk';` | `import {ClientStoreInterface} from '@flowx/core-sdk';` |
You can also remove the `FlxLocalizationModule` from any `imports` arrays in modules, and import the `FlxLocalizePipe` instead
### Icon module update
The `withExtraIconSet` method has been replaced with `provideExtraIconSet`, which should now be used in the providers array.
```typescript theme={"system"}
@NgModule({
imports: [
IconModule, // Import the IconModule
],
providers: [
// Use provideExtraIconSet to add your custom icon set
provideExtraIconSet({
customIcon1: 'path/to/custom-icon1.svg',
customIcon2: 'path/to/custom-icon2.svg',
// Add more icons as needed
})
]
})
export class AppModule {}
```
### Custom Interceptors
The new FlowX SDKs do not depend on Angular's `HttpClient` to make API calls, so existing interceptors must be adapted to a new format, for Request Interceptos (eg. custom headers) and Response Interceptors (eg. error handling)
For an overview of implementation details, please refer to the respective sections of the renderer documentation for the new API changes.
# FlowX.AI 4.6.0 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.6.x/v4.6.0-january-2025/v4.6.0-january-2025
Welcome, FlowX fam! The 4.6.0 update is here, and it’s packed with features designed to save you time, boost efficiency, and maybe even make you chuckle. Let’s dive into the details, feature by glorious feature. 🎉
## **What's new?** 🆕
### Projects: Order out of chaos
The new Project concept introduces a streamlined approach to managing and deploying complex projects within FlowX. By grouping all related resources—such as processes, enumerations, integrations, and assets—into a single, organized workspace, projects provide a cohesive view for efficient development and deployment.

💼 **Key Benefits**:
* **Unified Workspace**: Group related processes, integrations, assets, and configurations into one tidy space.
* **Version Control**: Manage multiple builds and versions effortlessly. Rollbacks? No sweat.
* **Resource Sharing**: Reuse processes and configurations across projects like a boss.
**Why you’ll love it**: It’s like going from a messy desk to an organized digital office.
🎥 **Quick Demo**: (Who needs text when you have visuals?)
For more details, check out this section
#### 🛠 Config vs Build Mode
**Config Mode**: Tinker, tweak, and perfect.
* Config mode is the environment where you set up, adjust, and manage your project's resources, processes, and configurations. It's the workspace where you fine-tune every aspect of the project before it's ready for deployment. Think of it as the design phase, where the focus is on setup, organization, and preparation.
**Build Mode**: Lock it, load it, deploy it.
* Build mode is the stage where the configurations you've set up are packaged into a deployable form. This is the runtime-ready version of your project, containing everything needed for it to function in a production environment. A build includes a snapshot of the project’s state at a given point, ensuring stability and predictability when deployed.
For more details, check out this section
For more details, check out this section
***
### Integration Designer: Connect like a pro
It’s like a dating app for your systems: drag, drop, connect, and let the workflows flow.

API integration just got easier! Integration Designer simplifies connecting FlowX with external systems using REST APIs.
✨ **The magic of it**:
* **Drag-and-Drop Interface**: Map data, define workflows, and configure endpoints like a breeze.
* **Flexible Authorization**: Use Service Tokens, Bearer tokens, or go authentication-free.
* **Error Management**: Built-in tools ensure your integrations don’t ghost you.
**Fun Fact**: Integration Designer doesn’t just test APIs (we love you, [Postman](https://www.postman.com/)❤️). It automates workflows, saving you tons of time.
For more details, check out this section
***
### Merge Conflicts 2.0: Merge without the drama
Merging branches? We've overhauled the process to make it faster, smarter, and far less painful.

🧩 **What’s New**:
* **Advanced Conflict Detection**: Pinpoint issues by resource type (Processes, Enumerations, Media, etc.).

* **Resource-Level Resolution**: Resolve conflicts directly in the UI with:
* JSON comparisons (color-coded for clarity!).
* Navigation tools to jump between differences.
* Progress tracking for reviewed items.


Handle unresolved conflicts with the **Merge Anyway** option, which provides flexibility while maintaining control over outcomes:
**Pro Tip**: Use the “Merge Anyway” option if you need to override unresolved conflicts (but use it wisely!).
* A confirmation modal explains how unresolved conflicts will be handled (e.g., prioritizing source branch changes).
* Allows merging to continue even when some conflicts remain unresolved.

***
### AI Agents: Smart, adaptable, always ready to help
FlowX AI Agents bring automation to your fingertips, powered by a flexible, LLM-agnostic core.
🤖 **Why It’s Cool**:
* Works with both open-source and private language models.
* Secure, on-premise deployments available.
* Automates business processes and interactions.
🎥 Check out a quick demo:
Stay tuned for more.
***
### Localization and Internationalization
FlowX is now more global-friendly with enhanced localization features.
Enhanced formatting options for dates, times, numbers, and currencies with support for various international standards including short, medium, long, full, and custom formats.
Support for currency formatting with options to display values using ISO codes or symbols, adapting to user-selected locales and regional preferences.
Comprehensive settings for pluralization, capitalization, alignment, and sorting that adapt to regional requirements, helping cater to a diverse global user base.
New options in the UI Designer to override general settings for text, messages, links, and form elements based on locale and region.
Static and dynamically generated legal documents can now be customized based on regional and locale settings, improving compliance and communication with local audiences.
For more details, check out this section
***
### Data Model 2.0: Data handling, but make it fashion
In this release, we've introduced Data Model 2.0, a major upgrade designed to simplify and enhance data handling. Key improvements include the introduction of reusable objects, a visual representation of complex data structures, and dynamic data binding, all aimed at creating a more reliable and intuitive experience. The new model ensures references are automatically updated when changes are made, streamlining data management across the platform.
**Highlights**:
* **New Root Element**: Provides a structural basis without impacting business logic, ensuring a clear and organized data structure.
* **Enhanced Data Binding**: Expanded to more areas, with dynamic updates based on changes in the data model.
* **Localization**: Added handling mechanism for locale-specific formatting, ensuring accurate data representation.
For more details, check out this section
***
### Task management 2.0
We've enhanced Task Management capabilities, making it easier to create, track, and manage tasks efficiently. The updated Task Management features include customizable views and advanced filtering and sorting options for task data. Additionally, users can now implement both low-code and full-code solutions for a tailored Task Management experience, ensuring maximum flexibility for different business needs.

For more details, check out this section
***
### UI Designer
#### Grid layout
We are excited to introduce the Grid Layout feature in this release, enhancing the flexibility and usability of the UI Designer for creating structured and responsive layouts. With the new Grid Layout, users can organize form elements, tables, and other components using a multi-column and row system, allowing for more complex, bidirectional designs compared to the previous flex-based layout.

#### Table
The Table component is a simple and flexible way to display data in web applications. It lets you customize columns, add pagination, sort and filter data, and apply your own styling. You can resize columns, scroll through data, and even add actions like editing or deleting rows directly in the table. It’s easy to set up, with default columns and rows generated automatically based on your data.

For more details, check out this section
#### FlowX.AI UI Designer new navigator
We are thrilled to introduce the new and improved **UI Designer Navigator**, a major update designed to streamline your UI design process.
The UI layer panel has been redesigned for a more intuitive experience, making it easier to manage and navigate through your design elements.
Dragging and dropping components in the preview is now smoother and more precise, allowing for faster and easier creation of UIs.
You can now change the root component from a form group to a container or vice versa, offering greater flexibility when copying nodes or resolving configuration problems.
It is now simpler to identify where you are placing a component within the hierarchy, thanks to the enhanced drag/reorder functionality in the right panel.
#### Conditional formatting for UI elements
Dynamically update styling and properties of UI elements based on conditions, reducing the need for multiple prototypes.

Conditional styling is available for **text**, **link**, and **container** UI elements based on specific conditions.
#### Hide expressions enhancements
Expanded hide expressions functionality to include:
* Cards
* Collection prototypes and children
* Table cell children (e.g., texts, images, buttons, links)
#### UI actions
* Added a new UI action **Start new project instance**
* Removed the **Start Process Inherit** UI action type.
#### UI action form updates
* Introduced **Functional** and **UX sections** for all action types, with a checkbox for **Add Analytics Name** in the UX section.
* Simplified custom and exclude key management.

***
### Start new project instance action
We’ve introduced the Start New Project Instance node action, enabling users to initiate a completely new process from within an ongoing one. This functionality is perfect for scenarios where isolated use cases are managed across different projects or environments.

***
### Custom components validation
You are able to validate and retrieve data from a generated screen, including data from a custom form section. Additionally, you’ll have the ability to trigger and manage data directly within that section. This will be a major benefit for clients who have chosen to create custom components for the entire screen (for example, a form that isn’t supported natively by the platform).
***
### Autocomputed data to send
In previous platform versions, when creating your UI screens and working with data, you had to ensure that all the data stored in your process keys was saved in the process instance. This required adding an extra parameter called "Data to send" to the "Save Data" node action.
**Older versions** vs **v4.6.0**:
Now, with the autocompute feature, this step is no longer necessary, as the data is automatically saved and sent on your process instance.
You no longer need to add "Save Data" node actions, but make sure to include "Forms to Validate" on the UI Actions. This helps ensure that data is submitted correctly and automatically activates any added validators where they exist.

However, you still have the option to customize which keys are included or excluded as needed.

***
### **Scripting UX Improvements**: *Write code like a wizard*
* **Autocomplete**: Get tailored suggestions based on your data model.
* **New Editors**: JSON and hide/disable expressions editors now include examples, syntax help, and better visual feedback.

***
### React & Angular SDKs
Dev friends, we heard you. FlowX now integrates smoothly into your React and Angular apps. It’s like peanut butter and jelly, but make it code.
#### React SDK
With the 4.6.0 release, we're excited to announce the launch of the FlowX React SDK! This new SDK empowers developers to seamlessly integrate FlowX.AI capabilities into React applications, making it easier than ever to build highly interactive, responsive, and dynamic user experiences.
To get started, simply install the FlowX React SDK via npm and check our documentation for examples and best practices!
#### New Angular SDK
We're excited to announce new releases for FlowX packages to support web applications:
* `@flowx/core-sdk`
* `@flowx/angular-sdk`
* `@flowx/angular-theme`
* `@flowx/angular-ui-toolkit`
* `@flowx/core-theme`
We recommend upgrading to the **latest** versions of all @flowx packages to take full advantage of these new features and improvements. Check the deployment guidelines for version details.
***
### Analytics integration for Container Apps
Container apps now support tracking "Screen Displayed" and "Action Executed" events, configurable in the UI Designer to improve insights into user interactions.
**UI Designer updates**
* **Analytics Screen Name:** Configurable under Root UI components (Cards and Containers) to enable tracking in analytics platforms like Google Analytics.
"Screen Displayed" events support user task-based reporting, such as when a user task screen is shown.

The configured values are stored in `flowxProps.analytics`, making them accessible for integration with analytics tools.
* **Action Analytics:** Tracks user actions (e.g., button clicks) with tags set directly in the UI Action Form.
Added analytics configuration in the **UX Section** for all UI action types.

Values are saved in `params.analytics` via the PATCH `/actions` request.
**Renderers updates**
Renderers now expose a public API for triggering analytics events:
* **Screen Events:** Triggered on user task display, using `flowxProps.analytics`.
* **Action Events:** Triggered on action execution, using `params.analytics`.
Dynamic values such as process store keys and replace tags are supported for more contextual tracking.
***
### Plugin updates
**Notifications** and **Documents** plugins have been integrated as **project resources**.
***
### Scheduled Processes: Timer management reimagined
We've completely redesigned how you manage timer-triggered processes. Before 4.6.0, timer activation was managed through a quick actions menu in process definition headers; now it's handled via dedicated UI section in the Runtime tab under Scheduled Processes.

🕒 Key Improvements:
* **Centralized Timer Management:** All process timers are now visible and manageable in one dedicated location
* **Persistent Settings:** Timer configurations persist across build exports/imports
* **Environment Control:** Activate or deactivate timers without redeploying your application
For more details, check out this section
## Bug fixes 🐞
### Rendering
* **Default Value Initialization for UI Elements**: Resolved an issue where certain UI elements were initialized with incorrect default values.
* **Improved Security for Hidden Fields**: Fixed a vulnerability where hidden fields could be accessed through browser developer tools.
* **Form Validation Reset on UI Dismissal**: Addressed an issue where form validation errors persisted after the UI was closed.
* **Keybinding Issues on Windows**: Fixed a bug where pressing specific keys triggered unintended operations in the designer.
* **Input Field Validation for Number Type**: Corrected the validation logic for number input fields to ensure consistent behavior.
* **Improved Datepicker Popup Positioning**: Resolved an issue where the datepicker popup overlapped the associated input field.
* **Manual Date Entry in Datepicker**: Fixed an issue where manually entering a date after selecting one from the datepicker caused errors.
* **Enhanced Update Mechanism for Custom Components**: Improved the reliability of updates for custom components to reflect changes consistently.
## Known issues 😢
We’re aware of a few quirks during merge conflicts and are working to fix them. Here’s a quick rundown:
* After a merge, sequences without a connection to an end node may appear on the canvas in cases of conflicts related to deleted nodes in one of the versions. This may occur because the merge mechanism does not detect that a sequence needs to be deleted if, in the final version, the node remains deleted.
* Navigation areas – After a merge, inconsistencies in the navigation areas hierarchy calculated during merging may result in navigation areas being hidden in the final merged version.
* No merge conflict detected if a user task node is deleted in the source branch and its UI is modified in the destination branch.
* Nodes may end up having two different outgoing sequences in certain scenarios: When a node is not connected to another node, and both the source and target branches define different sequences to different nodes, the merged version may contain both sequences. In particular, this may cause inconsistencies for boundary nodes, which cannot have multiple outgoing sequences.
* Gateway nodes may lose some of their configurations during merging when conflicts arise.
* Conflicts arising from moving nodes to different swimlanes in both the source and target branches are not detected correctly and result in a merge error.
* **Duplicate content values can be created during merging**: Merging branches with enumeration updates can result in duplicate content values or child enums with the same code. This occurs when identical names are added to the same enum in different branches, bypassing backend validation. Instead of flagging a conflict, the merge proceeds, creating duplicate entries. This issue disrupts the expected uniqueness constraint for enumeration values.
* **Enum content values might not save correctly in some cases**: In specific scenarios involving transformations of content values into child enums across branches, content values added in one branch may not appear after merging. Despite accepting changes from the branch where the content value was added, the merged version omits it, leading to incomplete or inconsistent enumeration data.
* **New substitution tags with the same name on different branches aren’t flagged**: Merging branches that include new substitution tags with identical names on different branches does not trigger a conflict. Instead, both tags are retained, resulting in duplicate substitution tags with the same name but different values. This issue bypasses expected conflict detection and can lead to inconsistencies in substitution tag usage.
* **Adding values to deleted data model keys does not raise conflicts**: When values are added to a data model key in one branch and the same key is deleted in another, merging does not generate a conflict. Instead, the added values from the first branch are silently lost in the merged version. This issue bypasses expected conflict detection, leading to data loss and inconsistencies in the resulting data model.
* Branches with media library assets sometimes fail to merge into the main branch: Merging branches with media library assets can result in a 500 Internal Server Error when changes to the same asset occur across multiple branches. This issue typically arises when one branch is merged into another, and then the combined branch is merged into the main branch. The failure occurs due to null parameter handling during the merge process, preventing the merge from completing successfully.
* Branches with notification and document templates fail to merge into the main branch
* After a successful merge, the merged version is not selected in the versioning modal.
* Some entries in the merge conflicts tree may show numbers instead of specific identifiers (e.g. forms);
* **Unnecessary scrollbars appear in the merge modal for single items**: The merge conflict modal displays unnecessary scrollbars when only a single item is present in the list. This occurs in scenarios where media library assets with long keys are involved, creating a layout issue that affects the user interface. While functionality is not impacted, this visual inconsistency can reduce the overall user experience during conflict resolution.
* **Fields like `originalCreationTimestamp` and `flowxUuid` are incorrectly flagged as conflicts**: The merge conflict modal displays unnecessary scrollbars when only a single item is present in the list. This occurs in scenarios where media library assets with long keys are involved, creating a layout issue that affects the user interface. While functionality is not impacted, this visual inconsistency can reduce the overall user experience during conflict resolution.
## Changes 🔧
* **Web Renderer Caching:** Improved resource caching with browser mechanisms keyed to build IDs.
* **Process Designer:** Enhanced drag-and-drop functionality for node placement.
***
## Additional information
For deployment guidelines and further details, refer to:
Migrating from v4.1.x:
# Deployment guidelines v4.6.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.6.x/v4.6.1-february-2025/deployment-guidelines-v4.6.1
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

After upgrading to the 4.6.1 FlowX.AI release, you cannot import old process definitions or resources from versions older than 4.6.0.
## Component versions
| Component | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **8.1.1** | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **7.2.6** | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.69.3** | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.69.3** | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.69.3** | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **5.69.3** | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.69.3** | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.69.3** | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.69.3** | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.69.3** | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.69.3** | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.2.2** | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 4.1.3 | 4.1.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.0.4** | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.0.25** | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | **4.0.4** | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **4.0.11** | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
Note: The same container image and Helm chart are used for **Application Manager** and **Runtime Manager**.
## AI Agents
| Component | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ---------- | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.9.16** | 1.9.10 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.6.15** | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.10.6** | 1.10.3 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.2.27** | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.6.5** | 1.5.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.6.1 | Keycloak | 22.x |
| 4.6.1 | Kafka | 3.2.x |
| 4.6.1 | PostgreSQL | 16.2.x |
| 4.6.1 | MongoDB | 7.0.x |
| 4.6.1 | Redis | 7.2.x |
| 4.6.1 | Elasticsearch | 7.17.x |
| 4.6.1 | Oracle Database | 21C/ 21-XE |
| 4.6.1 | Angular (Web SDK) | 19.x |
| 4.6.1 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
# Migrating from previous versions to v4.6.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.6.x/v4.6.1-february-2025/migrating-from-v4.1.x-to-v4.6.1
If you're upgrading from a v4.6.0 version, make sure to first review the migration guide for v4.6.0 release documentation to capture all the significant changes and also the deployment guidelines:
If you're moving from v4.1.x to v4.6.1, don’t forget to check the relevant migration guides for each version to ensure nothing is missed:
Do not also forget to check all the deployment guidelines in between releases to do not miss important configurations or changes:
# FlowX.AI 4.6.1 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.6.x/v4.6.1-february-2025/v4.6.1-february-2025
FlowX.AI 4.6.1 is here with important fixes and improvements to keep things running smoothly. No new features this time—just focused updates to improve stability, fix bugs, and enhance overall performance. Simple, clean, and efficient.
## **What's new?** 🆕
### Rendering
**Form Elements** improvements:
* **Default Value Handling**: Defaults are applied only when no existing value is found, and set upon first display (with specific exceptions).
* **Data Consistency**: Form elements now save data in standardized formats based on type for improved reliability.
* **Smart Defaults**: Clear fallback behaviors for elements like switches, sliders, and checkboxes when no value is present.
* **Synchronized Inputs**: Linked form elements (e.g., input + slider) stay in sync with automatic value adjustments within set limits.
* **Dynamic Dependencies**: Form elements can dynamically adjust based on related components’ values for greater flexibility.
### Merge conflicts
* Improvement: merged version is now selected after a successful merge in versioning modal.
## Bug fixes 🐞
### Merge conflicts
* Fixed an issue that caused conflicts involving notification and document templates to fail.
* Fixed an issue where merges failed when a deleted configuration parameter was updated on a branch.
* Fixed an issue that resulted in duplicate substitution tag keys appearing in the merged version.
* Fixed an issue where merges failed due to the same dependency being added to both the source and target branches.
* Fixed issues related to workflow conflicts.
### Rendering
* Fixed an issue where documents from the media library were not loading correctly when added as a file preview in a user task.
### Integration Designer
* Fixed issue causing a 400 error when adding an enum mapper to the body tab due to incorrect data validation.
* Fixed issue where the last attribute in the objects table was not visible at higher zoom levels due to UI rendering constraints.
## Known issues 😢
We’re aware of a few quirks during merge conflicts and are working to fix them. Here’s a quick rundown:
* After a merge, sequences without a connection to an end node may appear on the canvas in cases of conflicts related to deleted nodes in one of the versions. This may occur because the merge mechanism does not detect that a sequence needs to be deleted if, in the final version, the node remains deleted.
* Navigation areas – After a merge, inconsistencies in the navigation areas hierarchy calculated during merging may result in navigation areas being hidden in the final merged version.
* No merge conflict detected if a user task node is deleted in the source branch and its UI is modified in the destination branch.
* Nodes may end up having two different outgoing sequences in certain scenarios: When a node is not connected to another node, and both the source and target branches define different sequences to different nodes, the merged version may contain both sequences. In particular, this may cause inconsistencies for boundary nodes, which cannot have multiple outgoing sequences.
* Gateway nodes may lose some of their configurations during merging when conflicts arise.
* Conflicts arising from moving nodes to different swimlanes in both the source and target branches are not detected correctly and result in a merge error.
* **Duplicate content values can be created during merging**: Merging branches with enumeration updates can result in duplicate content values or child enums with the same code. This occurs when identical names are added to the same enum in different branches, bypassing backend validation. Instead of flagging a conflict, the merge proceeds, creating duplicate entries. This issue disrupts the expected uniqueness constraint for enumeration values.
* **Enum content values might not save correctly in some cases**: In specific scenarios involving transformations of content values into child enums across branches, content values added in one branch may not appear after merging. Despite accepting changes from the branch where the content value was added, the merged version omits it, leading to incomplete or inconsistent enumeration data.
* **Adding values to deleted data model keys does not raise conflicts**: When values are added to a data model key in one branch and the same key is deleted in another, merging does not generate a conflict. Instead, the added values from the first branch are silently lost in the merged version. This issue bypasses expected conflict detection, leading to data loss and inconsistencies in the resulting data model.
* Branches with media library assets sometimes fail to merge into the main branch: Merging branches with media library assets can result in a 500 Internal Server Error when changes to the same asset occur across multiple branches. This issue typically arises when one branch is merged into another, and then the combined branch is merged into the main branch. The failure occurs due to null parameter handling during the merge process, preventing the merge from completing successfully.
* After a successful merge, the merged version is not selected in the versioning modal.
* Some entries in the merge conflicts tree may show numbers instead of specific identifiers (e.g. forms);
* **Unnecessary scrollbars appear in the merge modal for single items**: The merge conflict modal displays unnecessary scrollbars when only a single item is present in the list. This occurs in scenarios where media library assets with long keys are involved, creating a layout issue that affects the user interface. While functionality is not impacted, this visual inconsistency can reduce the overall user experience during conflict resolution.
* **Fields like `originalCreationTimestamp` and `flowxUuid` are incorrectly flagged as conflicts**: The merge conflict modal displays unnecessary scrollbars when only a single item is present in the list. This occurs in scenarios where media library assets with long keys are involved, creating a layout issue that affects the user interface. While functionality is not impacted, this visual inconsistency can reduce the overall user experience during conflict resolution.
## Additional information
For deployment guidelines and further details, refer to:
Migrating from v4.6.0:
# Deployment guidelines v4.7.0
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.0-february-2025/deployment-guidelines-v4.7.0
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

After upgrading to the 4.7.0 FlowX.AI release, you cannot import old process definitions or resources from versions older than 4.6.0.
In version 4.7, the import-export functionality for application-version is no longer backward compatible.
* Zip files exported from version 4.7 cannot be imported into earlier FlowX versions.
* Similarly, zip files from earlier versions cannot be imported into 4.7.
Note: Zip files for builds and specific resources remain unaffected.
## Component versions
| Component | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **8.3.1** | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **7.5.1** | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.80.6** | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.80.6** | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.80.6** | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **5.80.6** | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.80.6** | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.80.6** | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.80.6** | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.80.6** | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.80.6** | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.2.11** | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **5.0.2** | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **5.0.5** | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **6.1.0** | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **6.3.1** | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **task-management-plugin** | **7.2.2** | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **4.0.4** | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **6.0.4** | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | **4.0.3** | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.3.2** | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.6.0** | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **2.6.0** | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **2.1.0** | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | **4.0.5** | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **4.0.12** | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
## AI Agents
| Component | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ----------- | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.9.21** | 1.9.16 | 1.9.10 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.7.2** | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.10.13** | 1.10.6 | 1.10.3 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.2.31** | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.7.0** | 1.6.5 | 1.5.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Recommended Supported Version |
| ---------------- | -------------------- | ----------------------------- |
| 4.7.0 | Keycloak | 22.x, 26.x |
| 4.7.0 | Kafka | 3.2.x |
| 4.7.0 | PostgreSQL | 16.2.x |
| 4.7.0 | Oracle Database | 21c, 23ai |
| 4.7.0 | MongoDB | 7.0.x |
| 4.7.0 | Redis | 7.2.x |
| 4.7.0 | Elasticsearch | 7.17.x |
| 4.7.0 | Angular (Web SDK) | 19.x |
| 4.7.0 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
### Deprecation notice
Starting FlowX 5.0, the following versions of 3rd Party Dependencies will no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.9
* Redis versions older than 7.4
# Migrating from previous versions to v4.7.0
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.0-february-2025/migrating-from-v4.1.x-to-v4.7.0
If you're upgrading from a v4.6.x version, make sure to first review the migration guide for v4.6 release documentation to capture all the significant changes and also the deployment guidelines:
If you're moving from v4.1.x to v4.7.0, don’t forget to check the relevant migration guides for each version to ensure nothing is missed:
Do not also forget to check all the deployment guidelines in between releases to do not miss important configurations or changes:
# FlowX.AI 4.7.0 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.0-february-2025/v4.7.0-february-2025
FlowX.AI 4.7.0 is here to keep your projects vibing, your merges drama-free, and your configs under control—because struggling with your platform is *so* last season. 😎🔥
## What's new? 🆕
✅ Copy resources across projects\
✅ Duplicate resources (in the same project/library)\
✅ Resources usage tracking\
✅ Smarter merge conflict detection & resolution\
✅ Libraries can now define configuration parameters\
✅ Dynamic Kafka topics using configuration parameters
## Projects
### Copy resources across projects
Moving resources between projects is now **fast and seamless**. The new **Copy to Another Project** feature ensures all dependencies stay intact, eliminating the hassle of manual adjustments.
1️⃣ **Select a destination** – Choose the target project or library.\
2️⃣ **Pick a branch (if applicable)** – For WIP versions, select the target branch.\
3️⃣ **Review dependencies** – The system displays referenced resources and validates dependencies.\
4️⃣ **Resolve identifier conflicts** – If an identifier already exists in the destination, you'll be prompted to either:
* **Keep both** (create a duplicate)
* **Replace** (overwrite the existing resource)
* **Use destination** (retain the existing resource without copying)
* **No broken references** – Everything stays connected.
* **Auto-add missing dependencies** – No manual setup required.
* **Works with WIP & committed versions (only from committed to WIP)** – Flexibility for your workflow.

Check this section for more details.
***
### Duplicate resources
The **Duplicate Resource** feature lets users create a copy of an existing resource within the same project or library version, streamlining workflows and ensuring quick reusability.
You can duplicate the following resources:
* **Processes**
* **Enumerations**
* **Media files (including Global media library files)**
* **Notification templates**
* **Document templates**
* **Views**
* **Duplicate options** are available from each resource’s three-dot menu (table row & secondary navigation).
* When selected, a **"Duplicate" modal** opens with a prefilled name: *Copy of \[Resource Name]* (which can be edited).
* **Cancel** to discard changes or **Duplicate** to create an exact copy in the same project/library version.
* **Success confirmation:** The system navigates to the newly created resource and displays a success message.
* **Error handling:** If a resource with the same name/key exists, users will be prompted to rename it before proceeding.
💡 **Use cases:**
* Quickly iterate on existing resources.
* Reduce redundant manual setup.
* Maintain consistency within projects.
* Easily clone complex configurations for testing and modifications.
Check this section for more details.
***
### Track where your resources are used
Monitoring your resources has never been simpler and more efficient. Stay on top of where and how they’re being used.


Track where a process is referenced, with a clear **Usage Overview modal** that dynamically updates when references change.
See where enumerations are used across **UI, Data Models, Systems, and Workflows** before making changes.
Identify **which UI elements reference media assets** so you don’t accidentally break designs.
📌 **Before deleting a resource, a confirmation modal lists all affected references. No more surprises!**
***
### Configuration parameters overrides
🔹 **Libraries can now define configuration parameters** to help test processes or workflows that use those parameters.
🔹 However, **libraries do not support overrides**.
* **Overrides for library config parameters must be done within a project** where the library is added as a dependency.
* **Overrides cannot be added in libraries directly.**
💡 **What this means:**
* Libraries provide **default values** for configuration parameters.
* Projects using those libraries **can override these values** as needed.
* This ensures **clear separation between library defaults and project-specific configurations** while maintaining flexibility.
✨ **Overrides take precedence** over library values—so you stay in control.
***
### Merge conflict enhancements
Merge conflicts are never fun, but at least now they’re **easier to handle**.
🚨 Prevents merging if identical resource identifiers exist in both branches (e.g., same name, key, or code).
🖥️ Resize the merge conflict tree for better visibility and navigation.
📢 A new conflict detection system for parent changes/deletions in both branches.
***
## SDK changes
### Expose Enumerations API in Angular SDK
Developers can now dynamically retrieve enumerations via the Angular SDK, making it easier to use enums in custom components like dropdowns.
How it Works?
A new method in the Angular SDK allows direct access to enumerations, reducing manual imports and improving flexibility.
**Usage**
The `getEnumeration()` function returns key-value pairs that can be used in components that need enumeration data:
```typescript theme={"system"}
getEnumeration(enumName: string): { value: string; label: string }[]
```
* `enumName` (string) – The name of the enumeration to retrieve (e.g., 'UserRoles', 'cities')
* Returns: An array of objects containing value-label pairs representing the requested enumeration
The enumeration service works seamlessly with Angular's resource API for reactive state management:
```typescript theme={"system"}
import { Component, effect, model, resource } from '@angular/core';
import { getEnumeration } from '@flowx/angular-sdk';
@Component({
selector: 'app-dynamic-enum-select',
template: `
`
})
export class DynamicEnumSelectComponent {
// Create a signal to track the currently selected enum
enumName = model('UserRoles');
// Use resource API to reactively load enumerations when enumName changes
options = resource({
request: this.enumName,
loader: ({ request: enumName }) => getEnumeration(enumName),
});
constructor() {
effect(() => {
if (this.options.isLoading()) {
console.log(`Loading enumeration: ${this.enumName()}`);
} else {
console.log(`Loaded enumeration: ${this.enumName()}`, this.options.value());
}
});
}
}
```
***
## **Bug fixes** 🐞
✔️ Improved **merge conflict detection and resolution**\
✔️ Fixed **UI rendering issues**
***
## Changes
### Dynamic Kafka topics
FlowX 4.7.0 introduces **Dynamic Kafka Topics**, enabling more flexible and configurable messaging across processes.
🔹 **What’s new?**
* Use **Configuration Parameters** to dynamically assign Kafka topics in **Kafka Send** and **Kafka Receive** actions.
* Concatenate predefined parameters with process variables for **on-the-fly topic selection**.
* Reduce hardcoded values and **simplify environment-specific configurations**.
💡 **Why it matters:**
* Makes **Kafka integrations more scalable** across different deployments.
* Supports **multi-topic messaging** for different use cases without manual updates.
* Ensures better **reusability and maintainability** in process configurations.
📌 Check the [Kafka Send Action](../../4.7.x/docs/building-blocks/actions/kafka-send-action#dynamic-kafka-topics) section for setup details.
***
### Export/import compatibility
In version 4.7, the import-export functionality for application-version is no longer backward compatible.
* Zip files exported from version 4.7 cannot be imported into earlier FlowX versions.
* Similarly, zip files from earlier versions cannot be imported into 4.7.
Zip files for builds and specific resources remain unaffected.
***
## **Additional information**
📌 [Deployment Guidelines v4.7.0](./deployment-guidelines-v4.7.0)\
📌 [Migration Guide (from v4.6.0)](./migrating-from-v4.1.x-to-v4.7.0)
# Deployment guidelines v4.7.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.1-march-2025/deployment-guidelines-v4.7.1
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

After upgrading to the 4.7.1 FlowX.AI release, you cannot import old process definitions or resources from versions older than 4.7.1.
## Component versions
| Component | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **8.5.1** | 8.3.1 | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **7.7.6** | 7.5.1 | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.83.8** | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.83.8** | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.83.8** | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **5.83.8** | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.83.8** | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.83.8** | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.83.8** | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.83.8** | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.83.8** | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.3.3** | 5.2.11 | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **5.0.4** | 5.0.2 | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **5.0.7** | 5.0.5 | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **6.1.3** | 6.1.0 | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **6.3.4** | 6.3.1 | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **task-management-plugin** | **7.2.6** | 7.2.2 | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **4.0.6** | 4.0.4 | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **6.0.6** | 6.0.4 | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | **4.0.5** | 4.0.3 | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.3.9** | 2.3.2 | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.9.4** | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **2.9.4** | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **2.2.2** | 2.1.0 | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | **4.0.7** | 4.0.5 | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **4.0.13** | 4.0.12 | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
## AI Agents
| Component | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ----------- | ------- | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.9.27** | 1.9.21 | 1.9.16 | 1.9.10 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.8.2** | 1.7.2 | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.10.17** | 1.10.13 | 1.10.6 | 1.10.3 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.2.35** | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.7.4** | 1.7.0 | 1.6.5 | 1.5.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Recommended Supported Version |
| ---------------- | -------------------- | ----------------------------- |
| 4.7.1 | Keycloak | 22.x, 26.x |
| 4.7.1 | Kafka | 3.2.x |
| 4.7.1 | PostgreSQL | 16.2.x |
| 4.7.1 | Oracle Database | 21c, 23ai |
| 4.7.1 | MongoDB | 7.0.x |
| 4.7.1 | Redis | 7.2.x |
| 4.7.1 | Elasticsearch | 7.17.x |
| 4.7.1 | Angular (Web SDK) | 19.x |
| 4.7.1 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
### Deprecation notice
Starting FlowX 5.0, the following versions of 3rd Party Dependencies will no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.9
* Redis versions older than 7.4
# Migrating from previous versions to v4.7.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.1-march-2025/migrating-from-v4.1.x-to-v4.7.1
If you're upgrading from a v4.7.0 version, make sure to first review the deployment guidelines for v4.7.0 release documentation to capture all the significant changes and also the deployment guidelines:
If you're upgrading from a v4.6.x version, make sure to first review the migration guide for v4.6 release documentation to capture all the significant changes and also the deployment guidelines:
If you're moving from v4.1.x to v4.7.0, don’t forget to check the relevant migration guides for each version to ensure nothing is missed:
Do not also forget to check all the deployment guidelines in between releases to do not miss important configurations or changes:
# FlowX.AI 4.7.1 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.1-march-2025/v4.7.1-march-2025
FlowX.AI 4.7.1 brings enhanced resource navigation, better error detection, and workflow improvements to make your development journey even smoother! 🚀
## What's new? 🆕
✅ Enhanced resource usage tracking with direct navigation\
✅ Upgraded JavaScript support to ECMAScript 15 (2024) in Business Rules\
✅ Added Python 3 support with 3x performance improvement\
✅ Major performance enhancements for both design time and runtime\
✅ Security enhancements for runtime endpoints
## Projects
### Enhanced resource usage navigation
We've significantly improved how you navigate between resources and their references with direct navigation capabilities. Now you can easily jump from the usage tracking panel to the exact location where a resource is referenced.
1️⃣ **Access resource usage** – View where a resource is being used through the usage panel.\
2️⃣ **One-click navigation** – Use the new redirect button to jump directly to the referenced location.\
3️⃣ **Missing resource detection** – Easily identify and fix missing resource references with clear indicators.
* **Faster troubleshooting** – Directly navigate to problem areas without manual searching.
* **Improved productivity** – Less time spent hunting down references means more time building.
* **Better error prevention** – Quickly spot and fix missing resources before they cause issues.
***
## Enhanced scripting capabilities
### ECMAScript 15 (2024) support for Business Rules
FlowX.AI 4.7.1 brings the latest JavaScript features to your business rules with an upgrade to ECMAScript 15 (2024).
* Access to the latest JavaScript language features
* Modern syntax for cleaner, more maintainable rules
* Enhanced tooling and IDE support
* Write more concise and expressive business rules
* Leverage modern JavaScript patterns and best practices
* Improved developer experience with better IDE integration
**Important Configuration Note:** Nashorn engine remains the default runtime. To enable GraalJS support with its performance improvements, you must set the feature toggle `FLOWX_SCRIPTENGINE_USEGRAALVM` to `true` in the [**Process Engine configuration**](/4.7.x/setup-guides/flowx-engine-setup-guide/engine-setup) and in the **AI Developer** (if used) agent configuration. If this configuration variable is missing or set to `false`, Nashorn will be used.
### Python 3 support for Business Rules
We've upgraded our Python scripting capabilities to Python 3, delivering significant performance improvements while maintaining compatibility.
Python scripts now run at least 3 times faster than with Python 2.7.
Take advantage of Python 3's improved syntax, libraries, and security features.
**Important Configuration Note:** Python 2.7 remains the default runtime. To enable Python 3 support with its performance improvements, you must set the feature toggle `FLOWX_SCRIPTENGINE_USEGRAALVM` to `true` in the [**Process Engine configuration**](/4.7.x/setup-guides/flowx-engine-setup-guide/engine-setup) and in the **AI Developer** (if used) agent configuration. If this configuration variable is missing or set to `false`, Python 2.7 will be used.
More details about the scripting capabilities can be found in the [Supported scripting languages](../../4.7.x/docs/building-blocks/supported-scripts) section.
***
## Performance improvements 🚀
We've made significant performance enhancements throughout the platform to make your development and runtime experience smoother and faster.
### Design time improvements
For large processes, you'll notice dramatic improvements:
| Operation | Improvement |
| ----------------- | -------------- |
| Cloning a process | **5x faster** |
| Opening a process | **70x faster** |
### Runtime enhancements
Platform average response time has been **reduced by 20%** in our comprehensive benchmark\*.
\*The benchmark simulates a typical business process with a combination of user and service tasks. It includes rules that automate decision-making, as well as events for time-sensitive actions and communication. The process also covers various system functions, ensuring the platform can efficiently manage complex workflows with both individual and parallel tasks.
***
## Security enhancements 🔒
We've significantly improved platform security by implementing proper endpoint access controls and separation between internal and public-facing APIs.
Runtime execution proxy vulnerability addressed with comprehensive endpoint updates.
Better separation between design-time and runtime endpoints with proper access controls.
### Endpoint security updates
We've implemented a comprehensive security update for runtime endpoints to prevent potential proxy vulnerabilities:
* Redesigned API structure to separate internal (`runtime-internal`) from external-facing (`runtime`) endpoints
* Migrated design-time operations to use `runtime-internal` endpoints for enhanced security
* Moved specific management operations to dedicated `build-mgmt` endpoints
* Updated all API clients to use the new secure endpoints
**Important:** Make sure to update to the corresponding version of the [**`flowx-admin`**](./deployment-guidelines-v4.7.1#component-versions) to benefit from these security enhancements.
### Enhanced resource caching in Angular SDK
The Angular SDK now includes an improved caching mechanism for CMS resources, optimizing loading times and performance. The cache parameter on the `flx-process-renderer` component allows developers to control caching behavior in different environments.
Find details on controlling CMS resource caching during development and production.
## **Bug fixes** 🐞
* Fixed various minor issues to improve overall stability
* Resolved some UI inconsistencies
* Addresses performance optimizations
* Fixed general usability issues
***
## **Additional information**
📌 [Deployment Guidelines v4.7.1](./deployment-guidelines-v4.7.1)\
📌 [Migration Guide (from v4.7.0)](./migrating-from-v4.7.0-to-v4.7.1)\
📌 [Supported scripting languages](../../4.7.x/docs/building-blocks/supported-scripts)
# Deployment guidelines v4.7.2
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.2-march-2025/deployment-guidelines-v4.7.2
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

After upgrading to the 4.7.2 FlowX.AI release, you cannot import old process definitions or resources from versions older than 4.7.2.
## Component versions
| Component | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **8.9.0** | 8.5.1 | 8.3.1 | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **7.8.5** | 7.7.6 | 7.5.1 | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.84.5** | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.84.5** | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.84.5** | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **5.84.5** | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.84.5** | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.84.5** | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.84.5** | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.84.5** | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.84.5** | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.4.8** | 5.3.3 | 5.2.11 | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **5.0.10** | 5.0.4 | 5.0.2 | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **5.0.16** | 5.0.7 | 5.0.5 | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **6.1.12** | 6.1.3 | 6.1.0 | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **6.3.13** | 6.3.4 | 6.3.1 | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **task-management-plugin** | **7.2.14** | 7.2.6 | 7.2.2 | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **4.0.13** | 4.0.6 | 4.0.4 | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **6.0.14** | 6.0.6 | 6.0.4 | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | **0.2.0** | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | **4.0.12** | 4.0.5 | 4.0.3 | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.3.16** | 2.3.9 | 2.3.2 | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.10.9** | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **2.10.9** | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **2.2.9** | 2.2.2 | 2.1.0 | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | 4.0.7 | 4.0.7 | 4.0.5 | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 4.0.13 | 4.0.13 | 4.0.12 | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
## AI Agents
| Component | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ----------- | ------- | ------- | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.9.35** | 1.9.27 | 1.9.21 | 1.9.16 | 1.9.10 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.8.9** | 1.8.2 | 1.7.2 | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.10.24** | 1.10.17 | 1.10.13 | 1.10.6 | 1.10.3 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.4.1** | 1.2.35 | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.7.9** | 1.7.4 | 1.7.0 | 1.6.5 | 1.5.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Recommended Supported Version |
| ---------------- | -------------------- | ----------------------------- |
| 4.7.2 | Keycloak | 22.x, 26.x |
| 4.7.2 | Kafka | 3.2.x |
| 4.7.2 | PostgreSQL | 16.2.x |
| 4.7.2 | Oracle Database | 21c, 23ai |
| 4.7.2 | MongoDB | 7.0.x |
| 4.7.2 | Redis | 7.2.x |
| 4.7.2 | Elasticsearch | 7.17.x |
| 4.7.2 | Angular (Web SDK) | 19.x |
| 4.7.2 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
### Deprecation notice
Starting FlowX 5.0, the following versions of 3rd Party Dependencies will no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.9
* Redis versions older than 7.4
## Additional configuration
Added new environment variable on Process Engine:
### Message routing configuration
| Environment variable | Description | Default value |
| -------------------------- | --------------------------------------------------------------------- | ------------------- |
| `KAFKA_DEFAULT_FX_CONTEXT` | Default context value for message routing when no context is provided | `""` (empty string) |
When `KAFKA_DEFAULT_FX_CONTEXT` is set and an event is received on Kafka without an fxContext header, the system will automatically apply the default context value to the message.
# Migrating from previous versions to v4.7.2
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.2-march-2025/migrating-from-v4.1.x-to-v4.7.2
If you're upgrading from a v4.7.0 version, make sure to first review the deployment guidelines for v4.7.0 and v4.7.1 release documentation to capture all the significant changes and also the deployment guidelines:
If you're upgrading from a v4.6.x version, make sure to first review the migration guide for v4.6 release documentation to capture all the significant changes and also the deployment guidelines:
If you're moving from v4.1.x to v4.7.0, don’t forget to check the relevant migration guides for each version to ensure nothing is missed:
Do not also forget to check all the deployment guidelines in between releases to do not miss important configurations or changes:
# FlowX.AI 4.7.2 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.2-march-2025/v4.7.2-march-2025
FlowX.AI 4.7.2 delivers improved merge conflict handling with retry capabilities, deprecates DMN business rules, and fixes issues with subprocess handling, media file imports, and OCR functionality to enhance your development workflow! 🚀
## **What's new? 🆕**
✅ Improved merge conflict handling with retry functionality\
✅ Enhanced error messages during failed merges\
✅ Streamlined workflow for resolving merge conflicts
## Merge conflicts
### Improved error messages when merge fails
We've enhanced the merge conflict resolution experience with more informative error messages and a new retry functionality:
* When a merge fails, users can now see a "Retry merge" button on the Merge failed modal
* Clicking this button allows users to attempt the merge again without losing previous work
The system now handles two distinct scenarios:
**1. When conflicts exist:**
* The system opens the Merge conflicts panel with the previous state of the merge before the failed attempt
* This preserves all your conflict resolution work so you can fix the specific issues that caused the failure

**2. When no conflicts exist:**
* The system automatically retries the merge operation
* This streamlines the workflow when the merge failure was due to temporary issues rather than actual conflicts

## Process engine
### Deprecated DMN rules
In version 4.7.2, we've deprecated the [\[**DMN (Decision Model and Notation)**\]](../../4.7.x/docs/building-blocks/actions/business-rule-action/dmn-business-rule-action) business rule actions. This change affects how business rules are configured on task/user task nodes in business processes.
**What's changing:**
* DMN is no longer available as a language option when configuring business rule actions
**What's next:**
For guidance on using alternative business rule languages, please refer to our [supported scripting languages](../../4.7.x/docs/building-blocks/supported-scripts) documentation.
## **Bug fixes** 🐞
* Resolved export/import issues with media library files, particularly for applications migrated from earlier versions
* Fixed an issue where parallel multi-instance Call Activity would incorrectly trigger a subprocess when using an empty array list as a variable
* Fixed a display issue where not all subprocesses were visible in the subprocess list on smaller screens
* Fixed a bug where message events couldn't be caught when placed directly after an uninterrupting timer event
* Resolved "Unsupported Media Type" errors when importing application versions with media file binaries
* Fixed an issue where color palette changes in Theme settings couldn't be saved at 100% browser resolution on smaller screens
* Fixed a issue where OCR plugin failed due to missing correlation headers
***
## **Additional information**
📌 [Deployment Guidelines v4.7.2](./deployment-guidelines-v4.7.2)\
📌 [Migration Guide (from v4.7.0)](./migrating-from-v4.7.0-to-v4.7.2)\
📌 [Supported scripting languages](../../4.7.x/docs/building-blocks/supported-scripts)
# Deployment guidelines v4.7.3
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.3-april-2025/deployment-guidelines-v4.7.3
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

After upgrading to the 4.7.3 FlowX.AI release, you cannot import old process definitions or resources from versions older than 4.7.3.
## Component versions
| Component | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **8.13.0** | 8.9.0 | 8.5.1 | 8.3.1 | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **7.8.13** | 7.8.5 | 7.7.6 | 7.5.1 | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.91.2** | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.91.2** | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.91.2** | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **5.91.2** | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.91.2** | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.91.2** | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.91.2** | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.91.2** | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.91.2** | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.4.12** | 5.4.8 | 5.3.3 | 5.2.11 | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **5.0.11** | 5.0.10 | 5.0.4 | 5.0.2 | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **5.0.17** | 5.0.16 | 5.0.7 | 5.0.5 | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **6.1.13** | 6.1.12 | 6.1.3 | 6.1.0 | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **6.3.16** | 6.3.13 | 6.3.4 | 6.3.1 | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **task-management-plugin** | **7.2.15** | 7.2.14 | 7.2.6 | 7.2.2 | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **4.0.14** | 4.0.13 | 4.0.6 | 4.0.4 | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **6.0.15** | 6.0.14 | 6.0.6 | 6.0.4 | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.2.0 | 0.2.0 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | **4.0.14** | 4.0.12 | 4.0.5 | 4.0.3 | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.6.0** | 2.3.16 | 2.3.9 | 2.3.2 | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.14.0** | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **2.14.0** | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **2.2.11** | 2.2.9 | 2.2.2 | 2.1.0 | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | **4.0.14** | 4.0.7 | 4.0.7 | 4.0.5 | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **4.0.15** | 4.0.13 | 4.0.13 | 4.0.12 | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
## AI Agents
| Component | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ----------- | ------- | ------- | ------- | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.9.37** | 1.9.35 | 1.9.27 | 1.9.21 | 1.9.16 | 1.9.10 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.8.12** | 1.8.9 | 1.8.2 | 1.7.2 | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.10.26** | 1.10.24 | 1.10.17 | 1.10.13 | 1.10.6 | 1.10.3 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.4.3** | 1.4.1 | 1.2.35 | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.7.11** | 1.7.9 | 1.7.4 | 1.7.0 | 1.6.5 | 1.5.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Recommended Supported Version |
| ---------------- | -------------------- | ----------------------------- |
| 4.7.3 | Keycloak | 22.x, 26.x |
| 4.7.3 | Kafka | 3.2.x |
| 4.7.3 | PostgreSQL | 16.2.x |
| 4.7.3 | Oracle Database | 21c, 23ai |
| 4.7.3 | MongoDB | 7.0.x |
| 4.7.3 | Redis | 7.2.x |
| 4.7.3 | Elasticsearch | 7.17.x |
| 4.7.3 | Angular (Web SDK) | 19.x |
| 4.7.3 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
### Deprecation notice
Starting FlowX 5.0, the following versions of 3rd Party Dependencies will no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.9
* Redis versions older than 7.4
# Migrating from previous versions to v4.7.3
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.3-april-2025/migrating-from-v4.1.x-to-v4.7.3
If you're upgrading from a v4.7.0 version, make sure to first review the deployment guidelines for v4.7.x release documentation to capture all the significant changes and also the deployment guidelines:
If you're upgrading from a v4.6.x version, make sure to first review the migration guide for v4.6 release documentation to capture all the significant changes and also the deployment guidelines:
If you're moving from v4.1.x to v4.7.0, don’t forget to check the relevant migration guides for each version to ensure nothing is missed:
Do not also forget to check all the deployment guidelines in between releases to do not miss important configurations or changes:
# FlowX.AI 4.7.3 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.3-april-2025/v4.7.3-april-2025
FlowX.AI 4.7.3 enhances workflow conflict resolution, adds configurable enumeration ordering, and fixes data streams, UI templates, and application export/import issues to improve your development experience! 🚀
## **What's new? 🆕**
✅ Enhanced workflow conflict resolution with improved visibility\
✅ Added ability to configure order attributes on enumerations\
✅ Upgraded conflict management interface for better user experience
## Merge conflicts - workflow improvements
### Enhanced workflow conflict resolution
We've significantly improved how [**workflow**](../../4.7.x/docs/platform-deep-dive/integrations/integration-designer#workflows) conflicts are handled in this release:
* Upgraded to a new version (v2) of the workflow conflict resolution interface
* Now only showing workflow entities that have actual conflicts, making it easier to identify and address issues
* Streamlined the conflict resolution process for a more efficient workflow

**Important note about sequence conflicts:**
When resolving conflicts related to sequences, if you select one of the conflicting sequences, nodes that are no longer connected may remain "orphaned" on the canvas in the merged version. This design decision was made to prevent accidental node deletion. If these orphaned nodes are no longer needed, they can be manually removed in subsequent versions.
## Configurable enumeration ordering
You can now configure the **Order** attribute on enumerations, giving you greater control over how enumeration values are displayed in dropdown lists:
* Set specific order values for each enumeration entry
* Control the presentation sequence in UI components
* Improve user experience by arranging options in logical or prioritized order

**Limitation:** When changing the order value for an enumeration entry, the system does not automatically update the order values of other entries. You'll need to manually adjust the order values of other entries in the interface.
## **Bug fixes** 🐞
* Fixed an issue where workflow nodes could have two output sequences
* Resolved a problem with enumerations displaying in the wrong order in dropdown lists
* Fixed an authentication issue where users would receive 401 unauthorized errors when executing actions after token refresh
* Fixed a UI behavior issue where slider actions configured with "onChange" were incorrectly triggered when entering a screen instead of only when modified
* Fixed an issue with identical advancing IDs occurring in multi-pod deployments due to missing hostname command in GraalVM docker images
* Resolved an issue preventing media library migration from default application
* Fixed the "Go to reference" functionality from data model attributes that was not correctly redirecting to referenced elements
* Fixed an error during application export/import where "There already exists a tagged build for this project version" was preventing successful imports
* Restored support for multiple topics in Data Stream Topics feature, which was previously only listening to the first topic in the list
* Fixed a 500 error that occurred when attempting to create child actions on certain nodes
* Fixed a critical issue where UI templates would disappear when creating a new version of an application after performing undo operations on pasted templates
* Fixed a bug where updates to the subprocess in a Start subprocess action weren't being saved properly
* Fixed an issue with the "Send email" button remaining disabled in the Test notification template feature after correcting validation errors
* Fixed an error that occurred when trying to export document templates containing null values in templateMap
* Fixed a display issue where Tokens, Workflows, and Subprocesses information wasn't showing in process instances after migration from 4.7.1 to 4.7.2
* Fixed a UI issue where business rule code wasn't displayed when testing business rules in committed versions
***
## **Additional information**
📌 [Deployment Guidelines v4.7.3](./deployment-guidelines-v4.7.3)\
📌 [Migration Guide (from v4.1.x)](./migrating-from-v4.1.x-to-v4.7.3)
# Deployment guidelines v4.7.4
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.4-may-2025/deployment-guidelines-v4.7.4
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

After upgrading to the 4.7.4 FlowX.AI release, you cannot import old process definitions or resources from versions older than 4.7.4.
## Component versions
| Component | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **8.15.2** | 8.13.0 | 8.9.0 | 8.5.1 | 8.3.1 | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **7.9.2** | 7.8.13 | 7.8.5 | 7.7.6 | 7.5.1 | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.93.1** | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.93.1** | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.93.1** | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **5.93.1** | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.93.1** | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.93.1** | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.93.1** | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.93.1** | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.93.1** | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.4.16** | 5.4.12 | 5.4.8 | 5.3.3 | 5.2.11 | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **5.0.13** | 5.0.11 | 5.0.10 | 5.0.4 | 5.0.2 | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **5.0.19** | 5.0.17 | 5.0.16 | 5.0.7 | 5.0.5 | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **6.1.15** | 6.1.13 | 6.1.12 | 6.1.3 | 6.1.0 | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **6.3.18** | 6.3.16 | 6.3.13 | 6.3.4 | 6.3.1 | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **task-management-plugin** | **7.2.17** | 7.2.15 | 7.2.14 | 7.2.6 | 7.2.2 | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **4.0.16** | 4.0.14 | 4.0.13 | 4.0.6 | 4.0.4 | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **6.0.17** | 6.0.15 | 6.0.14 | 6.0.6 | 6.0.4 | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.2.0 | 0.2.0 | 0.2.0 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | **4.0.16** | 4.0.14 | 4.0.12 | 4.0.5 | 4.0.3 | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.7.2** | 2.6.0 | 2.3.16 | 2.3.9 | 2.3.2 | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.15.6** | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **2.15.6** | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **2.3.2** | 2.2.11 | 2.2.9 | 2.2.2 | 2.1.0 | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | **4.0.19** | 4.0.14 | 4.0.7 | 4.0.7 | 4.0.5 | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **4.0.23** | 4.0.15 | 4.0.13 | 4.0.13 | 4.0.12 | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
## AI Agents
| Component | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ----------- | ------- | ------- | ------- | ------- | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.9.39** | 1.9.37 | 1.9.35 | 1.9.27 | 1.9.21 | 1.9.16 | 1.9.10 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.8.17** | 1.8.12 | 1.8.9 | 1.8.2 | 1.7.2 | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.10.28** | 1.10.26 | 1.10.24 | 1.10.17 | 1.10.13 | 1.10.6 | 1.10.3 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.4.5** | 1.4.3 | 1.4.1 | 1.2.35 | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.7.13** | 1.7.11 | 1.7.9 | 1.7.4 | 1.7.0 | 1.6.5 | 1.5.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Recommended Supported Version |
| ---------------- | -------------------- | ----------------------------- |
| 4.7.4 | Keycloak | 22.x, 26.x |
| 4.7.4 | Kafka | 3.2.x |
| 4.7.4 | PostgreSQL | 16.2.x |
| 4.7.4 | Oracle Database | 21c, 23ai |
| 4.7.4 | MongoDB | 7.0.x |
| 4.7.4 | Redis | 7.2.x |
| 4.7.4 | Elasticsearch | 7.17.x |
| 4.7.4 | Angular (Web SDK) | 19.x |
| 4.7.4 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
### Deprecation notice
Starting FlowX 5.0, the following versions of 3rd Party Dependencies will no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.9
* Redis versions older than 7.4
## **Additional information**
* Added new environment variable `OPTIMISTIC_LOCKING_RETRIES` to control the number of times the engine will retry indexing when it encounters concurrent-update errors specifically on key identifiers during their update after an action.
Elasticsearch indexing configuration:
# Migrating from previous versions to v4.7.4
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.4-may-2025/migrating-from-v4.1.x-to-v4.7.4
If you're upgrading from a v4.7.0 version, make sure to first review the deployment guidelines for v4.7.x release documentation to capture all the significant changes and also the deployment guidelines:
If you're upgrading from a v4.6.x version, make sure to first review the migration guide for v4.6 release documentation to capture all the significant changes and also the deployment guidelines:
If you're moving from v4.1.x to v4.7.0, don’t forget to check the relevant migration guides for each version to ensure nothing is missed:
Do not also forget to check all the deployment guidelines in between releases to do not miss important configurations or changes:
# FlowX.AI 4.7.4 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.4-may-2025/v4.7.4-may-2025
FlowX.AI 4.7.4 enhances system stability with Spring Boot updates and resolves critical issues across build exports, reporting, SDK functionality, and cross-platform consistency to deliver a more reliable development experience! 🚀
## **What's new? 🆕**
✅ Platform enhancements\
✅ Added retry mechanism for ES indexing to handle key‑identifier errors\
✅ Fixed critical build export timeout issues\
✅ Improved reporting data representation\
✅ Enhanced cross-platform consistency
### Platform Enhancements ⚙️
* Enhanced system stability
* Latest security patches
* Improved performance
### Elasticsearch indexing - configurable retry mechanism
* `OPTIMISTIC_LOCKING_RETRIES`: Number of times the engine will retry indexing when it encounters concurrent-update errors specifically on key identifiers during their update after an action.
### Data-sync run status monitoring
* Added the ability to view the run status of data-sync jobs directly in the platform interface
* Monitor the execution status of all data-sync jobs from the Jobs dashboard
* Quickly identify failed jobs for faster troubleshooting

## **Bug fixes** 🐞
* **Build export timeouts**: Resolved intermittent timeout failures on projects with dependency libraries; exports now consistently complete or retry correctly.
* **Build creation on merge without conflicts**: Fixed an issue where merging one branch into another without conflicts—and switching the active policy—did not trigger a new build, forcing users to manually create a version; now, merges automatically update build resources and create the new version so merged changes appear at runtime.
* **Project version import stashing conflict**: Resolved an error where importing a branched project version across environments would inadvertently stash other versions—restoring successful import, fixing the GET history API response, and ensuring the Project versions history modal renders correctly.
* **CosmosDB workflows**: Fixed an issue preventing the workflow instances list from loading in the Integration Designer when using CosmosDB.
* **Reporting arrays**: Corrected array formatting in the `reporting_data` table (process-engine schema).
* **CMS permissions**: Restored backward compatibility for FlowX SDK v4.7+ by removing the unintended `media_library_read` requirement for processes containing images (behavior now matches v4.1).
* **onChange action behavior**: Standardized onChange/onBlur across web, Android, and iOS so users cannot continue typing after token advancement unless explicitly allowed.
* **React SDK ternary expressions**: Fixed an “Invalid Expression” error in SDK v5.86.1—ternary expressions in computed values (e.g. `return ${var1} ? "Onboarded" : (${var2} ? "Non-eligible" : "Ready for Onboarding");`) now parse correctly as they did in v5.62.1.
* **Elasticsearch indexing**: Fixed an issue where the engine was not retrying to index process instances when it encountered concurrent-update errors on key identifiers.
* **iOS SSE token refresh**: Fixed an issue in iOS SDK where Server-Sent Events connections would occasionally use expired JWT tokens instead of refreshed ones, causing 401 errors and process hangs in production environments.
***
## **Additional information**
📌 [Deployment Guidelines v4.7.4](./deployment-guidelines-v4.7.4)\
📌 [Migration Guide (from v4.1.x)](./migrating-from-v4.1.x-to-v4.7.4)
# Deployment guidelines v4.7.5
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.5-june-2025/deployment-guidelines-v4.7.5
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

After upgrading to the 4.7.5 FlowX.AI release, you cannot import old process definitions or resources from versions older than 4.7.5.
## Component versions
| Component | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ----- |
| **process-engine** | **8.17.0** | 8.15.2 | 8.13.0 | 8.9.0 | 8.5.1 | 8.3.1 | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **7.12.2** | 7.9.2 | 7.8.13 | 7.8.5 | 7.7.6 | 7.5.1 | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.95.1** | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.95.1** | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.95.1** | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **5.95.1** | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.95.1** | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.95.1** | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.95.1** | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.95.1** | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.95.1** | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.5.1** | 5.4.16 | 5.4.12 | 5.4.8 | 5.3.3 | 5.2.11 | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **5.1.1** | 5.0.13 | 5.0.11 | 5.0.10 | 5.0.4 | 5.0.2 | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **5.1.1** | 5.0.19 | 5.0.17 | 5.0.16 | 5.0.7 | 5.0.5 | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **6.2.1** | 6.1.15 | 6.1.13 | 6.1.12 | 6.1.3 | 6.1.0 | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **6.4.1** | 6.3.18 | 6.3.16 | 6.3.13 | 6.3.4 | 6.3.1 | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **task-management-plugin** | **7.3.1** | 7.2.17 | 7.2.15 | 7.2.14 | 7.2.6 | 7.2.2 | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **4.1.1** | 4.0.16 | 4.0.14 | 4.0.13 | 4.0.6 | 4.0.4 | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **6.1.1** | 6.0.17 | 6.0.15 | 6.0.14 | 6.0.6 | 6.0.4 | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **advancing-controller** | **4.1.1** | 4.0.16 | 4.0.14 | 4.0.12 | 4.0.5 | 4.0.3 | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.9.0** | 2.7.2 | 2.6.0 | 2.3.16 | 2.3.9 | 2.3.2 | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.17.2** | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **2.17.2** | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **2.4.1** | 2.3.2 | 2.2.11 | 2.2.9 | 2.2.2 | 2.1.0 | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | **4.0.21** | 4.0.19 | 4.0.14 | 4.0.7 | 4.0.7 | 4.0.5 | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **4.0.24** | 4.0.23 | 4.0.15 | 4.0.13 | 4.0.13 | 4.0.12 | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Plugins
| Component | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| -------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ----- | ------ | ------ | ------ | ------ |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **reporting-plugin** | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
## AI Agents
| Component | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ---------- | ------- | ------- | ------- | ------- | ------- | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | 1.9.39 | 1.9.39 | 1.9.37 | 1.9.35 | 1.9.27 | 1.9.21 | 1.9.16 | 1.9.10 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.8.18** | 1.8.17 | 1.8.12 | 1.8.9 | 1.8.2 | 1.7.2 | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | 1.10.28 | 1.10.28 | 1.10.26 | 1.10.24 | 1.10.17 | 1.10.13 | 1.10.6 | 1.10.3 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | 1.4.5 | 1.4.5 | 1.4.3 | 1.4.1 | 1.2.35 | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | 1.7.13 | 1.7.13 | 1.7.11 | 1.7.9 | 1.7.4 | 1.7.0 | 1.6.5 | 1.5.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Supported Versions |
| ---------------- | -------------------- | ------------------ |
| 4.7.5 | Keycloak | 22, 26+ |
| 4.7.5 | Kafka | 3.2 - 3.9 |
| 4.7.5 | PostgreSQL | 16 - 17 |
| 4.7.5 | Oracle Database | 21c, 23ai |
| 4.7.5 | MongoDB | 7 - 8 |
| 4.7.5 | Redis | 7.2 - 8.0 |
| 4.7.5 | Elasticsearch | 7 - 9 |
| 4.7.5 | Angular (Web SDK) | 19.x |
| 4.7.5 | React (Web SDK) | 18.x |
**New in 4.7.5: Support for more 3rd Party Dependencies**
FlowX.AI 4.7.5 introduces support for more versions of third-party dependencies:
* All versions are officially supported throughout the entire LTS lifetime
* Upgrades can be performed during the LTS lifetime to prepare for the minimum requirements of the next FlowX.AI major release
FlowX.AI supports all versions within the specified ranges of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest stable versions within each supported range.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Starting FlowX 5.0, the following versions of 3rd Party Dependencies will no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.9
* Redis versions older than 7.4
# Migrating from previous versions to v4.7.5
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.5-june-2025/migrating-from-v4.1.x-to-v4.7.5
If you're upgrading from a \< v4.7.5 version, make sure to first review the deployment guidelines for v4.7.x release documentation to capture all the significant changes and also the deployment guidelines:
If you're upgrading from a v4.6.x version, make sure to first review the migration guide for v4.6 release documentation to capture all the significant changes and also the deployment guidelines:
If you're moving from v4.1.x to v4.7.0, don’t forget to check the relevant migration guides for each version to ensure nothing is missed:
Do not also forget to check all the deployment guidelines in between releases to do not miss important configurations or changes:
# FlowX.AI 4.7.5 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.5-june-2025/v4.7.5-june-2025
FlowX.AI 4.7.5 enhances system stability with introducing support for more 3rd party dependency and introduces High Availability improvements with Redis Sentinel mode support to deliver a more reliable and scalable development experience! 🚀
## **What's new? 🆕**
✅ **Platform enhancements**\
✅ **Analytics enhancements**
### Platform enhancements ⚙️
**Extended Third-Party Dependency Support** - Introducing support for more versions of third-party dependencies:
* All versions are officially supported throughout the entire LTS lifetime
* Upgrades can be performed during the LTS lifetime to prepare for the minimum requirements of the next FlowX.AI major releases for critical infrastructure components, ensuring all supported versions are officially maintained throughout the entire LTS lifetime. This enables organizations to perform gradual dependency upgrades during the LTS period, preparing infrastructure to meet the minimum requirements for the next FlowX.AI major release while maintaining full platform support and stability.
### Analytics enhancements ⚙️
* Improved analytics events with enriched metadata for action events across all platforms (Web, iOS, Android). Action events now include screen context, component type identification, and component labels, providing deeper insights into user interactions and enabling more granular analytics tracking for better user experience optimization.
More details:
### Runtime Manager deployment changes
**Prior to 4.7.5:** Runtime Manager was deployed using `application-manager` chart/image with manual `SPRING_APPLICATION_NAME`: "runtime-manager" configuration.
Starting with 4.7.5: Runtime Manager has its own dedicated chart and image with proper defaults.
Migration Required
* Switch to new chart: Use runtime-manager chart instead of application-manager
* Verify image: Ensure image name is runtime-manager (default in new chart)
* Remove override: `SPRING_APPLICATION_NAME`: "runtime-manager" can be removed (optional)
You may need to delete the existing runtime-manager deployment before upgrading due to Kubernetes label changes that cause `kubectl apply` to fail.
## **Bug fixes** 🐞
* **Fixed Task Manager loading issue with data type changes** - Resolved critical issue where Task Manager would fail to load and throw `NullPointerException` when process variables were changed from date to string data types, even after updating the data model and clearing cache
* **Fixed All Tasks view missing on build import** - Resolved issue where importing builds from one environment to another would fail to create the All Tasks view, when accessing the Task Manager area
* **Fixed unassign operation causing runtime errors** - Resolved 500 Internal Server Error when accessing process data after performing unassign operations via Kafka messages, where null ownerDetails would cause `NullPointerException` during JSON serialization
* **Fixed CMS-Core export failures with AWS S3 buckets** - Resolved issue where CMS-Core would add double slashes in S3 object paths when creating exports, causing 404 NoSuchKey errors with AWS S3 (while working correctly with MinIO). Fixed path construction to ensure compatibility with both AWS S3 and MinIO storage backends
* **Fixed active policy version resolution** - Resolved issue where importing application versions to environments with existing WIP versions would incorrectly activate the stashed WIP version instead of the imported committed version, causing graph display failures and incorrect active policy settings
***
## **Additional information**
📌 [Deployment Guidelines v4.7.5](./deployment-guidelines-v4.7.5)\
📌 [Migration Guide (from v4.1.x)](./migrating-from-v4.1.x-to-v4.7.5)
# Deployment guidelines v4.7.6
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.6-july-2025/deployment-guidelines-v4.7.6
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

**Important Upgrade Notice**
Upgrading to FlowX.AI 4.7.6 will permanently prevent you from importing process definitions and resources created in versions 4.7.5 and earlier. Ensure all necessary data is backed up and compatible before upgrading.
## Component versions
| Component | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **8.21.1** | 8.17.0 | 8.15.2 | 8.13.0 | 8.9.0 | 8.5.1 | 8.3.1 | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **7.15.2** | 7.12.2 | 7.9.2 | 7.8.13 | 7.8.5 | 7.7.6 | 7.5.1 | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.96.1** | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/angular-sdk** | **5.96.1** | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.96.1** | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **5.96.1** | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.96.1** | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.96.1** | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.96.1** | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.96.1** | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.96.1** | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.8.2** | 5.5.1 | 5.4.16 | 5.4.12 | 5.4.8 | 5.3.3 | 5.2.11 | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **5.4.0** | 5.1.1 | 5.0.13 | 5.0.11 | 5.0.10 | 5.0.4 | 5.0.2 | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **5.4.0** | 5.1.1 | 5.0.19 | 5.0.17 | 5.0.16 | 5.0.7 | 5.0.5 | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **6.5.0** | 6.2.1 | 6.1.15 | 6.1.13 | 6.1.12 | 6.1.3 | 6.1.0 | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **6.7.0** | 6.4.1 | 6.3.18 | 6.3.16 | 6.3.13 | 6.3.4 | 6.3.1 | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **task-management-plugin** | **7.6.0** | 7.3.1 | 7.2.17 | 7.2.15 | 7.2.14 | 7.2.6 | 7.2.2 | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **4.4.0** | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.13 | 4.0.6 | 4.0.4 | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **6.5.0** | 6.1.1 | 6.0.17 | 6.0.15 | 6.0.14 | 6.0.6 | 6.0.4 | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | **4.4.0** | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.12 | 4.0.5 | 4.0.3 | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.13.0** | 2.9.0 | 2.7.2 | 2.6.0 | 2.3.16 | 2.3.9 | 2.3.2 | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.20.2** | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **2.20.2** | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **2.7.1** | 2.4.1 | 2.3.2 | 2.2.11 | 2.2.9 | 2.2.2 | 2.1.0 | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | **4.0.29** | 4.0.21 | 4.0.19 | 4.0.14 | 4.0.7 | 4.0.7 | 4.0.5 | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 4.0.24 | 4.0.24 | 4.0.23 | 4.0.15 | 4.0.13 | 4.0.13 | 4.0.12 | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
## AI Agents
| Component | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ---------- | ------- | ------- | ------- | ------- | ------- | ------- | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | 1.9.39 | 1.9.39 | 1.9.39 | 1.9.37 | 1.9.35 | 1.9.27 | 1.9.21 | 1.9.16 | 1.9.10 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.8.19** | 1.8.18 | 1.8.17 | 1.8.12 | 1.8.9 | 1.8.2 | 1.7.2 | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | 1.10.28 | 1.10.28 | 1.10.28 | 1.10.26 | 1.10.24 | 1.10.17 | 1.10.13 | 1.10.6 | 1.10.3 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | 1.4.5 | 1.4.5 | 1.4.5 | 1.4.3 | 1.4.1 | 1.2.35 | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | 1.7.13 | 1.7.13 | 1.7.13 | 1.7.11 | 1.7.9 | 1.7.4 | 1.7.0 | 1.6.5 | 1.5.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Supported Versions |
| ---------------- | -------------------- | ------------------ |
| 4.7.6 | Keycloak | 22, 26+ |
| 4.7.6 | Kafka | 3.2 - 3.9 |
| 4.7.6 | PostgreSQL | 16 - 17 |
| 4.7.6 | OracleDB | 21c, 23ai |
| 4.7.6 | MongoDB | 7 - 8 |
| 4.7.6 | Redis | 7.2 - 8.0 |
| 4.7.6 | Elasticsearch | 7 - 9 |
| 4.7.6 | Angular (Web SDK) | 19.x |
| 4.7.6 | React (Web SDK) | 18.x |
FlowX.AI supports all versions within the specified ranges of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest stable versions within each supported range.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Starting FlowX 5.0, the following versions of 3rd Party Dependencies will no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.9
* Redis versions older than 7.4
* Elasticsearch older than 8
### Configuration Parameters
Starting with FlowX.AI 4.7.6, Configuration Parameters can use values from Environment Variables, Kubernetes Config Maps, and Kubernetes Secrets, as configured in the deployment.
# Migrating from previous versions to v4.7.6
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.6-july-2025/migrating-from-v4.1.x-to-v4.7.6
If you're upgrading from a \< v4.7.6 version, make sure to first review the deployment guidelines for v4.7.x release documentation to capture all the significant changes and also the deployment guidelines:
If you're upgrading from a v4.6.x version, make sure to first review the migration guide for v4.6 release documentation to capture all the significant changes and also the deployment guidelines:
If you're moving from v4.1.x to v4.7.0, don’t forget to check the relevant migration guides for each version to ensure nothing is missed:
Do not also forget to check all the deployment guidelines in between releases to do not miss important configurations or changes:
# FlowX.AI 4.7.6 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.6-july-2025/v4.7.6-july-2025
This release includes significant improvements to logging configuration and resolves some issues across the Designer, Process Engine, and Integration Designer components.
## **What's new? 🆕**
Changed logging verbosity to reduce clutter & log sizes, increasing visibility for more relevant log messages.
Now Configuration Parameters can use values from Environment Variables, Kubernetes Config Maps, and Kubernetes Secrets, as configured in the deployment. Check the [**Deployment Guidelines**](./deployment-guidelines-v4.7.6#configuration-parameters) for more details.
Improved runtime performance by better distributing the execution of nodes across all components.
Improved the speed of listing process instances by 4-6x on environments with a lot of process executions.
This feature allows you to dynamically adjust logging levels without requiring a service restart, providing more flexibility in managing log output.
The previously used `CONFIG_PROFILE` environment variable is no longer required as the default configs have been aligned with the recommended profiles.
## **Bug fixes** 🐞
Fixed task view list row content display issue where table rows were overlapping and text was not vertically centered in the latest Chrome browser version (138). The task view now properly displays centered content without text cutoff.
Fixed JSON parsing error when sending JSON result to REST body. Resolved issue where JSON objects generated in script tasks were causing "Unexpected character" errors when used in REST endpoint body parameters with \${variable} syntax.
Fixed media file export errors during branch merges. Resolved issue where merging multiple branches created from the same main version would fail with "400 Bad Request" errors for media files after the first successful merge, even when no merge conflicts were present.
Fixed rollback issue during version submission errors. Resolved problem where processes were incorrectly marked as deleted in the database when submit version operations failed with 500 errors, preventing proper rollback and causing subsequent 404 "Process not found" errors.
Fixed missing resources during copy to another project/library operation. Resolved issue where forms with validation in UserTask nodes were not being copied when copying processes between projects or libraries.
Fixed issue where specific branches derived from main version would experience resource corruption, including missing process definitions (404 errors), missing Integration Designer resources, and commit failures.
Fixed parallel multi-instance designer visual bug and database errors. Resolved issue where call activity nodes with parallel multi-instance enabled created duplicate "inputKey" and "outputKey" entries, causing visual bugs (missing collection key fields) and database update errors during node modifications.
Fixed Kafka message distribution across partitions. Resolved issue where Kafka messages were distributed as batches across partitions, causing increased usage of a limited number of partitions, instead of following the round-robin distribution per message strategy.
***
## **Additional information**
Step-by-step deployment instructions and configuration details for this release.
Complete guide for migrating from version 4.1.x to 4.7.6 with breaking changes and migration steps.
# Deployment guidelines v4.7.7
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.7-august-2025/deployment-guidelines-v4.7.7
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

**Important Upgrade Notice**
Upgrading to FlowX.AI 4.7.7 will permanently prevent you from importing process definitions and resources created in versions 4.7.6 and earlier. Ensure all necessary data is backed up and compatible before upgrading.
## Component versions
| Component | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| -------------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ----- |
| **process-engine** | **8.22.3** | 8.21.1 | 8.17.0 | 8.15.2 | 8.13.0 | 8.9.0 | 8.5.1 | 8.3.1 | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **7.16.3** | 7.15.2 | 7.12.2 | 7.9.2 | 7.8.13 | 7.8.5 | 7.7.6 | 7.5.1 | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.97.1** | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.9.2** | 5.8.2 | 5.5.1 | 5.4.16 | 5.4.12 | 5.4.8 | 5.3.3 | 5.2.11 | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **5.5.2** | 5.4.0 | 5.1.1 | 5.0.13 | 5.0.11 | 5.0.10 | 5.0.4 | 5.0.2 | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **5.5.2** | 5.4.0 | 5.1.1 | 5.0.19 | 5.0.17 | 5.0.16 | 5.0.7 | 5.0.5 | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **6.6.2** | 6.5.0 | 6.2.1 | 6.1.15 | 6.1.13 | 6.1.12 | 6.1.3 | 6.1.0 | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **6.8.2** | 6.7.0 | 6.4.1 | 6.3.18 | 6.3.16 | 6.3.13 | 6.3.4 | 6.3.1 | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **task-management-plugin** | **7.7.2** | 7.6.0 | 7.3.1 | 7.2.17 | 7.2.15 | 7.2.14 | 7.2.6 | 7.2.2 | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **4.5.2** | 4.4.0 | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.13 | 4.0.6 | 4.0.4 | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **6.6.2** | 6.5.0 | 6.1.1 | 6.0.17 | 6.0.15 | 6.0.14 | 6.0.6 | 6.0.4 | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **advancing-controller** | **4.5.2** | 4.4.0 | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.12 | 4.0.5 | 4.0.3 | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.14.2** | 2.13.0 | 2.9.0 | 2.7.2 | 2.6.0 | 2.3.16 | 2.3.9 | 2.3.2 | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.21.2** | 2.20.2 | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **2.21.2** | 2.20.2 | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **2.8.1** | 2.7.1 | 2.4.1 | 2.3.2 | 2.2.11 | 2.2.9 | 2.2.2 | 2.1.0 | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Renderers
| Component | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | --------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ----- |
| **@flowx/angular-sdk** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **iOS renderer** | 4.0.29 | 4.0.29 | 4.0.21 | 4.0.19 | 4.0.14 | 4.0.7 | 4.0.7 | 4.0.5 | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 4.0.29 | 4.0.24 | 4.0.24 | 4.0.23 | 4.0.15 | 4.0.13 | 4.0.13 | 4.0.12 | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Plugins
| Component | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| -------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ----- | ------ | ------ | ------ | ------ |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **reporting-plugin** | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
## AI Agents
| Component | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ----------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.9.40** | 1.9.39 | 1.9.39 | 1.9.39 | 1.9.37 | 1.9.35 | 1.9.27 | 1.9.21 | 1.9.16 | 1.9.10 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.8.21** | 1.8.19 | 1.8.18 | 1.8.17 | 1.8.12 | 1.8.9 | 1.8.2 | 1.7.2 | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.10.29** | 1.10.28 | 1.10.28 | 1.10.28 | 1.10.26 | 1.10.24 | 1.10.17 | 1.10.13 | 1.10.6 | 1.10.3 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.4.6** | 1.4.5 | 1.4.5 | 1.4.5 | 1.4.3 | 1.4.1 | 1.2.35 | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.7.14** | 1.7.13 | 1.7.13 | 1.7.13 | 1.7.11 | 1.7.9 | 1.7.4 | 1.7.0 | 1.6.5 | 1.5.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.4.6** | 1.4.5 | 1.4.5 | 1.4.5 | 1.4.3 | 1.4.1 | 1.2.35 | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Supported Versions |
| ---------------- | -------------------- | ------------------ |
| 4.7.7 | Keycloak | 22, 26+ |
| 4.7.7 | Kafka | 3.2 - 3.9 |
| 4.7.7 | PostgreSQL | 16 - 17 |
| 4.7.7 | OracleDB | 19c, 21c, 23ai |
| 4.7.7 | MongoDB | 7 - 8 |
| 4.7.7 | Redis | 7.2 - 8.0 |
| 4.7.7 | Elasticsearch | 7 - 9 |
| 4.7.7 | Angular (Web SDK) | 19.x |
| 4.7.7 | React (Web SDK) | 18.x |
FlowX.AI supports all versions within the specified ranges of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest stable versions within each supported range.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Starting FlowX 5.0, the following versions of 3rd Party Dependencies will no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.9
* Redis versions older than 7.4
* Elasticsearch older than 8
# FlowX.AI 4.7.7 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.7-august-2025/v4.7.7-august-2025
Latest features, improvements, and bug fixes in our newest release
## What's new?
✅ Improved robustness on auto-scaling process-engine and on Kafka node failures\
✅ Improvements on how configuration parameters can now be retrieved from Kubernetes secrets and ConfigMaps\
✅ Vulnerability fixes
## Configuration parameters
Improved configuration parameters retrieval from Kubernetes secrets and ConfigMaps. More details here:
## Bug fixes
Fixed JSON payload size limit issue causing "403 payload too large" errors when starting processes. More details [**here**](../../4.7.x/docs/flowx-designer/managing-a-project-flow/starting-a-process#starting-a-process-via-user-interface).
If one Kafka node fails, platform health check fails. This is now fixed.
Fixed theming issue where Card component styling was not properly applied when switched to accordion mode.
Fixed loader persistence issue where loaders initiated by "show loader" actions in subprocess UserTasks would continue displaying after subprocess completion.
Fixed merge conflict error occurring when copying and pasting embed nodes in processes.
Fixed process execution recovery issue where REST API-triggered service tasks would hang indefinitely if the handling engine replica failed mid-execution.
Fixed merge conflict error occurring when creating child branches from working commits to bypass broken WIP versions.
# Deployment guidelines v4.7.8
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.8-september-2025/deployment-guidelines-v4.7.8
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

**Important Upgrade Notice**
Upgrading to FlowX.AI 4.7.8 will permanently prevent you from importing process definitions and resources created in versions 4.7.7 and earlier. Ensure all necessary data is backed up and compatible before upgrading.
## Component versions
| Component | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| -------------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ----- |
| **process-engine** | **8.23.2** | 8.22.3 | 8.21.1 | 8.17.0 | 8.15.2 | 8.13.0 | 8.9.0 | 8.5.1 | 8.3.1 | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **7.17.3** | 7.16.3 | 7.15.2 | 7.12.2 | 7.9.2 | 7.8.13 | 7.8.5 | 7.7.6 | 7.5.1 | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.98.0** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.10.3** | 5.9.2 | 5.8.2 | 5.5.1 | 5.4.16 | 5.4.12 | 5.4.8 | 5.3.3 | 5.2.11 | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **5.6.2** | 5.5.2 | 5.4.0 | 5.1.1 | 5.0.13 | 5.0.11 | 5.0.10 | 5.0.4 | 5.0.2 | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **5.6.2** | 5.5.2 | 5.4.0 | 5.1.1 | 5.0.19 | 5.0.17 | 5.0.16 | 5.0.7 | 5.0.5 | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **6.7.2** | 6.6.2 | 6.5.0 | 6.2.1 | 6.1.15 | 6.1.13 | 6.1.12 | 6.1.3 | 6.1.0 | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **6.9.2** | 6.8.2 | 6.7.0 | 6.4.1 | 6.3.18 | 6.3.16 | 6.3.13 | 6.3.4 | 6.3.1 | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **task-management-plugin** | **7.8.2** | 7.7.2 | 7.6.0 | 7.3.1 | 7.2.17 | 7.2.15 | 7.2.14 | 7.2.6 | 7.2.2 | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **4.6.2** | 4.5.2 | 4.4.0 | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.13 | 4.0.6 | 4.0.4 | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **6.7.2** | 6.6.2 | 6.5.0 | 6.1.1 | 6.0.17 | 6.0.15 | 6.0.14 | 6.0.6 | 6.0.4 | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **advancing-controller** | **4.6.2** | 4.5.2 | 4.4.0 | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.12 | 4.0.5 | 4.0.3 | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.15.3** | 2.14.2 | 2.13.0 | 2.9.0 | 2.7.2 | 2.6.0 | 2.3.16 | 2.3.9 | 2.3.2 | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.22.3** | 2.21.2 | 2.20.2 | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **2.22.3** | 2.21.2 | 2.20.2 | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **2.9.2** | 2.8.1 | 2.7.1 | 2.4.1 | 2.3.2 | 2.2.11 | 2.2.9 | 2.2.2 | 2.1.0 | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Renderers
| Component | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | --------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ----- |
| **@flowx/angular-sdk** | **5.98.0** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.98.0** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **5.98.0** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.98.0** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.98.0** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.98.0** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.98.0** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.98.0** | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **iOS renderer** | 4.0.29 | 4.0.29 | 4.0.29 | 4.0.21 | 4.0.19 | 4.0.14 | 4.0.7 | 4.0.7 | 4.0.5 | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 4.0.29 | 4.0.29 | 4.0.24 | 4.0.24 | 4.0.23 | 4.0.15 | 4.0.13 | 4.0.13 | 4.0.12 | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Plugins
| Component | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| -------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ----- | ------ | ------ | ------ | ------ |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **reporting-plugin** | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
## AI Agents
| Component | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ---------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | 1.9.40 | 1.9.40 | 1.9.39 | 1.9.39 | 1.9.39 | 1.9.37 | 1.9.35 | 1.9.27 | 1.9.21 | 1.9.16 | 1.9.10 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.8.22** | 1.8.21 | 1.8.19 | 1.8.18 | 1.8.17 | 1.8.12 | 1.8.9 | 1.8.2 | 1.7.2 | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | 1.10.29 | 1.10.29 | 1.10.28 | 1.10.28 | 1.10.28 | 1.10.26 | 1.10.24 | 1.10.17 | 1.10.13 | 1.10.6 | 1.10.3 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | 1.4.6 | 1.4.6 | 1.4.5 | 1.4.5 | 1.4.5 | 1.4.3 | 1.4.1 | 1.2.35 | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | 1.7.14 | 1.7.14 | 1.7.13 | 1.7.13 | 1.7.13 | 1.7.11 | 1.7.9 | 1.7.4 | 1.7.0 | 1.6.5 | 1.5.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Supported Versions |
| ---------------- | -------------------- | ------------------ |
| 4.7.8 | Keycloak | 22, 26+ |
| 4.7.8 | Kafka | 3.2 - 3.9 |
| 4.7.8 | PostgreSQL | 16 - 17 |
| 4.7.8 | OracleDB | 19c, 21c, 23ai |
| 4.7.8 | MongoDB | 7 - 8 |
| 4.7.8 | Redis | 7.2 - 8.0 |
| 4.7.8 | Elasticsearch | 7 - 9 |
| 4.7.8 | Angular (Web SDK) | 19.x |
| 4.7.8 | React (Web SDK) | 18.x |
FlowX.AI supports all versions within the specified ranges of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest stable versions within each supported range.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Starting FlowX 5.0, the following versions of 3rd Party Dependencies will no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.9
* Redis versions older than 7.4
* Elasticsearch older than 8
# FlowX.AI 4.7.8 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.8-september-2025/v4.7.8-september-2025
Latest features, improvements, and bug fixes in our newest release
## What's new?
✅ Vulnerability fixes\
✅ Support for [**Substitution Tags**](../../../../5.1/docs/platform-deep-dive/core-extensions/content-management/substitution-tags) in [**Table**](../../../../4.7.x/docs/building-blocks/ui-designer/ui-component-types/table) column title
### Support for Substitution Tags in Table column title
Now you can use [**Substitution Tags**](../../../../5.1/docs/platform-deep-dive/core-extensions/content-management/substitution-tags) in [**Table**](../../../../4.7.x/docs/building-blocks/ui-designer/ui-component-types/table) column title.
## Bug fixes
Resolved an issue where, in certain situations, the expanded state of cards was not calculated correctly. This prevented users from expanding cards as expected.
Fixed localization issue where document preview component texts remained in English regardless of the selected language setting.
Fixed compatibility issue with Keycloak 26.3 where the Groups tab would remain in loading state indefinitely due to new "description" field in group representations.
Fixed import failure when PDF media files were exported with null `thumbnailStoragePath` values, preventing successful deployment of build or app versions to fresh environments.
Enhanced error logging detail when Runtime Manager proxy requests fail, providing better root cause information for debugging infrastructure issues like DNS problems or service unavailability.
Fixed performance issue where workflow IF node processing time increased from 3-5 seconds to 15-20 seconds on the first execution after Integration Designer pod restart.
Fixed issue where the active step was incorrectly computed when the token is reset.
# Deployment guidelines v4.7.9
Source: https://docs.flowx.ai/release-notes/v4.x/v4.7.x-lts/v4.7.9-october-2025/deployment-guidelines-v4.7.9
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

## Component versions
| Component | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| -------------------------- | ----------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ------ | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ----- |
| **process-engine** | **8.24.1** | 8.23.3 | 8.23.2 | 8.22.3 | 8.21.1 | 8.17.0 | 8.15.2 | 8.13.0 | 8.9.0 | 8.5.1 | 8.3.1 | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **7.18.4** | 7.17.3 | 7.16.3 | 7.15.2 | 7.12.2 | 7.9.2 | 7.8.13 | 7.8.5 | 7.7.6 | 7.5.1 | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.101.1** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **5.11.1** | 5.10.3 | 5.9.2 | 5.8.2 | 5.5.1 | 5.4.16 | 5.4.12 | 5.4.8 | 5.3.3 | 5.2.11 | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **5.7.1** | 5.6.2 | 5.5.2 | 5.4.0 | 5.1.1 | 5.0.13 | 5.0.11 | 5.0.10 | 5.0.4 | 5.0.2 | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **5.7.1** | 5.6.2 | 5.5.2 | 5.4.0 | 5.1.1 | 5.0.19 | 5.0.17 | 5.0.16 | 5.0.7 | 5.0.5 | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **6.8.1** | 6.7.2 | 6.6.2 | 6.5.0 | 6.2.1 | 6.1.15 | 6.1.13 | 6.1.12 | 6.1.3 | 6.1.0 | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **6.10.1** | 6.9.2 | 6.8.2 | 6.7.0 | 6.4.1 | 6.3.18 | 6.3.16 | 6.3.13 | 6.3.4 | 6.3.1 | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **task-management-plugin** | **7.9.2** | 7.8.2 | 7.7.2 | 7.6.0 | 7.3.1 | 7.2.17 | 7.2.15 | 7.2.14 | 7.2.6 | 7.2.2 | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **4.7.1** | 4.6.2 | 4.5.2 | 4.4.0 | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.13 | 4.0.6 | 4.0.4 | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **6.8.1** | 6.7.2 | 6.6.2 | 6.5.0 | 6.1.1 | 6.0.17 | 6.0.15 | 6.0.14 | 6.0.6 | 6.0.4 | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **advancing-controller** | **4.7.1** | 4.6.2 | 4.5.2 | 4.4.0 | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.12 | 4.0.5 | 4.0.3 | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **2.16.1** | 2.15.3 | 2.14.2 | 2.13.0 | 2.9.0 | 2.7.2 | 2.6.0 | 2.3.16 | 2.3.9 | 2.3.2 | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **2.23.1** | 2.22.3 | 2.21.2 | 2.20.2 | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **2.23.1** | 2.22.3 | 2.21.2 | 2.20.2 | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **2.10.2** | 2.9.2 | 2.8.1 | 2.7.1 | 2.4.1 | 2.3.2 | 2.2.11 | 2.2.9 | 2.2.2 | 2.1.0 | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Renderers
| Component | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ----------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | --------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ----- |
| **@flowx/angular-sdk** | **5.101.1** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **5.101.1** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **5.101.1** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.101.1** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.101.1** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.101.1** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.101.1** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.101.1** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **iOS renderer** | **4.0.30** | 4.0.29 | 4.0.29 | 4.0.29 | 4.0.21 | 4.0.19 | 4.0.14 | 4.0.7 | 4.0.7 | 4.0.5 | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **4.0.26** | 4.0.25 | 4.0.25 | 4.0.25 | 4.0.25 | 4.0.23 | 4.0.15 | 4.0.13 | 4.0.13 | 4.0.12 | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Plugins
| Component | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| -------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ----- | ------ | ------ | ------ | ------ |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **reporting-plugin** | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
## AI Agents
| Component | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ---------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | 1.9.40 | 1.9.40 | 1.9.40 | 1.9.39 | 1.9.39 | 1.9.39 | 1.9.37 | 1.9.35 | 1.9.27 | 1.9.21 | 1.9.16 | 1.9.10 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.8.23** | 1.8.22 | 1.8.21 | 1.8.19 | 1.8.18 | 1.8.17 | 1.8.12 | 1.8.9 | 1.8.2 | 1.7.2 | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | 1.10.29 | 1.10.29 | 1.10.29 | 1.10.28 | 1.10.28 | 1.10.28 | 1.10.26 | 1.10.24 | 1.10.17 | 1.10.13 | 1.10.6 | 1.10.3 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | 1.4.6 | 1.4.6 | 1.4.6 | 1.4.5 | 1.4.5 | 1.4.5 | 1.4.3 | 1.4.1 | 1.2.35 | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | 1.7.14 | 1.7.14 | 1.7.14 | 1.7.13 | 1.7.13 | 1.7.13 | 1.7.11 | 1.7.9 | 1.7.4 | 1.7.0 | 1.6.5 | 1.5.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Supported Versions |
| ---------------- | -------------------- | ------------------ |
| 4.7.9 | Keycloak | 22, 26+ |
| 4.7.9 | Kafka | 3.2 - 3.9 |
| 4.7.9 | PostgreSQL | 16 - 17 |
| 4.7.9 | OracleDB | 19c, 21c, 23ai |
| 4.7.9 | MongoDB | 7 - 8 |
| 4.7.9 | Redis | 7.2 - 8.0 |
| 4.7.9 | Elasticsearch | 7 - 9 |
| 4.7.9 | Angular (Web SDK) | 19.x |
| 4.7.9 | React (Web SDK) | 18.x |
FlowX.AI supports all versions within the specified ranges of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest stable versions within each supported range.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Starting FlowX 5.0, the following versions of 3rd Party Dependencies will no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.9
* Redis versions older than 7.4
* Elasticsearch older than 8
# Deployment guidelines v5.0.0
Source: https://docs.flowx.ai/release-notes/v5.x/v5.0.0-july-2025/deployment-guidelines-v5.0
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

## Component versions
| Component | 5.0.0 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| -------------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ----- |
| **process-engine** | **9.29.2** | 8.23.2 | 8.22.3 | 8.21.1 | 8.17.0 | 8.15.2 | 8.13.0 | 8.9.0 | 8.5.1 | 8.3.1 | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **9.25.2** | 7.17.3 | 7.16.3 | 7.15.2 | 7.12.2 | 7.9.2 | 7.8.13 | 7.8.5 | 7.7.6 | 7.5.1 | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **9.69.0** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **9.21.2** | 5.10.3 | 5.9.2 | 5.8.2 | 5.5.1 | 5.4.16 | 5.4.12 | 5.4.8 | 5.3.3 | 5.2.11 | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **9.12.0** | 5.6.2 | 5.5.2 | 5.4.0 | 5.1.1 | 5.0.13 | 5.0.11 | 5.0.10 | 5.0.4 | 5.0.2 | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **9.12.0** | 5.6.2 | 5.5.2 | 5.4.0 | 5.1.1 | 5.0.19 | 5.0.17 | 5.0.16 | 5.0.7 | 5.0.5 | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **9.14.2** | 6.7.2 | 6.6.2 | 6.5.0 | 6.2.1 | 6.1.15 | 6.1.13 | 6.1.12 | 6.1.3 | 6.1.0 | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **9.17.2** | 6.9.2 | 6.8.2 | 6.7.0 | 6.4.1 | 6.3.18 | 6.3.16 | 6.3.13 | 6.3.4 | 6.3.1 | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **task-management-plugin** | **9.14.2** | 7.8.2 | 7.7.2 | 7.6.0 | 7.3.1 | 7.2.17 | 7.2.15 | 7.2.14 | 7.2.6 | 7.2.2 | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **9.12.1** | 4.6.2 | 4.5.2 | 4.4.0 | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.13 | 4.0.6 | 4.0.4 | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **9.15.2** | 6.7.2 | 6.6.2 | 6.5.0 | 6.1.1 | 6.0.17 | 6.0.15 | 6.0.14 | 6.0.6 | 6.0.4 | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **advancing-controller** | **9.11.0** | 4.6.2 | 4.6.2 | 4.4.0 | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.12 | 4.0.5 | 4.0.3 | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **9.26.2** | 2.15.3 | 2.14.2 | 2.13.0 | 2.9.0 | 2.7.2 | 2.6.0 | 2.3.16 | 2.3.9 | 2.3.2 | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **9.27.3** | 2.22.3 | 2.21.2 | 2.20.2 | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **9.27.3** | 2.22.3 | 2.21.2 | 2.20.2 | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **9.11.0** | 2.9.2 | 2.8.1 | 2.7.1 | 2.4.1 | 2.3.2 | 2.2.11 | 2.2.9 | 2.2.2 | 2.1.0 | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **authorization-system** | **9.14.2** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **nosql-db-runner** | **9.11.0** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | |
### Embedded components
| Component | 5.0.0 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------- | ---------- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **SpiceDB** | **1.42.1** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **DGraph** | **25.0.0** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
### Renderers
| Component | 5.0.0 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | --------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ----- |
| **@flowx/angular-sdk** | **9.69.0** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **9.69.0** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **9.69.0** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **9.69.0** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **9.69.0** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **9.69.0** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **9.69.0** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **9.69.0** | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **iOS renderer** | **9.0.0** | 4.0.29 | 4.0.29 | 4.0.29 | 4.0.21 | 4.0.19 | 4.0.14 | 4.0.7 | 4.0.7 | 4.0.5 | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **9.0.0** | 4.0.29 | 4.0.29 | 4.0.24 | 4.0.24 | 4.0.23 | 4.0.15 | 4.0.13 | 4.0.13 | 4.0.12 | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Plugins
| Component | 5.0.0 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| -------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ----- | ------ | ------ | ------ | ------ |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **reporting-plugin** | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
## AI Platform
| Component | 5.0.0 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ------------------- | ---------- | ------ | ------ | ------ | ------ | ------ | ------ | ----- | ------ | ------ | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-assistant** | **9.2.3** | 1.8.22 | 1.8.21 | 1.8.19 | 1.8.18 | 1.8.17 | 1.8.12 | 1.8.9 | 1.8.2 | 1.7.2 | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **9.0.12** | 1.4.6 | 1.4.6 | 1.4.5 | 1.4.5 | 1.4.5 | 1.4.3 | 1.4.1 | 1.2.35 | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **9.0.1** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **connected-graph** | **9.0.1** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **knowledge-graph** | **9.0.1** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **agents** | **9.0.1** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **conversations** | **9.0.1** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **models** | **9.0.1** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **tenants** | **9.0.1** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **planner** | **9.0.1** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **ai-designer** | **9.0.1** | - | | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **ai-analyst** | **9.0.1** | - | | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Supported Versions |
| ---------------- | -------------------- | ------------------ |
| 5.0.0 | Keycloak | 26+ |
| 5.0.0 | Kafka | 3.8 - 3.9 |
| 5.0.0 | PostgreSQL | 16 - 17 |
| 5.0.0 | Oracle Database | 21c, 23ai |
| 5.0.0 | MongoDB | 7 - 8 |
| 5.0.0 | Redis | 7.4 - 8.0 |
| 5.0.0 | Elasticsearch | 8 - 9 |
| 5.0.0 | Angular (Web SDK) | 19.x |
| 5.0.0 | React (Web SDK) | 18.x |
Starting FlowX 5.0, the following versions of 3rd Party Dependencies will no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.8
* Redis versions older than 7.4
# Post-deployment configuration
Source: https://docs.flowx.ai/release-notes/v5.x/v5.0.0-july-2025/migrating-from-v4.7.x-to-5.0/configuration-and-migration
This section contains the steps in order that we recommend for post-deployment configuration of FlowX.AI.
## Redis cache clearing
**Cache Clearing**:
* FlowX.AI 5.0 removes process definition versioning. Cache must be cleared to remove legacy cached classes.
* When you start the runtime-manager on version 5.x, the library-to-library migration runs automatically. You must clear the cache after this step because a new field is added to the build mongo document, which is required for various operations.
### Endpoint
`POST {{baseUrlAdmin}}/api/internal/cache/clear`
### Body:
```json theme={"system"}
{
"cacheNames": [
"flowx:core:cache"
]
}
```
## Authentication & authorization
### Add users to default workspace
**Process**:
1. **User Re-login**: Existing configurators must log into FlowX.AI Designer once to create user references in FlowX.AI database
2. **Workspace Assignment**: Organization admin assigns users to the default workspace to reestablish access to existing assets and resources
**Access Restoration**: Without workspace assignment, existing users will lose access to previously available resources and projects.
This step ensures business continuity by maintaining user access to existing FlowX.AI assets in the new workspace-based architecture.
### Role mapping guide
FlowX.AI 4.7.x roles stored in Keycloak are not automatically migrated. Manual role assignment is required.
**FlowX.AI 4.7.x** → **FlowX.AI 5.0**
* `FLOWX_ADMIN` → `workspace_admin`
* `FLOWX_CONFIGURATOR` → `workspace_user` or `project_editor`
* `FLOWX_UI_DESIGNER` → `theme_editor`
* `FLOWX_VIEWER` → `project_viewer`
* Custom Keycloak roles → Manual review required
**Important Changes**
* Roles are now workspace-scoped
* More granular permission structure
* Database-stored instead of token-based
* New role hierarchy requires review
### Migration process
Document all existing Keycloak roles and their assigned users before migration
Determine appropriate FlowX.AI 5.0 roles for each user based on their current access needs
Decide how to organize users into workspaces based on business requirements
Use the FlowX.AI 5.0 interface to assign appropriate roles to users in their respective workspaces
Test user access to ensure proper permissions are granted and restrictions are enforced
### For existing customers
The auth-system will automatically:
* Create default organization and workspace
* Import the admin user from Keycloak
* Assign organization admin privileges
* Set up default roles and groups
The data-sync service will:
* Migrate existing projects from app-manager database to CAS database
* Assign all existing resources to the default workspace
* Preserve all existing functionality
* Require temporary write access to CAS database
**Note**: This is the only exception to the exclusive write access rule.
***
## Header migration: Fx-BuildId to Fx-Build-App-Version-Id
### Background
The header `Fx-BuildId` has been renamed to `Fx-Build-App-Version-Id` to accurately reflect that it contains an application version identifier, not a build identifier.
### Migration strategy
During the transition period, both headers are supported:
* **New messages**: Include `Fx-Build-App-Version-Id` with the application version ID
* **Legacy support**: `Fx-BuildId` is still accepted for backward compatibility
* **Priority**: FlowX.AI platform reads `Fx-Build-App-Version-Id` first, then falls back to `Fx-BuildId` if not present
### Implementation guidelines
1. **New integrations**: Use `Fx-Build-App-Version-Id` header
2. **Existing integrations**: Will continue to work during migration period
3. **Client considerations**: Existing client instances may continue sending `Fx-BuildId` until they are updated
### Timeline considerations
Client applications with long-running instances may continue using the legacy `Fx-BuildId` header until those instances complete their processes and are updated to use the new header format.
# Update environment variables
Source: https://docs.flowx.ai/release-notes/v5.x/v5.0.0-july-2025/migrating-from-v4.7.x-to-5.0/environment-variables
Update environment variables for all existing FlowX.AI services
Update environment variable configurations for all existing FlowX.AI services to support version 5.1.0 compatibility.
## Audit core
Elasticsearch configuration migrates from `SPRING_ELASTICSEARCH_*` to `FLOWX_ELASTICSEARCH_*` namespace with enhanced index management.
### Variables to remove & replace
| Remove This Variable | Replace With | Old Default | New Default |
| ----------------------------------------------- | -------------------------------------------- | ------------ | ------------ |
| `SPRING_ELASTICSEARCH_INDEXSETTINGS_DATASTREAM` | `FLOWX_ELASTICSEARCH_INDEXSETTINGS_NAME` | `audit-logs` | `audit-logs` |
| `SPRING_ELASTICSEARCH_INDEXSETTINGS_SHARDS` | `FLOWX_ELASTICSEARCH_INDEXSETTINGS_SHARDS` | `2` | `2` |
| `SPRING_ELASTICSEARCH_INDEXSETTINGS_REPLICAS` | `FLOWX_ELASTICSEARCH_INDEXSETTINGS_REPLICAS` | `2` | `0` |
### New variables to add
| Variable | Default Value | Description |
| --------------------------------------- | ------------- | ---------------------------------- |
| `FLOWX_ELASTICSEARCH_INDEXROLLOVERDAYS` | `30` | 🆕 Automatic index rollover policy |
## Data Search
Simple migration with containerization support and namespace alignment.
### Variables to update
| Variable | Current Value | New Value | Reason |
| -------------------------------- | ---------------- | -------------------- | ------------------------ |
| `SPRING_ELASTICSEARCH_REST_URIS` | `localhost:9200` | `elasticsearch:9200` | Containerization support |
### Variables to replace
| Remove This | Add This | Default Value |
| ----------------------------------------- | ---------------------------------------- | ------------------ |
| `SPRING_ELASTICSEARCH_INDEXSETTINGS_NAME` | `FLOWX_ELASTICSEARCH_INDEXSETTINGS_NAME` | `process_instance` |
## Kafka Configuration
Consumer group naming standardized to kebab-case across all FlowX.AI services with new messaging features for enhanced functionality.
**Do not modify default consumer group names.** We strongly recommend against changing the default consumer group names as this operation can lead to misconfigurations. The application is designed to work and scale with the consumer groups as they are defined by default.
### Consumer group naming changes
**Admin (3 groups):**
| Old Group ID | New Group ID |
| ---------------------------------- | -------------------------------------- |
| `genericProcessingGroup` | `generic-processing-group` |
| `processSyncGroup` | `process-sync-group` |
| `adminResourcesUsagesRefreshGroup` | `admin-resources-usages-refresh-group` |
**Application Manager (15 groups):**
| Old Group ID | New Group ID |
| ----------------------------------- | ----------------------------------------- |
| `appResourceExportGroup` | `app-resource-export-group` |
| `appResourceImportGroup` | `app-resource-import-group` |
| `appResourceUsagesGroup` | `app-resource-usages-group` |
| `appResElemUsageValidationResp` | `app-resource-elem-usage-validation-resp` |
| `appResourceCopyGroup` | `app-resource-copy-group` |
| `appResourceSyncGroup` | `app-resource-sync-group` |
| `appResourceUpdatePropagationGroup` | `app-resource-update-propagation-group` |
| `appMergeItemGroup` | `app-merge-item-group` |
| `buildCreateGroup` | `build-create-group` |
| `buildUpdateGroup` | `build-update-group` |
| `buildResourceExportGroup` | `build-resource-export-group` |
| `buildResourceImportGroup` | `build-resource-import-group` |
| `buildRuntimeDataGroup` | `build-runtime-data-group` |
| `buildStartTimerEventsUpdatesGroup` | `build-start-timer-events-updates-group` |
| `processStartGroup` | `process-start-group` |
**CMS Core (1 group):**
| Old Group ID | New Group ID |
| ---------------------- | -------------------- |
| `cms-consumer-preview` | `cms-consumer-group` |
**Document Plugin (1 group):**
| Old Group ID | New Group ID |
| ----------------------------------------- | ----------------------------- |
| `kafka-svc-document-consumer-local-test2` | `kafka-svc-document-consumer` |
| | |
**Integration Designer (3 groups):**
| Old Group ID | New Group ID |
| ------------------------------------------- | ------------------------------------------------------ |
| `integrDesignerResourcesUsagesRefreshGroup` | `integration-designer-resources-usages-refresh-group` |
| `genericProcessingGroup` | `start-workflows-group` |
| `resElemUsageValidation` | `integration-designer-res-elem-usage-validation-group` |
**Notification Plugin (1 group):**
| Old Group ID | New Group ID |
| ------------------ | ------------------------------ |
| `notif123-preview` | `notification-plugin-consumer` |
**Process Engine (11 groups):**
| Old Group ID (all were `notif123-preview`) | New Group ID |
| ------------------------------------------ | -------------------------- |
| `notif123-preview` | `advance` |
| `notif123-preview` | `notify-parent` |
| `notif123-preview` | `adapters` |
| `notif123-preview` | `scheduler-run-action` |
| `notif123-preview` | `scheduler-advancing` |
| `notif123-preview` | `message-events` |
| `notif123-preview` | `process-start` |
| `notif123-preview` | `process-start-for-event` |
| `notif123-preview` | `process-expire` |
| `notif123-preview` | `process-operations` |
| `notif123-preview` | `process-batch-processing` |
### Application Manager specific features
#### New environment variables
| Variable | Default Value | Description |
| ---------------------------------------------------------------- | ------------- | ----------------------------------- |
| `FLOWX_RESOURCESUSAGES_REFRESHPRODUCER_REFRESHEXPIRATIONSECONDS` | `300` | 🆕 Refresh expiration timeout |
| `SERVER_MAXHTTPREQUESTHEADERSIZE` | `16KB` | 🆕 Maximum HTTP request header size |
#### New Kafka features
Consumer Group: `app-resource-update-propagation-group`\
Threads: 3\
Topic: `ai.flowx.{env}.application-version.resource.update.propagation.v1`
Consumer Group: `build-runtime-data-group`\
Threads: 2\
Topic: `ai.flowx.{env}.build.runtime-data.v1`
Topic: `ai.flowx.{env}.application-version.sync.business-rule.in.v1`\
Purpose: Business rule synchronization
Topic: `ai.flowx.{env}.application-version.sync.process.in.v1`\
Purpose: Enhanced process synchronization
Topic: `ai.flowx.{env}.application-version.sync.reusable-template.in.v1`\
Purpose: Reusable template synchronization
#### Kafka environment variables (optional overrides)
```bash New Topics theme={"system"}
# Resource Update Propagation
KAFKA_TOPIC_APPLICATION_RESOURCE_RESOURCEUPDATEPROPAGATION=ai.flowx.dev.application-version.resource.update.propagation.v1
# Build Runtime Data
KAFKA_TOPIC_BUILD_RUNTIMEDATA=ai.flowx.dev.build.runtime-data.v1
# Business Rule Sync
KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_OUT_BUSINESSRULE=ai.flowx.dev.application-version.sync.business-rule.in.v1
# Process Sync (restructured)
KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_OUT_PROCESS=ai.flowx.dev.application-version.sync.process.in.v1
# Reusable Templates sync
KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_OUT_REUSABLE_TEMPLATE=ai.flowx.dev.application-version.sync.reusable-template.in.v1
```
```bash Consumer Groups theme={"system"}
# New Consumer Groups
KAFKA_CONSUMER_GROUPID_APPLICATION_RESOURCE_UPDATEPROPAGATION=app-resource-update-propagation-group
KAFKA_CONSUMER_GROUPID_BUILD_RUNTIMEDATA=build-runtime-data-group
# Thread Configuration
KAFKA_CONSUMER_THREADS_APPLICATION_RESOURCE_UPDATEPROPAGATION=3
KAFKA_CONSUMER_THREADS_BUILD_RUNTIMEDATA=2
```
**Automatic Configuration**: Most deployments can rely on the built-in naming patterns without explicit environment variable overrides.
## Integration Designer
### Storage configuration
Added support for S3 storage for files in Integration Designer.
| Variable | Default Value | Description |
| ---------------------------------------------- | ------------------- | ------------------------ |
| `APPLICATION_FILESTORAGE_TYPE` | `s3` | 🆕 Storage type |
| `APPLICATION_FILESTORAGE_PARTITIONSTRATEGY` | `NONE` | 🆕 Partition strategy |
| `APPLICATION_FILESTORAGE_DELETIONSTRATEGY` | `delete` | 🆕 Deletion strategy |
| `APPLICATION_FILESTORAGE_S3_ENABLED` | `true` | 🆕 S3 enabled |
| `APPLICATION_FILESTORAGE_S3_SERVERURL` | `http://minio:9000` | 🆕 S3 server URL |
| `APPLICATION_FILESTORAGE_S3_ENCRYPTIONENABLED` | `false` | 🆕 S3 encryption enabled |
| `APPLICATION_FILESTORAGE_S3_ACCESSKEY` | `minio` | 🆕 S3 access key |
| `APPLICATION_FILESTORAGE_S3_SECRETKEY` | `minio123` | 🆕 S3 secret key |
| `APPLICATION_FILESTORAGE_S3_BUCKETPREFIX` | `workflows-bucket` | 🆕 S3 bucket prefix |
### Redis
Added caching when running a workflow.
| Variable | Default Value | Description |
| ------------------------------- | ---------------------------------------- | --------------------- |
| `SPRING_CACHE_TYPE` | `redis` | 🆕 Cache type |
| `SPRING_CACHE_REDIS_KEYPREFIX` | `flowx:core:cache:integration-designer:` | 🆕 Cache key prefix |
| `SPRING_CACHE_REDIS_TIMETOLIVE` | `5000000` | 🆕 Cache time to live |
| `SPRING_REDIS_HOST` | `redis-master` | 🆕 Redis host |
| `SPRING_REDIS_PORT` | `6379` | 🆕 Redis port |
| `SPRING_REDIS_PASSWORD` | `defaultpassword` | 🆕 Redis password |
| `SPRING_REDIS_TTL` | `5000000` | 🆕 Redis time to live |
| `SPRING_DATA_REDIS_HOST` | `spring.redis.host` | 🆕 Redis host |
## Java runtime configuration
FlowX.AI containers and services must rely exclusively on Java-standard environment variables for runtime tuning.
| Deprecated variables | Standard Replacement | Notes |
| -------------------------------- | -------------------- | ------------------------------------------------------------------ |
| `JAVA_OPTS`, `JAVA_TOOL_OPTIONS` | `JDK_JAVA_OPTIONS` | Ensures compatibility with Java 21 and simplifies container config |
Environment-specific memory configurations must now be defined using `JDK_JAVA_OPTIONS`. Avoid relying on `JAVA_OPTS`, `JAVA_TOOL_OPTIONS` or legacy Docker-level overrides — these are no longer processed explicitly.
## Config profiles
Config profiles are deprecated since 4.7.6 version.
Remove legacy `CONFIG_PROFILE` usage. Delete any `CONFIG_PROFILE` environment variable definitions from deployments. This variable is no longer referenced by FlowX.AI services.
# Install new services
Source: https://docs.flowx.ai/release-notes/v5.x/v5.0.0-july-2025/migrating-from-v4.7.x-to-5.0/install-services
Step-by-step installation guide for new FlowX.AI 5.0 services
FlowX.AI 5.0 introduces two new services:
1. **Authorization System (CAS)** - Centralized authorization and permission management
2. **NoSQL DB Runner** - The NoSQL DB Runner is a backend microservice that powers FlowX.AI Database functionality. It provides MongoDB and Azure Cosmos DB operations support for FlowX.AI Database collections and handles data persistence operations across FlowX.AI processes.
# Overview
Source: https://docs.flowx.ai/release-notes/v5.x/v5.0.0-july-2025/migrating-from-v4.7.x-to-5.0/migration-overview
Complete migration guide from FlowX.AI 4.7.x to 5.0 with prerequisites and step-by-step process
You can only upgrade from version 4.7.6 (or newer) to 5.0.0. If you’re on an earlier version, upgrade to the latest LTS version first.
## Success factors
Take care when following steps are mandatory and will prevent service startup if skipped:
1. **SpiceDB and DGraph** must be installed before any FlowX.AI services
DGraph is required only if you are using FlowX AI agents. If not, you can skip this step.
2. **Organization admin user** must be configured before authorization-system service deployment
3. **Service accounts** must have `SA_FLOWX` role assigned
4. **Data migration** must complete before service upgrades
## Migration process
Follow these steps in the exact order specified to ensure a successful migration:
### Data migration
Migrate existing Elasticsearch data to support the new workspace-based architecture.
### Installing new third parties
**New mandatory infrastructure components:**
* **SpiceDB** - Authorization and permission management backend
* **DGraph** - Graph-based data operations and relationships
### Upgrading existing third parties
Update existing infrastructure to the new supported versions:
* Kafka 3.8+, Redis 7.4+, Elasticsearch 8+, Keycloak 26+
### Organization admin user
Configure the organization admin user before deploying the authorization-system service.
### Service accounts
Assign `SA_FLOWX` role to all service accounts used by FlowX services.
See the details on prerequisites for migration
Deploy new FlowX.AI 5.0 services in the correct order to ensure proper startup and dependency validation.
**Required installation sequence:**
1. **Authorization System (CAS)** - Must be installed first to validate SpiceDB connection
2. **NoSQL DB Runner** - Backend service for [FlowX.AI Database](../../../5.0-tech-preview/docs/platform-deep-dive/integrations/flowx-database)
**Service Startup Dependency**: Authorization System will not start without proper SpiceDB installation and organization admin configuration.
Step-by-step installation with validation procedures
Installing Authorization System first allows you to validate all critical configurations before proceeding.
Update environment variable configurations for all existing FlowX.AI services to support version 5.0 compatibility.
**Configuration updates include:**
* New Kafka topics and consumer groups
* Updated Elasticsearch settings and index configurations
* Enhanced security and authorization parameters
* New service integration endpoints
Update environment variables for all existing FlowX.AI services
Upgrade all existing FlowX.AI services to version 5.0 after completing environment variable updates.
See the details on container apps (Renderers SDKs)
Perform the post deployment steps:
* Validate data-sync migrations
* Clear cache with endpoint
* Remove deprecated configuration roles (optional)
* Add users to default workspace
### Validate data-sync migrations
Verify that all data synchronization processes completed successfully and perform additional system checks.
### Clear cache with endpoint
**Required**: Clear Redis cache using the dedicated endpoint with organization admin token.
**Cache Clearing**:
* FlowX.AI 5.0 removes process definition versioning. Cache must be cleared to remove legacy cached classes.
* When you start the runtime-manager on version 5.x, the library-to-library migration runs automatically. You must clear the cache after this step because a new field is added to the build mongo document, which is required for various operations.
### Remove deprecated configuration roles (optional)
Clean up legacy roles from Keycloak or other authentication servers that are now managed by CAS.
### Add users to default workspace
**Process**:
1. **User Re-login**: Existing configurators must log into FlowX.AI Designer once to create user references in FlowX.AI database
2. **Workspace Assignment**: Organization admin assigns users to the default workspace to reestablish access to existing assets and resources
**Access Restoration**: Without workspace assignment, existing users will lose access to previously available resources and projects.
Complete post-deployment procedures and validation
# Prerequisites
Source: https://docs.flowx.ai/release-notes/v5.x/v5.0.0-july-2025/migrating-from-v4.7.x-to-5.0/prerequisites
This section contains the steps in order that we recommend for migrating data from FlowX v4.7.x to v5.0.0.
## Upgrading existing third parties
Update existing infrastructure to at least the new supported versions:
| Component | 4.7.6 | FlowX.AI 5.0 |
| ----------------- | --------- | ------------- |
| **Kafka** | 3.2 - 3.9 | **3.8 - 3.9** |
| **Redis** | 7.2 - 8.0 | **7.4 - 8.0** |
| **Elasticsearch** | 7 - 9 | **8 - 9** |
| **Keycloak** | 22,26+ | **26+** |
***
## Installing new third parties
FlowX.AI 5.0 requires two new infrastructure components that must be installed and properly configured before any FlowX.AI services can start.
* **SpiceDB** - Required for authorization management (Must be accessible by the authorization-system service)
* **DGraph** - Required for data relationships and graph operations. If you are not using FlowX AI agents (you don't have an AI deployment), you can skip this step.
***
## Elasticsearch workspace migration
**The primary goal of this Elasticsearch migration is to add the default workspace ID to all existing resources in your environment.** This ensures that all your current data (process instances, audit logs, etc.) will be properly associated with a workspace and remain accessible after the upgrade to FlowX 5.0.0.
Without this migration, existing data would not have workspace associations and could become inaccessible or invisible in workspace-scoped operations.
Elasticsearch index mappings must be updated before upgrading to FlowX.AI 5.0 to ensure workspace functionality works correctly.
### Prerequisites for migration
Before upgrading to FlowX.AI 5.0, you must update the mappings for all existing Elasticsearch indices to include the `workspaceId` field:
```json theme={"system"}
PUT /{indexName/indexPattern}/_mapping
{
"properties": {
"workspaceId": {
"type": "keyword"
}
}
}
```
This mapping update is required for:
* Process instances indices (you can find the indices in the `flowx-process-engine` setup guide at `FLOWX_INDEXING_PROCESSINSTANCE_INDEX_NAME` environment variable, if not set, the default is `process_instance`)
* Audit log indices (you can find the indices in the `audit-core` setup guide at `SPRING_ELASTICSEARCH_INDEX_SETTINGS_DATASTREAM` environment variable)
### Migration execution methods
You can execute these migration queries using:
* **Kibana Dev Tools**: Execute queries directly in the Kibana interface
* **Elasticsearch API**: Use direct API calls to perform migrations
### Migration timing
**Recommended approach**: Complete these Elasticsearch migrations **before** upgrading FlowX.AI microservices. Upgrading services first and then creating new workspaces will complicate the migration process.
### Process instances migration
Process instances indices require manual migration using Elasticsearch's `update_by_query` API to assign them to the default workspace:
#### Synchronous migration
```json theme={"system"}
POST /{indexName}/_update_by_query?slices=auto
{
"script": {
"source": "ctx._source.workspaceId = params.workspace_id;",
"lang": "painless",
"params": {
"workspace_id": "00000000-0000-0000-0000-000000000001"
}
},
"query": {
"bool": {
"must_not": {
"exists": {
"field": "workspaceId"
}
}
}
}
}
```
#### Asynchronous migration (for large datasets)
For large datasets, use asynchronous migration:
```json theme={"system"}
POST /{indexName}/_update_by_query?slices=auto&wait_for_completion=false
```
Monitor async tasks with:
```json theme={"system"}
GET /_tasks/{task_id}
```
### Audit logs migration
Audit logs follow the same migration process as process instances, using identical scripts and procedures to assign them to the default workspace:
```json theme={"system"}
POST /{audit_index_pattern}/_update_by_query?slices=auto
{
"script": {
"source": "ctx._source.workspaceId = params.workspace_id;",
"lang": "painless",
"params": {
"workspace_id": "00000000-0000-0000-0000-000000000001"
}
},
"query": {
"bool": {
"must_not": {
"exists": {
"field": "workspaceId"
}
}
}
}
}
```
### Performance optimization
* Use `slices=auto` for automatic parallelization based on primary shards
* For multiple indices, use patterns: `POST /my_pattern-*/_update_by_query?slices=auto`
* Batch processing with size parameter: `?size=1000`
* Monitor large operations using asynchronous execution
### Post-migration impact
**Without proper Elasticsearch migration, you will experience:**
* Some process instances may not appear in search results
* Data-search functionality may not return complete results
* Workspace-scoped queries will fail for unmigrated data
* **Existing resources will not be visible or accessible within the new workspace structure**
### Default workspace ID
The migration uses the default workspace ID: `00000000-0000-0000-0000-000000000001`
All existing resources (process instances, audit logs, etc.) will be moved to this default workspace, ensuring continuity of operations after the upgrade to FlowX.AI 5.0.0.
***
### Organization admin user
Configure the organization admin user before deploying the authorization-system service (that is mentioned in the [Install Services](./install-services) section).
Details on how to configure the organization admin user:
***
#### Pre-migration preparation
Required configuration for the authorization-system service:
* `SPRING_LIQUIBASE_PARAMETERS_CREATEDEFAULTWORKSPACE`= `true` (mandatory for migrations)
* `SPRING_LIQUIBASE_PARAMETERS_DEFAULTORGADMINUSERSUBJECTID`= `` (mandatory for migrations)
To get the subject-id of the admin user, you can extract it from the JWT token of the admin user.

Make sure the admin user is created in Keycloak before deploying the authorization-system service.
***
## Update service accounts
FlowX.AI 5.0 introduces new service account role requirements that must be configured before service deployment.
All service accounts used by FlowX.AI services must have the `SA_FLOWX` role assigned. Services will not authenticate properly without this role.
\--
## Additional Keycloak roles requirements for authorization-system service
Before deploying the `authorization-system` service, you must assign additional roles to its service account in Keycloak to enable user management operations.
**Required client roles for the service account:**
```json theme={"system"}
{
"clientRoles" : {
"realm-management" : [
"manage-users",
"query-users",
"view-users"
]
}
}
```
***
## Process instances migration
All active process instances will be migrated under default workspace.
For clients who need inactive process instances migrated, we’ll provide migration script which will be run post migration.
# Renderer SDKs
Source: https://docs.flowx.ai/release-notes/v5.x/v5.0.0-july-2025/migrating-from-v4.7.x-to-5.0/renderers
This guide assists in migrating from FlowX.AI v4.7.x to v5.0.
## Angular SDK migration guide
### Upgrading to the new SDK libraries
The Angular SDK node packages have been updated to support Workspaces, introduced in FlowX.AI v5.0. All container apps that want to use the new SDKs should update to the latest package versions and implement the required workspace configuration.
* Remove old FlowX.AI SDK libraries (if upgrading from earlier versions):
```bash theme={"system"}
npm uninstall @flowx/angular-sdk @flowx/core-sdk @flowx/core-theme @flowx/angular-theme @flowx/angular-ui-toolkit
```
* Install new FlowX.AI v5.0 packages:
```bash theme={"system"}
npm install \
@flowx/core-sdk@ \
@flowx/core-theme@ \
@flowx/angular-sdk@ \
@flowx/angular-theme@ \
@flowx/angular-ui-toolkit@ \
@angular/cdk@19 \
@types/event-source-polyfill
```
Replace `` with the correct version corresponding to your FlowX.AI v5.0 platform version. Check: **Release Notes → v5.0 → Deployment guidelines → Component versions**.
* Ensure your Angular version is compatible:
```bash theme={"system"}
npm install -g @angular/cli@19
```
* Verify system requirements:
* Node.js: v20.9.0 or higher
* npm: v10.1.0 or higher
* Angular: \~19
* Run through all the migration steps in the [New SDK API changes](#new-sdk-api-changes) section below.
### SDK API changes
In the Angular SDK, the `` component has a new mandatory parameter: `workspaceId`.
| Name | Description | Type | Requirement |
| ------------- | ---------------------------------------------------------------------------- | -------- | ----------- |
| `workspaceId` | **Workspace identifier** that contains the project and process to be started | `string` | Mandatory |
Add the definition for this property in your component:
```typescript theme={"system"}
export class AppComponent {
workspaceId = 'your-workspace-id';
// ... other existing properties
}
```
Use this parameter as input for the `` component:
```html theme={"system"}
>
```
### Task management component changes
The task management component now also requires workspace context:
```html theme={"system"}
>
```
***
## React SDK migration guide
### Upgrading to the new SDK libraries
The React SDK node packages have been updated to support Workspaces, introduced in FlowX.AI v5.0. All container apps that want to use the new SDKs should update to the latest package versions and implement the required workspace configuration.
* Remove old FlowX.AI SDK libraries:
```bash theme={"system"}
npm uninstall @flowx/react-sdk @flowx/core-sdk @flowx/core-theme @flowx/react-theme @flowx/react-ui-toolkit
```
* Install new FlowX.AI v5.0 packages:
```bash theme={"system"}
npm install \
react@18 \
react-dom@18 \
@flowx/core-sdk@ \
@flowx/core-theme@ \
@flowx/react-sdk@ \
@flowx/react-theme@ \
@flowx/react-ui-toolkit@ \
air-datepicker@3 \
axios \
ag-grid-react@32
```
Replace `` with the correct version corresponding to your FlowX.AI v5.0 platform version. Check: **Release Notes → v5.0 → Deployment guidelines → Component versions**.
* Ensure your React version is compatible:
```bash theme={"system"}
npm install react@~18 react-dom@~18
```
* Verify Node.js version compatibility:
* Node.js: v18.16.9 or higher
* npm: v10.8.0 or higher
* Run through all the migration steps in the [New SDK API changes](#new-sdk-api-changes) section below.
### New SDK API changes
In the React SDK, the `` component has a new mandatory parameter: `workspaceId`.
| Name | Description | Type | Requirement |
| ------------- | ---------------------------------------------------------------------------- | -------- | ----------- |
| `workspaceId` | **Workspace** identifier that contains the project and process to be started | `string` | Mandatory |
Add the definition for this property in your component:
```typescript theme={"system"}
const workspaceId = 'your-workspace-id';
```
Use this parameter as input for the `` component:
```tsx theme={"system"}
```
### Task management component changes
The task management component now also requires workspace context:
```tsx theme={"system"}
```
## Android SDK migration guide
### System requirements
System requirements:
* **minSdk = 26**
* **compileSdk = 35**
The SDK library was build using:
* **[Android Gradle Plugin](https://developer.android.com/build/releases/gradle-plugin) 8.11.0**
* **[Gradle](https://gradle.org/releases/) 8.14.2**
* **[Kotlin](https://kotlinlang.org/) 2.2.0**
### Library dependencies
Impactful dependencies:
* **[Android Core KTX](https://developer.android.com/kotlin/ktx#core) 1.16.0**
* **[Android Activity Compose](https://developer.android.com/jetpack/androidx/releases/activity) 1.10.1**
* **[Compose BOM](https://developer.android.com/jetpack/compose/bom/bom-mapping) 2025.06.01**
* **[Compose Navigation](https://developer.android.com/develop/ui/compose/navigation) 2.9.1**
* **[Android Lifecycle](https://developer.android.com/jetpack/androidx/releases/lifecycle) 2.9.1**
* **[Accompanist Permissions](https://google.github.io/accompanist/permissions/) 0.37.3**
* **[Kotlin Coroutines](https://kotlinlang.org/docs/coroutines-overview.html) 1.10.2**
* **[Android DataStore](https://developer.android.com/jetpack/androidx/releases/datastore) 1.1.7**
* **[Android Preference](https://developer.android.com/jetpack/androidx/releases/preference) 1.2.1**
* **[Android Security](https://developer.android.com/jetpack/androidx/releases/security) 1.1.0-beta01**
* **[OkHttp BOM](https://square.github.io/okhttp/) 4.12.0**
* **[Retrofit](https://square.github.io/retrofit/) 2.12.0**
* **[Moshi](https://github.com/square/moshi) 1.15.2**
* **[Coil BOM](https://coil-kt.github.io/coil/) 3.2.0**
* **[Android Core Library Desugaring](https://developer.android.com/studio/write/java8-support#library-desugaring) 2.1.5**
Other dependencies:
* **[Android Annotation](https://developer.android.com/jetpack/androidx/releases/annotation) 1.9.1**
* **[Google Protobuf](https://github.com/protocolbuffers/protobuf/tree/main/java#use-java-protocol-buffers-on-android) 4.31.1**
* **[Mozilla Rhino](https://github.com/mozilla/rhino) 1.8.0**
* **[JetBrains Markdown](https://github.com/JetBrains/markdown) 0.7.3**
* **[CommonMark](https://github.com/commonmark/commonmark-java) 0.25.0**
- **[Koin](https://insert-koin.io/)** dependency has been removed
- **[Gson](https://github.com/google/gson)** dependency has been removed
Some dependencies were removed, others got updated.
It is highly recommended that the container projects to be aligned with these versions in order to avoid any compatibility issues.
### New SDK Migration Guide
To successfully build and run your project with the updated SDK, please follow these sequential steps within your container project:
```kotlin [rootProject]/app/build.gradle.kts lines theme={"system"}
implementation("ai.flowx.android:android-sdk:4.0.25") // [!code --]
implementation("ai.flowx.android:sdk:9.0.0") // [!code ++]
```
```kotlin [rootProject]/app/build.gradle.kts lines theme={"system"}
android {
compileSdk = 34 // [!code --]
compileSdk = 35 // [!code ++]
}
```
```kotlin [rootProject]/app/build.gradle.kts theme={"system"}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8 // [!code --]
sourceCompatibility = JavaVersion.VERSION_17 // [!code ++]
targetCompatibility = JavaVersion.VERSION_1_8 // [!code --]
targetCompatibility = JavaVersion.VERSION_17 // [!code ++]
}
kotlinOptions { // [!code --]
jvmTarget = "1.8" // [!code --]
} // [!code --]
kotlin { // [!code ++]
compilerOptions { // [!code ++]
jvmTarget.set(JvmTarget.JVM_17) // [!code ++]
} // [!code ++]
} // [!code ++]
```
```kotlin [rootProject]/build.gradle.kts theme={"system"}
plugins {
id("com.android.application") version "M.m.p" apply false // where M.m.p < 8.10.0 // [!code --]
id("com.android.application") version "8.10.0" apply false // [!code ++]
}
```
```properties [root-project]/gradle/wrapper/gradle-wrapper.properties icon="ini" theme={"system"}
distributionUrl=https\://services.gradle.org/distributions/gradle-M.m.p-bin.zip # where M.m.p < 8.11.1 [!code --]
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip # [!code ++]
```
```kotlin [rootProject]/build.gradle.kts theme={"system"}
plugins {
id("org.jetbrains.kotlin.android") version "1.m.p" apply false // [!code --]
id("org.jetbrains.kotlin.android") version "2.2.0" apply false // [!code ++]
}
```
```kotlin [rootProject]/build.gradle.kts theme={"system"}
plugins {
id("org.jetbrains.kotlin.plugin.compose") version "2.2.0" apply false // [!code ++]
}
```
```kotlin [rootProject]/app/build.gradle.kts theme={"system"}
plugins {
id("org.jetbrains.kotlin.plugin.compose") // [!code ++]
}
```
```kotlin [rootProject]/app/build.gradle.kts theme={"system"}
android {
composeOptions { // [!code --]
kotlinCompilerExtensionVersion = "1.m.p" // [!code --]
} // [!code --]
}
```
It is recommended to use the same version as the one configured for the **Kotlin** pluginConsult the [Compose Compiler Migration Guide](https://kotlinlang.org/docs/compose-compiler-migration-guide.html)
```kotlin [rootProject]/app/build.gradle.kts theme={"system"}
android {
compileOptions { // [!code ++]
isCoreLibraryDesugaringEnabled = true // [!code ++]
} // [!code ++]
}
dependencies {
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5") // [!code ++]
}
```
```kotlin [rootProject]/app/src/main/[java|kotlin]/com/example/MyApp.kt theme={"system"}
import ai.flowx.android.sdk.main.FlowxOwner
class MyApp : Application(), FlowxOwner { // [!code ++]
override val flowx: Lazy = lazy { Flowx.getInstance() } // [!code ++]
}
```
As a result of this change, all calls to `FlowxSdkApi.getInstance()` must be replaced with `Flowx.getInstance()`.
```kotlin theme={"system"}
import ai.flowx.android.sdk.FlowxSdkApi // [!code --]
import ai.flowx.android.sdk.main.Flowx // [!code ++]
FlowxSdkApi.getInstance() // [!code --]
Flowx.getInstance() // [!code ++]
```
```kotlin theme={"system"}
import ai.flowx.android.sdk.process.model.SdkConfig // [!code --]
import ai.flowx.android.sdk.api.Config // [!code ++]
Flowx.getInstance().init(
context = applicationContext,
config = SdkConfig(...), // [!code --]
config = object : Config { ... }, // [!code ++]
)
```
The `config` parameter is no longer a `data class`. It is now an `interface`.
```kotlin theme={"system"}
data class SdkConfig(...) // [!code --]
interface Config { ... } // [!code ++]
```
When passing custom validators as a configuration parameter, the linter might show errors related to inferring the type of the `validators` property. To fix, use `Map Boolean>?` as a type.
```kotlin focus={5,9} theme={"system"}
FlowxSdkApi.getInstance().init( // [!code --]
Flowx.getInstance().init( // [!code ++]
context = applicationContext,
config = SdkConfig( // [!code --]
enableLog = true, // [!code --]
), // [!code --]
config = object : Config {
//...
override val logEnabled: Boolean get() = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE // [!code ++]
}, // [!code ++]
)
```
```kotlin focus={1,4,5} theme={"system"}
Flowx.getInstance().init(
context = applicationContext,
config = object : Config { ... },
accessTokenProvider = null, // null by default; can be set later, depending on the existing authentication logic // [!code --]
)
```
Authentication will now be managed by calling the `Flowx.getInstance().setAccessToken(accessToken: String?)` method with the appropriate argument
Refer to the following steps for detailed information about the authentication process migration
```kotlin theme={"system"}
import ai.flowx.android.sdk.ui.components.custom.CustomComponentsProvider // [!code --]
import ai.flowx.android.sdk.api.custom.components.CustomComponentsProvider // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderProvider // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeaderProvider // [!code ++]
```
```kotlin theme={"system"}
// if used explicitly
import ai.flowx.android.sdk.analytics.AnalyticsCollector // [!code --]
import ai.flowx.android.sdk.api.analytics.AnalyticsCollector // [!code ++]
import ai.flowx.android.sdk.analytics.Event // [!code --]
import ai.flowx.android.sdk.api.analytics.Event // [!code ++]
```
```kotlin theme={"system"}
import ai.flowx.android.sdk.NewProcessStartedHandler // [!code --]
import ai.flowx.android.sdk.api.NewProcessStartedHandler // [!code ++]
```
**Summary of changes:**
```kotlin diff v4.0.25..v9.0.0 focus={2,5,9,13,17,20,24,27,41-52,63} theme={"system"}
import ai.flowx.android.sdk.FlowxSdkApi // [!code --]
import ai.flowx.android.sdk.main.FlowxSdk // [!code ++]
import ai.flowx.android.sdk.process.model.SdkConfig // [!code --]
import ai.flowx.android.sdk.api.Config // [!code ++]
// if used explicitly
import ai.flowx.android.sdk.ui.components.custom.CustomComponentsProvider // [!code --]
import ai.flowx.android.sdk.api.custom.components.CustomComponentsProvider // [!code ++]
// if used explicitly
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderProvider // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeaderProvider // [!code ++]
// if used explicitly
import ai.flowx.android.sdk.analytics.AnalyticsCollector // [!code --]
import ai.flowx.android.sdk.api.analytics.AnalyticsCollector // [!code ++]
import ai.flowx.android.sdk.analytics.Event // [!code --]
import ai.flowx.android.sdk.api.analytics.Event // [!code ++]
// if used explicitly
import ai.flowx.android.sdk.NewProcessStartedHandler // [!code --]
import ai.flowx.android.sdk.api.NewProcessStartedHandler // [!code ++]
FlowxSdkApi.getInstance().init( // [!code --]
Flowx.getInstance().init( // [!code ++]
context = applicationContext,
config = SdkConfig( // [!code --]
baseUrl = "flowx base url", // [!code --]
enginePath = "flowx engine path", // [!code --]
imageBaseUrl = "flowx image base url", // [!code --]
language = "en", // [!code --]
locale = Locale.getDefault(), // [!code --]
validators = mapOf("cnp" to { it.length == 13 }), // a simplified example for custom validator, named "cnp", which checks only the length of the given data // [!code --]
customHeaders = mapOf("Custom-Header" to "custom header value"), // [!code --]
updateStateEnabled = true, // [!code --]
cacheDocuments = true, // [!code --]
enableLog = true, // [!code --]
), // [!code --]
config = object : Config { // [!code ++]
override val baseUrl: String = "flowx base url" // [!code ++]
override val enginePath: String = "flowx engine path" // [!code ++]
override val imageBaseUrl: String = "flowx image base url" // [!code ++]
override val language: String = "en" // defaults to "en" // [!code ++]
override val locale: Locale = Locale.getDefault() // defaults to Locale.getDefault() // [!code ++]
override val validators: Map Boolean>? = mapOf("cnp" to { it.length == 13 }) // a simplified example for custom validator, named "cnp", which checks only the length of the given data // defaults to null // [!code ++]
override val customHeaders: Map? = mapOf("Custom-Header" to "custom header value") // defaults to null // [!code ++]
override val updateStateEnabled: Boolean = true // defaults to true // [!code ++]
override val cacheDocuments: Boolean = true // defaults to true // [!code ++]
override val logEnabled: Boolean get() = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE // or whatever value fits your use case // [!code ++]
}, // [!code ++]
accessTokenProvider = null, // null by default; can be set later, depending on the existing authentication logic // [!code --]
customComponentsProvider = object : CustomComponentsProvider {...},
customStepperHeaderProvider = object : CustomStepperHeaderProvider { ... },
analyticsCollector = { event ->
when (event) {
is Event.Screen -> Log.i("Analytics", "Event.Screen(value = ${event.data.value})")
is Event.Action -> Log.i("Analytics", "Event.Action(value = ${event.data.value}, screen = ${event.data.screen}, component = ${event.data.component}, label = ${event.data.label})")
}
},
onNewProcessStarted = object : NewProcessStartedHandler.Delegate { ... }
)
```
The `setAccessTokenProvider` method on the SDK instance has been replaced with `setAccessToken`.
```kotlin theme={"system"}
import ai.flowx.android.sdk.FlowxSdkApi.Companion.AccessTokenProvider // [!code --]
fun setAccessTokenProvider(accessTokenProvider: AccessTokenProvider) // [!code --]
fun setAccessToken(accessToken: String?) // null or empty argument clears the token // [!code ++]
```
Consequently, all calls to `setAccessTokenProvider` must be replaced with calls to `setAccessToken`:
```kotlin theme={"system"}
FlowxSdkApi.getInstance().setAccessTokenProvider(accessTokenProvider = { "accessTokenValue" }) // [!code --]
Flowx.getInstance().setAccessToken("accessTokenValue") // [!code ++]
```
To be able to query for substitution tags or media library items in order to display them in the `CloseModalProcessConfirmAlert`, the `closeModalFunc` lambda passed as a parameter when starting (i.e. `Flowx.getInstance.startProcess(...)`) or continuing (i.e. `Flowx.getInstance.continueProcess(...)`) is now scoped to the `CloseModalProcessScope` interface, which allows that.
```kotlin theme={"system"}
interface CloseModalProcessScope {
public fun replaceSubstitutionTag(string: String): String
public fun getMediaResourceUrl(key: String): String?
}
```
This restricts the usage of previously unrestricted exposed functions to only within the context of the `CloseModalProcessScope` receiver (i.e. they can now be called only from inside a @Composable running in this scope).
Methods within the `CloseModalProcessScope` are now called through the actual scope itself, rather than relying on `Flowx.getInstance()`, since they are no longer visible on the SDK instance.
```kotlin theme={"system"}
import ai.flowx.android.sdk.api.CloseModalProcessScope
@Composable
private fun ProcessContent(
uiState: ProcessViewModel.UiState,
onProcessEnded: (() -> Unit)? = null,
onCloseProcessModalFunc: ((processName: String) -> Unit)? = null, // [!code --]
onCloseProcessModalFunc: (CloseModalProcessScope.(processName: String) -> Unit)? = null, // [!code ++]
) {
when {
!uiState.projectId.isNullOrBlank() && !uiState.processName.isNullOrBlank() -> {
Flowx.getInstance().startProcess(
projectId = uiState.projectId,
processName = uiState.processName,
isModal = true,
onProcessEnded = { onProcessEnded?.invoke() },
closeModalFunc = { processName -> onCloseProcessModalFunc?.invoke(processName) }, // [!code --]
closeModalFunc = { processName -> onCloseProcessModalFunc?.invoke(this, processName) }, // [!code ++]
).invoke()
}
!uiState.processUuid.isNullOrBlank() -> {
Flowx.getInstance().continueProcess(
processUuid = uiState.processUuid,
isModal = true,
onProcessEnded = { onProcessEnded?.invoke() },
closeModalFunc = { processName -> onCloseProcessModalFunc?.invoke(processName) }, // [!code --]
closeModalFunc = { processName -> onCloseProcessModalFunc?.invoke(this, processName) }, // [!code ++]
).invoke()
}
}
}
```
When using it, an approach could be this:
```kotlin ProcessActivity.kt theme={"system"}
setContent {
var closeModalProcessScope by remember { mutableStateOf(null) }
val showCloseModalProcessAlert = remember { mutableStateOf(false) }
ProcessContent(
...
onCloseProcessModalFunc = { processName ->
closeModalProcessScope = this
showCloseModalProcessAlert.value = true
},
)
closeModalProcessScope?.CloseModalProcessConfirmAlert(show = showCloseModalProcessAlert)
}
@Composable
private fun CloseModalProcessScope.CloseModalProcessConfirmAlert(show: MutableState) {
if (show.value) {
AlertDialog(
...
text = { Text(replaceSubstitutionTag("@@close_message")) } // `replaceSubstitutionTag` is now accessible through the `CloseModalProcessScope` scope
)
}
}
```
Update the related imports:
```kotlin theme={"system"}
import ai.flowx.android.sdk.ui.components.custom.CustomComponentsProvider // [!code --]
import ai.flowx.android.sdk.api.custom.components.CustomComponentsProvider // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.CustomComposable // [!code --]
import ai.flowx.android.sdk.api.custom.components.CustomComponent // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.CustomComposableComponent // [!code --]
import ai.flowx.android.sdk.ui.components.custom.CustomView // [!code --]
import ai.flowx.android.sdk.ui.components.custom.CustomViewComponent // [!code --]
import ai.flowx.android.sdk.ui.components.custom.CustomComponentAction // [!code --]
import ai.flowx.android.sdk.api.custom.components.CustomComponentAction // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.FxEnumerationItem // [!code --]
import ai.flowx.android.sdk.api.custom.components.FxEnumeration // [!code ++]
import ai.flowx.android.sdk.api.custom.components.CustomComponentScope // [!code ++]
```
The new class hierarchy structure is as follows:
```kotlin v4.0.25 theme={"system"}
interface CustomComponentsProvider {
fun provideCustomComposableComponent(): CustomComposableComponent?
@Deprecated(...) fun provideCustomViewComponent(): CustomViewComponent? = null
}
interface CustomComposableComponent {
fun provideCustomComposable(componentIdentifier: String): CustomComposable?
}
interface CustomComposable {
@Deprecated(...) val isDefined: Boolean
val composable: @Composable () -> Unit
fun populateUi(data: Any?)
fun populateUi(actions: Map)
fun validate(): Boolean = true
fun saveData(): JSONObject? = null
}
@Deprecated(...)
interface CustomViewComponent {
@Deprecated(...) fun provideCustomView(componentIdentifier: String): CustomView
}
@Deprecated(...)
interface CustomView {...}
```
```kotlin v9.0.0 theme={"system"}
interface CustomComponentsProvider {
fun provideCustomComponent(componentIdentifier: String): CustomComponent?
}
interface CustomComponent {
val composable: @Composable CustomComponentScope.() -> Unit
fun populateUi(data: Any?)
fun populateUi(actions: Map)
fun validate(): Boolean = true
fun saveData(): JSONObject? = null
}
```
The structural changes include:
* The `CustomComposable` class has been renamed to `CustomComponent`.
* All deprecated properties, methods, and interfaces have been removed. Support for the Android classical View system has been completely discontinued.
* The `provideCustomComposableComponent()` method within `CustomComponentsProvider` has been replaced with `fun provideCustomComponent(): CustomComponent?`.
* The `CustomComposableComponent` class has been removed.
* The provided @Composable function passed to the `composable` property of the `CustomComponent` interface can now only exist and be called within the context of a `CustomComponentScope` receiver.
```kotlin theme={"system"}
interface CustomComponent {
val composable: @Composable () -> Unit // [!code --]
val composable: @Composable CustomComponentScope.() -> Unit // [!code ++]
}
```
```kotlin theme={"system"}
interface CustomComponentScope {
fun executeAction(action: CustomComponentAction, params: JSONObject? = null)
fun replaceSubstitutionTag(string: String): String
fun getMediaResourceUrl(key: String): String?
suspend fun getEnumeration(name: String, parentName: String? = null): FxEnumeration?
}
```
This restricts the usage of previously unrestricted exposed functions to only within the context of the `CustomComponentScope` receiver (i.e., they can now be called only from within a custom component implementation).
Methods within the `CustomComponentScope` are now called through the actual scope itself, rather than relying on `Flowx.getInstance()`, since they are no longer visible on the SDK instance.
```kotlin theme={"system"}
Flowx.getInstance().executeAction(...) // [!code --]
flowxScope.executeAction(...) // [!code ++]
Flowx.getInstance().replaceSubstitutionTag(...) // [!code --]
flowxScope.replaceSubstitutionTag(...) // [!code ++]
Flowx.getInstance().getMediaResourceUrl(...) // [!code --]
flowxScope.getMediaResourceUrl(...) // [!code ++]
Flowx.getInstance().getEnumeration(...) // [!code --]
flowxScope.getEnumeration(...) // [!code ++]
```
Consequently, the following changes should be made to access the scope within the custom component ViewModel:
```kotlin MyCustomComponentViewModel.kt theme={"system"}
class MyCustomComponentViewModel() : ViewModel() {
private lateinit var flowxScope: CustomComponentScope
fun setFlowxScope(scope: CustomComponentScope) {
flowxScope = scope
}
fun executeSomeRealAction() {
actions["someRealAction"]?.let {
if (this@MyCustomComponentViewModel::flowxScope.isInitialized) {
flowxScope.executeAction(
action = it,
params = JSONObject() // e.g. JSONObject("{\"someParameter\": \"someValue\"}")
)
}
}
}
}
```
```kotlin MyCustomComponent.kt theme={"system"}
@Composable
private fun CustomComponentScope.MyCustomComponent(
viewModel: MyCustomComponentViewModel
) {
viewModel.setFlowxScope(this@MyCustomComponent)
// here goes the rest of the UI implementation
}
```
* The `CustomComponentAction` is no longer a `data class` as before. It is now an `interface`.
The exposed data has been reduced to the maximum required for executing the action:
```kotlin v4.0.25 theme={"system"}
data class CustomComponentAction(
internal val actionName: String?,
internal val type: ActionType?,
internal var tokenUuid: String?,
internal var uiActionFlowxUuid: String,
internal val context: String,
internal val params: Params?,
internal val keys: List?,
internal val customBody: JsonElement?,
internal val collectionItemData: JsonObject?,
internal val componentTemplateConfigId: Int,
)
```
```kotlin v9.0.0 theme={"system"}
interface CustomComponentAction {
val name: String
val uiTemplateId: Int
val uiTemplateContext: String
val uiTemplateReusableContext: String?
}
```
* When querying for an enumeration by calling the `CustomComponentScope.getEnumeration(...)` method, the returned type has changed from `List` to `FxEnumeration`
```kotlin v4.0.25 theme={"system"}
data class FxEnumerationItem(
val type: String? = null,
val order: Int? = null,
val childContentDescription: ChildContentDescription? = null,
val code: String? = null,
val content: String? = null
) {
data class ChildContentDescription(
val name: String? = null
)
}
```
```kotlin v9.0.0 theme={"system"}
interface FxEnumeration {
val name: String
val items: List
val parentName: String?
interface Item {
val code: String
val content: String?
val childNomenclatorName: String?
val order: Int
}
}
```
These changes are reflected in an actual implementation as shown below:
```kotlin v4.0.25 expandable theme={"system"}
import ai.flowx.android.sdk.FlowxSdkApi
import ai.flowx.android.sdk.ui.components.custom.CustomComponentAction
import ai.flowx.android.sdk.ui.components.custom.CustomComponentsProvider
import ai.flowx.android.sdk.ui.components.custom.CustomComposable
import ai.flowx.android.sdk.ui.components.custom.CustomComposableComponent
import ai.flowx.android.sdk.ui.components.custom.CustomView
import ai.flowx.android.sdk.ui.components.custom.CustomViewComponent
import ai.flowx.external.android.template.app.R
import android.content.Context
import android.util.AttributeSet
import android.view.View
import android.widget.Button
import android.widget.LinearLayout
import android.widget.TextView
import android.widget.Toast
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LifecycleRegistry
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelStore
import androidx.lifecycle.ViewModelStoreOwner
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.compose.viewModel
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.launch
import org.json.JSONObject
class CustomComponentsProviderImpl : CustomComponentsProvider {
override fun provideCustomComposableComponent(): CustomComposableComponent? {
return object : CustomComposableComponent {
override fun provideCustomComposable(componentIdentifier: String): CustomComposable =
object : CustomComposable {
val data: MutableStateFlow = MutableStateFlow(null)
var actions: Map = emptyMap()
override val isDefined: Boolean
get() = when (componentIdentifier) {
"myCustomComponent" -> true // NOTE: set this to false to use the legacy view system instead of compose, which is mainstream now
else -> false
}
override val composable: @Composable () -> Unit = when (componentIdentifier) {
"myCustomComponent" -> { {
val viewModel = remember { MyCustomComponentViewModel(data, actions) }
MyCustomComponent(viewModel = viewModel)
} }
else -> { {} }
}
override fun populateUi(data: Any?) {
this.data.value = data
}
override fun populateUi(actions: Map) {
this.actions = actions
}
// Optional override, defaults to `true`.
override fun validate(): Boolean = true
// Optional override, defaults to `null`.
override fun saveData(): JSONObject? = null
}
}
}
override fun provideCustomViewComponent(): CustomViewComponent? {
return object : CustomViewComponent {
override fun provideCustomView(componentIdentifier: String) = object : CustomView {
val data: MutableStateFlow = MutableStateFlow(null)
var actions: Map = emptyMap()
override val isDefined: Boolean
get() = when (componentIdentifier) {
"myCustomComponent" -> true // NOTE: set the compose equivalent component to false to use the legacy view system instead of compose (which is mainstream now)
else -> false
}
override fun getView(context: Context): View = when (componentIdentifier) {
"myCustomComponent" -> myCustomComponent(context, data, actions)
else -> View(context)
}
override fun populateUi(data: Any?) {
this.data.value = data
}
override fun populateUi(actions: Map) {
this.actions = actions
}
}
}
}
}
@Composable
private fun MyCustomComponent(
viewModel: MyCustomComponentViewModel = viewModel()
) {
val firstName by viewModel.firstName.collectAsState()
val lastName by viewModel.lastName.collectAsState()
val dateOfBirth by viewModel.dateOfBirth.collectAsState()
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
) {
Text(
text = "Compose Custom Component",
style = MaterialTheme.typography.titleLarge,
)
Spacer(modifier = Modifier.height(16.dp))
Column(
modifier = Modifier
.background(color = Color(0x80FFFF00))
.padding(16.dp)
.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(4.dp)
) {
Text(
text = "Client: $firstName $lastName",
style = MaterialTheme.typography.titleMedium,
)
Text(
text = "Date of Birth: $dateOfBirth",
style = MaterialTheme.typography.titleMedium,
)
}
val context = LocalContext.current
TextButton(
onClick = {
// enable and adjust values to test the action (which was prior defined in the process)
// viewModel.executeSomeRealAction()
Toast.makeText(context, "Define action in the process and enable its execution in the code", Toast.LENGTH_LONG).show()
}
) {
Text(text = "Confirm")
}
}
}
private fun myCustomComponent(
context: Context,
data: MutableStateFlow = MutableStateFlow(null),
actions: Map = emptyMap(),
): View {
return CustomComponentView(context = context, data = data, actions = actions)
}
class CustomComponentView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0,
data: MutableStateFlow = MutableStateFlow(null),
actions: Map = emptyMap(),
) : LinearLayout(context, attrs, defStyleAttr), ViewModelStoreOwner, LifecycleOwner {
private val registry = LifecycleRegistry(this)
private var job: Job? = null
private lateinit var client: TextView
private lateinit var dateOfBirth: TextView
private val viewModel: MyCustomComponentViewModel by lazy {
ViewModelProvider(
store = viewModelStore,
factory = object : ViewModelProvider.Factory {
override fun create(modelClass: Class): T {
@Suppress("UNCHECKED_CAST")
return MyCustomComponentViewModel(data, actions) as T
}
}
)[MyCustomComponentViewModel::class.java]
}
init {
initView()
}
private fun initView() {
View.inflate(context, R.layout.my_custom_component, this)
client = findViewById(R.id.tvClient)
dateOfBirth = findViewById(R.id.tvDateOfBirth)
findViewById
Update the related imports:
```kotlin theme={"system"}
import ai.flowx.android.sdk.ui.components.custom.CustomComposableStepperHeader // [!code --]
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderData // [!code --]
import ai.flowx.android.sdk.ui.components.custom.ComposableStepperHeader // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeader // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderProvider // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeaderProvider // [!code ++]
```
The new class hierarchy structure is as follows:
```kotlin v4.0.25 theme={"system"}
interface CustomStepperHeaderProvider {
fun provideCustomComposableStepperHeader(): CustomComposableStepperHeader?
}
interface CustomComposableStepperHeader {
fun provideComposableStepperHeader(): ComposableStepperHeader
}
interface ComposableStepperHeader {
val composable: @Composable (data: CustomStepperHeaderData) -> Unit
}
interface CustomStepperHeaderData { ... }
```
```kotlin v9.0.0 theme={"system"}
interface CustomStepperHeaderProvider {
fun provideCustomStepperHeader(): CustomStepperHeader?
}
interface CustomStepperHeader {
val composable: @Composable (data: Data) -> Unit
interface Data { ... }
}
```
The structural changes include:
* The `ComposableStepperHeader` class has been renamed to `CustomStepperHeader`.
* The `CustomStepperHeaderData` class has been moved under the `CustomStepperHeader` and renamed to `Data`.
* The `provideCustomComposableStepperHeader()` method within `CustomStepperProvider` has been replaced with `fun provideCustomStepperHeader(): CustomStepperHeader?`.
* The `CustomComposableStepperHeader` class has been removed.
These changes are reflected in an actual implementation as shown below:
```kotlin diff v4.0.25..v9.0.0 focus={2,5,10,14,16,18,22,23,26} theme={"system"}
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderProvider // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeaderProvider // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.ComposableStepperHeader // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeader // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.CustomComposableStepperHeader // [!code --]
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderData
class CustomStepperHeaderProviderImpl : CustomStepperHeaderProvider {
override fun provideCustomComposableStepperHeader(): CustomComposableStepperHeader? { // [!code --]
return object : CustomComposableStepperHeader { // [!code --]
override fun provideComposableStepperHeader(): ComposableStepperHeader { // [!code --]
override fun provideCustomStepperHeader(): CustomStepperHeader? { // [!code ++]
return object : ComposableStepperHeader { // [!code --]
return object : CustomStepperHeader { // [!code ++]
override val composable: @Composable (data: CustomStepperHeaderData) -> Unit // [!code --]
override val composable: @Composable ((CustomStepperHeader.Data) -> Unit) // [!code ++]
get() = @Composable { data ->
// custom header implementation
}
}
}
} // [!code --]
} // [!code --]
}
```
For runtime environment changes, use the `changeEnvironment` method available on the SDK instance.
```kotlin theme={"system"}
fun updateConfig(config: SdkConfig) // [!code --]
fun changeEnvironment(baseUrl: String, imageBaseUrl: String, enginePath: String) // [!code ++]
```
Do not change the environment while displaying a running processWhen changing the environment, ensure the access token is updated properly
```kotlin diff v4.0.25..v9.0.0 theme={"system"}
fun startProcess(
workspaceId: String, // [!code ++]
projectId: String,
processName: String,
params: JSONObject? = null,
isModal: Boolean = false,
onProcessEnded: (() -> Unit)? = null,
closeModalFunc: (CloseModalProcessScope.(processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
The `workspaceId` is the identifier of the workspace that contains the project and process to be started
```kotlin diff v4.0.25..v9.0.0 theme={"system"}
fun setupTheme(
workspaceUuid: String, // [!code ++]
themeUuid: String,
fallbackThemeJsonFileAssetsPath: String? = null,
appearance: Flowx.ThemeAppearance = Flowx.ThemeAppearance.LIGHT, // or DARK
@MainThread onCompletion: () -> Unit,
)
```
The `workspaceId` is the identifier of the workspace that contains the theme to be loaded
## iOS SDK migration guide
### SDK API changes
#### Start process
The start process API require a `workspaceId`.
```swift theme={"system"}
public func startProcess(navigationController: UINavigationController,
workspaceId: String,
projectId: String,
name: String,
params: [String: Any]?,
isModal: Bool = false,
showLoader: Bool = false,
onProcessEnded: (() -> Void)? = nil)
```
```swift theme={"system"}
public func startProcess(tabBarController: UITabBarController,
workspaceId: String,
projectId: String,
name: String,
params: [String: Any]?,
isModal: Bool = false,
showLoader: Bool = false,
onProcessEnded: (() -> Void)? = nil)
```
#### Setup theme
The setup theme API requires a `workspaceId`.
```swift theme={"system"}
public func setupTheme(withUuid uuid: String,
workspaceId: String,
localFileUrl: URL? = nil,
appearance: SwiftUI.ColorScheme? = .light,
completion: (() -> Void)?)
```
# FlowX.AI 5.0.0 Release Notes
Source: https://docs.flowx.ai/release-notes/v5.x/v5.0.0-july-2025/v5.0.0-july-2025
Latest features, improvements, and bug fixes in our newest release
This release includes the following features in Tech Preview. We encourage you to try them out and share your feedback to help us improve them. Please note that Tech Preview features may change before final release.
**What's new? 🆕**
🆕 [**Workspaces (Multi-Tenant Architecture)**](#workspaces-multi-tenant-architecture)\
🆕 [**Project Data Model (PDM)**](#project-data-model-pdm)\
🆕 [**FlowX.AI Database**](#flowxai-database)\
🆕 [**Multi Select UI Component**](#multi-select-ui-component)\
🆕 [**Library-to-Library Dependencies**](#library-to-library-dependencies)\
🆕 [**Data Mappers**](#data-mappers)\
🆕 [**Reusable Resources**](#reusable-resources)\
🆕 **Files in Integration Designer**\
🆕 [**Rendering improvements**](#rendering-improvements)
### **Workspaces (Multi-Tenant Architecture)**

FlowX.AI 5.0 introduces Workspaces, enabling organizations to manage multiple business lines, verticals, or countries within a single FlowX.AI instance while maintaining complete data isolation.
Logical separation of business contexts with shared infrastructure
Role-based access control (RBAC) and Access Control Lists (ACLs) with workspace-specific permissions
Complete logical isolation between workspaces while enabling controlled resource sharing
Simplified permission management through groups and workspace-specific roles
Onboard new business verticals in days instead of weeks with shared platform capabilities
Implement fine-grained access control with workspace-specific roles and permissions
Centralize platform upgrades, maintenance, and monitoring across all business units
Separate workspaces for different countries/regions with shared global processes
Independent workspaces for retail, corporate, and investment banking divisions
Isolate processes subject to different regulatory requirements
Enable different teams to work independently while sharing common resources
**Major Infrastructure Changes**: Workspaces introduces SpiceDB integration and new database schemas for multi-tenant architecture.
**Key Changes:**
* **SpiceDB Integration**: New permission management system requiring deployment
* **Database Migration**: Schema updates for workspace support
* **User Storage**: Only information about FlowX.AI Designer users is stored in FlowX.AI. The stored user data is limited to: unique identifier, username, first name, last name, and email address.
* **Default Workspace**: All the projects and libraries are migrated to default workspace
**Backward Compatibility**: All existing functionality preserved in default workspace
**New Login Flow**: After authentication, select your workspace before accessing FlowX.AI Designer. Once inside a workspace, everything works as before.
**What's New:**
* **Workspace Selection**: Choose workspace after login
* **Resource Isolation**: Projects, libraries, themes are workspace-specific
* **Enhanced Permissions**: Fine-grained access control with user groups and ACLs
* **Workspace Management**: Create and manage workspaces (admin users)
**What Stays the Same:**
* Process design and configuration
* UI Designer capabilities
* Integration patterns
* All existing FlowX.AI Designer features
**Strategic Transformation**: Workspaces enables enterprise multi-tenant architecture with independent business unit governance while sharing platform capabilities.
**Business Impact:**
* **Faster time-to-market** for new business verticals
* **Enhanced compliance** with workspace-specific controls
* **Improved governance** with fine-grained access management
**Enterprise Benefits:**
* Business unit autonomy with shared platform
* Regulatory compliance through data isolation
* Centralized upgrades and maintenance
* Cross-business unit resource sharing when appropriate
### **Project Data Model (PDM)**

The new Project Data Model feature enables you to define and manage data types at the project level, which can then be reused across all processes within your project.
Define data types once at the project level and reuse them across multiple processes
Changes to PDM data types automatically propagate to all referencing processes
Configure sensitive data and reporting settings at the project level
Use data types from libraries in your Project Data Model
Define common data types like Customer, Product, or Document once instead of recreating them in each process
Update a data type in one place and have changes apply everywhere it's used
Enforce consistent naming, structure, and governance across your application
Create new processes faster by leveraging pre-defined data types

**Infrastructure Impact**: PDM has minimal infrastructure impact - it's a design-time feature that improves development efficiency without affecting runtime resources.
**No deployment changes required** - PDM is part of the design platform, not runtime**Backward compatible** - Existing processes continue to work unchanged
**Game Changer**: Define data types once at project level, use everywhere. No more recreating Customer or Order objects in every process.
**How to Use PDM:**
1. Navigate to Project → Config → Data Model
2. Define your business entities (Customer, Product, etc.)
3. Set governance rules (sensitive data, reporting)
4. Use these types in any process within the project
**Best Practices:**
* Start with core business entities
* Use clear, consistent naming
* Mark sensitive fields appropriately
* Leverage library data types when available
**Strategic Value**: PDM transforms how your organization manages business data definitions. Define business entities once and ensure consistency across all processes and teams.
**Business Benefits:**
* **Enhanced compliance** through centralized governance and data sensitivity controls
* **Reduced errors** from consistent data definitions
**ROI Indicators:**
* Development Efficiency: Measure reduction in process creation time
* Error Reduction: Track fewer data-related production issues
* Maintenance Cost: Monitor time spent on data structure updates
***
### **FlowX.AI Database**
FlowX.AI Database is a new persistence layer that enables you to store and retrieve data across different processes and applications, without relying on external systems.
Store data that persists beyond process instances
Find, insert, and manipulate data using familiar MongoDB operations
Seamlessly integrate with workflows through Data Source nodes
Organize your data in structured collections
Enable communication and data sharing between different process instances
Store operational data within FlowX.AI instead of building custom connectors
Build dashboards, caching solutions, and other applications that require persistent data
Keep your data within the FlowX.AI ecosystem for improved security and simplicity

FlowX.AI Database integrates directly into the existing Integration Designer as a new Data Source type alongside RESTful System, making it easy to create and manage database collections without learning new interfaces.
**Infrastructure Planning Required**: FlowX.AI Database creates additional MongoDB collections and requires infrastructure planning for storage, monitoring, and backup procedures.
New microservice: NoSQL DB Runner. Check the [setup guide](../../5.0-tech-preview/setup-guides/nosql-db-runner) for more details.
**Key Considerations:**
* **Storage Planning**: Monitor usage as processes adopt internal database (plan for 20-30% increase)
* **Performance Monitoring**: Set up alerts for FlowX.AI Database query performance
* **Backup Strategy**: Include FlowX.AI Database collections in backup procedures
* **Connection Pooling**: Additional connection pools for database operations
* **Memory**: Additional 256MB-512MB per FlowX.AI instance for database operations
**New Integration Option**: FlowX.AI Database appears as a new Data Source type in Integration Designer, right alongside RESTful System.
**When to Use FlowX.AI Database:**
* Customer data lookup across processes
* Shared configuration and reference data
* Process-to-process communication
* Caching frequently accessed data
* Temporary operational data storage
**How to Implement:**
1. Add Data Source node to your process
2. Select "FlowX.AI Database" as type
3. Configure collection and operations
4. Use familiar MongoDB syntax (find, insert, update)
**When NOT to Use**: Don't replace your core business systems. FlowX.AI Database is perfect for operational data, caching, and inter-process communication - but your CRM, ERP, and other systems of record should remain your primary data sources.
**Strategic Value**: FlowX.AI Database enables new operational patterns that were previously complex or impossible. It's not about replacing your core systems, but about enabling new ways to orchestrate business processes.
**New Business Capabilities:**
* **Cross-process workflows**: Loan application → Credit check → Approval across different process instances
* **Real-time dashboards**: Operational data for business monitoring without system integration
* **Agile experimentation**: Test new business rules without impacting core systems
* **Process orchestration**: Complex business flows spanning multiple departments
**ROI Considerations:**
* **Time to Market**: Faster implementation of new business processes
* **Agility**: Rapid prototyping and testing of business ideas
**Use FlowX.AI Database when:**
* Data is operational and process-specific (not master data)
* You need rapid implementation without IT system changes
* Process instances need to communicate with each other
* You're prototyping new business capabilities
***
### **Multi Select UI Component**

The new Multi Select component allows users to choose multiple options from a predefined list, expanding upon the existing single Select component to support multi-value scenarios.
Users can select multiple options from dropdown lists, with values stored as arrays
Show selections as chips, comma-separated lists, or custom formats
Configure maximum number of selectable options to control user input
Built-in search functionality to filter through large option lists
Allow users to select multiple skills, qualifications, or areas of expertise
Enable selection of multiple categories, tags, or classification options
Let customers choose multiple product features, services, or add-ons
Capture user preferences where multiple options can be active simultaneously

Configure Multi Select components with the same ease as other form elements. Set maximum selections, display formats, search options, and validation rules through the familiar UI Designer interface.
* **Max. Options Selectable**: Limit the number of selections
* **Show selections**: Choose how selected items are displayed
* **Search for options**: Enable filtering within large lists
* **Has Clear**: Allow users to clear all selections at once
* **Validation rules**: Min/max selections, required validations
**No Infrastructure Impact**: Multi Select is a pure UI component with no backend requirements. It works with existing form handling and data storage mechanisms.**Zero deployment overhead** - Component is part of the UI framework upgrade**Existing data handling** - Uses standard array storage, no schema changes needed
**Easy Integration**: Multi Select works just like other form elements in UI Designer. Drag, drop, configure - no new learning curve required.
**Common Use Cases:**
1. **Skills Selection**: Job applications, team member profiles, contractor skills
2. **Product Features**: Insurance coverage options, software licensing features
3. **Categories & Tags**: Document classification, customer segmentation
**Key Configuration:**
* **Max selections**: Control input limits
* **Display format**: Chips, lists, custom
* **Search**: Filter large option sets
* **Clear all**: Easy reset functionality
* **Validation**: Min/max rules
**User Experience Impact**: Multi Select eliminates user frustration in scenarios where single selection doesn't match real-world needs. This improves data quality and user satisfaction.
**Before vs After:**
* ❌ **Before**: "I can only select one skill, but I have multiple certifications"
* ✅ **After**: "Perfect! I can select all my relevant skills at once"
**Business Process Examples:**
* **Employee Onboarding**: Select multiple skills, certifications, department access
* **Product Configuration**: Select multiple features, add-ons, support packages
* **Customer Preferences**: Select multiple communication channels, product interests
**Analytics Benefit**: Multi-select data provides richer analytics. Instead of knowing a customer chose "Primary Interest: Technology," you know they selected "AI, Cloud Computing, Cybersecurity, Mobile Development" - much more actionable for business intelligence.
***
### **Library-to-Library Dependencies**

FlowX.AI 5.0 introduces the ability for libraries to depend on other libraries, enabling hierarchical dependency structures and more sophisticated modular architectures.
Create complex dependency trees with multiple levels of library-to-library relationships
Projects automatically gain access to resources from the entire dependency hierarchy
Single-version constraint ensures consistency across the dependency tree
Built-in validation prevents circular dependencies and version conflicts
Break down complex functionality into smaller, focused libraries that can depend on each other
Enable different teams to own and maintain specific libraries while building on shared foundations
Create country-specific or domain-specific libraries that extend common base libraries
Organize libraries hierarchically, reducing complexity and improving maintainability

```
Mortgage Project
├── Enums Library (1.6.0)
├── Integrations Library (2.5.0)
│ ├── Commons Library (1.1.0)
│ └── Enums Library (1.6.0) # Transitive dependency
└── Subprocesses Library (1.3.0)
└── Enums Library (1.6.0) # Transitive dependency
```
In this example, both Integrations Library and Subprocesses Library depend on other libraries, creating a multi-level hierarchy that the Mortgage Project can leverage.
**Full Backwards Compatibility**: FlowX.AI 5.0 maintains full backwards compatibility with existing project-to-library dependencies from FlowX.AI 4.x. All existing dependencies will continue to work without modification.
**Upgrade Process:**
1. **Existing dependencies** will be automatically migrated
2. **New library dependency features** become available immediately
3. **No breaking changes** to existing functionality
4. **Enhanced validation** may catch previously undetected issues
**Post-Migration Required**: After the lib2lib migration is executed, you must clear the cache. This is necessary because a new field is added to the build mongo document.
**Cache Clearing Steps:**
1. Complete the lib2lib migration process
2. Clear the application cache to ensure the new build document fields are properly recognized
3. Verify that library-to-library dependencies are functioning correctly
**Key Changes:**
* **Build Export Changes**: Build exports now automatically include entire dependency trees (larger packages but self-contained)
* **Dependency Validation**: Build process now checks for dependency conflicts (enhanced validation may catch previously undetected issues)
* **Deployment Consistency**: Single-version constraint prevents runtime conflicts (more predictable deployments)
**Enhanced Organization**: You can now create more sophisticated library structures where specialized libraries build upon common foundations. This reduces duplication and improves consistency.
**How It Works:**
1. Navigate to Library → Config → Dependencies
2. Add other libraries as dependencies
3. FlowX.AI validates for conflicts automatically
4. Resources from all dependency levels become available
**Best Practices:**
* Plan your library hierarchy before implementation
* Keep dependencies focused and purposeful
* Avoid circular dependencies
* Use semantic versioning consistently
* Document dependency relationships clearly
**Example**: Create a "US Banking Library" that depends on "Global Banking Library" and "US Compliance Library". This way, US-specific processes get both global banking functionality and local compliance requirements automatically.
**Enterprise Architecture**: Library-to-Library Dependencies enable sophisticated organizational structures where different teams can own specific business domains while building on shared foundations.
**Enterprise Use Cases:**
**Multi-Country Operations:**
Global Insurance Company: US-specific library depends on Global Compliance library
```
US Insurance Library → Global Compliance Library → Base Insurance Library
```
**Product Line Specialization:**
Bank: Mortgage processes use specialized libraries that extend common banking operations
```
Mortgage Library → Lending Library → Core Banking Library
```
**Business Impact:**
* **Team Autonomy**: Teams work independently while leveraging shared assets
* **Faster Innovation**: New products build on proven foundation components
* **Risk Reduction**: Tested, validated components reduce implementation risk
**Change Management**: This capability requires coordination between teams. Establish clear ownership models, communication protocols, and upgrade procedures before implementing complex dependency hierarchies.
***
### **Data Mappers**
Data Mappers enable users to visually map data transfers between components with intuitive drag-and-drop functionality while maintaining full backward compatibility with existing implementations.
Drag-and-drop interface for mapping data between source and destination components
Seamlessly connect processes, subprocesses, workflows, and business rules
Define input/output parameters with predefined and flexible parameter types
Choose between new Data Mapper or existing implementation methods
Visual interface eliminates complex configuration syntax and reduces integration errors
Define parameters once and reuse across multiple components and processes
Centralized parameter management with clear data flow visibility
Optional adoption with full backward compatibility ensures smooth transition
Map data between parent processes and subprocesses (sync/async)
Connect processes with Integration Designer workflows
Pass data to and from business rule executions
Map data between workflow nodes (REST endpoints, data persistence)
**Zero Infrastructure Impact**: Data Mappers is a design-time feature that enhances the FlowX.AI Designer interface without requiring additional infrastructure or deployment changes.
**Full Backward Compatibility**: All existing data transfer mechanisms (like `append to parent process` or `output.[outputKey]`) continue to work unchanged. Teams can adopt Data Mappers at their own pace.
**Key Points:**
* **No new microservices** - Enhancement to existing designer interface
* **No runtime changes** - Data mapping occurs at design time
* **Existing configurations preserved** - Zero impact on current implementations
* **Optional adoption** - Teams choose when and where to use new functionality
**Game Changer for Integration**: No more complex syntax for data transfers. Visual drag-and-drop interface makes component integration intuitive and error-free.
**How to Use Data Mappers:**
1. **Define Parameters**: Set input/output parameters on Start/End nodes
2. **Choose Implementation**: Select "Data Mapper" or "Current" method
3. **Visual Mapping**: Drag source parameters to destination parameters
4. **Save Configuration**: Store mappings for reuse and maintenance
**When to Use:**
* **Call Activities**: Passing data between parent and child processes
* **Integration Workflows**: Connecting with external systems
* **Complex Data Flows**: When visual mapping improves clarity
* **Team Collaboration**: When multiple people work on integration logic
**Parameter Changes**: When you modify input/output parameters, existing mappings must be manually updated. Changes don't automatically propagate to avoid unintended data flow modifications.
**Strategic Value**: Data Mappers transforms technical integration tasks into visual, business-friendly workflows. Non-technical stakeholders can now understand and validate data flows between business processes.
**Business Impact:**
* **Reduced Errors**: Visual mapping prevents data integration mistakes that cause process failures
* **Faster Development**: Intuitive interface accelerates process configuration and testing
* **Better Documentation**: Visual data flows serve as living documentation of business logic
* **Team Collaboration**: Business and technical teams can discuss data flows using the same visual interface
**ROI Indicators:**
* **Development Speed**: Measure reduction in integration configuration time
* **Error Rate**: Track fewer data-related production issues
* **Team Efficiency**: Monitor cross-functional collaboration improvements
* **Process Quality**: Assess improvement in first-time-right deployments
**Use Cases by Industry:**
* **Banking**: Loan application data flowing from customer intake → credit check → approval process
* **Insurance**: Claim data mapping from initial report → investigation → settlement
* **Manufacturing**: Order data flowing from sales → production planning → fulfillment
***
### **Reusable Resources**

FlowX.AI 5.0 introduces Reusable Resources, a revolutionary new section that eliminates repetitive development work by enabling you to create and manage both UI Templates and Business Functions that can be used across multiple processes and projects.
Create JavaScript or Python functions once and use them across multiple processes via Business Rule actions
Define input/output parameters with full project data model integration and testing capabilities
Test functions with sample data in real-time before deployment to ensure accuracy
Changes to functions automatically update all instances across your application
Design UI components once and instantiate them across multiple User Tasks with automatic data binding
Manage all templates from the new Reusable Resources section alongside Reusable Functions
Templates work seamlessly across different platforms and channels
Define UI actions within templates with two scenarios: template-defined actions or form-centric data handling
Stop recreating the same business logic and UI patterns across different processes - build once, use everywhere
Update functions and templates in one place to automatically affect all instances across your application
Replace scattered, inconsistent UI patterns with centrally managed, reusable components
Build new processes faster by leveraging pre-built, tested components instead of starting from scratch
**Customer Data Validation Function:**
* **Input**: firstName, lastName, email, phone
* **Logic**: Format validation, duplicate checking, data standardization
* **Output**: validatedCustomer object with formatted data
* **Usage**: Customer onboarding, profile updates, registration processes across all channels
**Credit Risk Assessment Function:**
* **Input**: applicationData, customerProfile, financialHistory
* **Logic**: Complex credit scoring algorithms, risk categorization, recommendation engine
* **Output**: riskScore, riskCategory, approvalRecommendation, requiredDocuments
* **Usage**: Loan applications, credit cards, mortgage processes, business lending
**Document Processing Function:**
* **Input**: documentFile, documentType, customerID
* **Logic**: OCR processing, data extraction, compliance validation
* **Output**: extractedData, validationStatus, complianceFlags
* **Usage**: KYC processes, claims processing, application reviews
**Personal Details Card Template:**
* **Root Component**: Card with professional styling
* **Contains**: Name, email, phone, address input fields with validation
* **UI Actions**: Save data, clear form, auto-populate from existing data
* **Usage**: Customer registration, profile updates, employee onboarding, contractor management
**Document Upload Section Template:**
* **Root Component**: Container with drag-and-drop functionality
* **Contains**: File upload area, progress indicators, document list, preview capabilities
* **UI Actions**: Upload documents, delete files, download copies, validate formats
* **Usage**: Loan applications, compliance documentation, claims submissions, HR processes
**Financial Summary Dashboard Template:**
* **Root Component**: Card with data visualization
* **Contains**: Balance displays, transaction history, chart components, action buttons
* **UI Actions**: Refresh data, export reports, drill-down details
* **Usage**: Account overviews, investment portfolios, expense tracking, budget management
**Minimal Infrastructure Impact**: Reusable Resources is primarily a design-time enhancement that leverages existing FlowX infrastructure with minimal additional overhead.
**Infrastructure Considerations:**
* **Execution Context**: Functions execute within existing process engine contexts - no additional runtime infrastructure required
**No New Microservices**: Features are integrated into existing FlowX.AI platform components
**Development Game Changer**: Access the new "Reusable Resources" section in FlowX.AI Designer - located alongside "Reusable Functions" - to eliminate 60-80% of repetitive development work.
**Key Capabilities:**
* **Data Model Support**: Full integration with Project Data Model (PDM)
* **Action Scenarios**: Template-defined actions assigned during instantiation OR form-centric actions handled by User Task
* **Omnichannel**: Templates work across web, mobile, and other channels
**Best Practices:**
* **Start with common patterns**: Identify frequently repeated business logic and UI components
* **Test thoroughly**: Use interactive testing for functions and preview mode for templates
* **Document usage**: Include clear descriptions and example use cases
**Revolutionary Business Impact**: Reusable Resources fundamentally changes how organizations approach process development, transforming from "build every time" to "build once, leverage everywhere."
**Strategic Business Value:**
* **Quality Assurance**: Dramatic reduction in defects through reusable, tested components
* **Maintenance Efficiency**: Update business rules once to instantly affect all processes
* **Team Productivity**: Developers focus on new business capabilities instead of repetitive development
* **Consistency**: Ensure uniform business rules and user experience across all touchpoints
**Industry Use Cases:**
* **Functions**: KYC validation, credit scoring, fraud detection, regulatory compliance checks
* **UI Templates**: Customer onboarding forms, document upload sections, account summary dashboards, loan application interfaces
* **Functions**: Premium calculations, risk evaluation, claims processing, policy validation
* **UI Templates**: Quote request forms, claims submission interfaces, policy comparison tables, agent dashboards
* **Functions**: Patient eligibility checks, treatment authorization, billing calculations, compliance validation
* **UI Templates**: Patient registration forms, appointment scheduling interfaces, medical history cards, provider dashboards
### **Rendering Improvements**
Improved performance, responsiveness, and customization options for data display and form organization
Streamlined navigation experience in both UI Designer and Process Designer with improved interface organization
Batch operations support for UI components, enabling simultaneous actions on multiple elements
Granular control over UI element editing based on user permissions with partial editing capabilities
Specialized input component for code entry
Advanced formatting capabilities for Input and Slider components
Enhanced switch component supporting both toggle and checkbox variants
Configure specific options as disabled while keeping them visible in dropdown lists
Configurable loading indicators for improved user experience during data operations
Advanced validation logic using dynamic computed expressions
New specialized button variant designed for file upload operations
Efficiently replicate styling across multiple UI components
Custom payload support for detailed user interaction tracking and business intelligence
Improved user experience when processes complete or terminate
Enhanced support for form elements within collection components
Streamlined template organization by consolidating functionality in Reusable Resources
## **Additional information**
Instructions for deploying FlowX.AI 5.0.0
Step-by-step guide for migrating from v4.7.x to v5.0.0
# Deployment guidelines v5.1.1
Source: https://docs.flowx.ai/release-notes/v5.x/v5.1.x-lts/deployment-guidelines-v5.1.1
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

## Upgrade overview
FlowX.AI 5.1.1 is a maintenance release for the 5.1.x LTS line. This release can be deployed as a direct upgrade from 5.1.0 with no breaking changes or configuration updates required.
**5.1.0 → 5.1.1**: Direct upgrade with no breaking changes
## Component versions
| Component | 5.1.1 | 5.1.0 | 5.0.0 | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 |
| -------------------------- | ----------- | ------- | ------ | ------- | ------ | ------ | ------ | ------- |
| **process-engine** | **9.64.3** | 9.63.0 | 9.29.2 | 8.24.1 | 8.23.3 | 8.23.2 | 8.22.3 | 8.21.11 |
| **admin** | **9.66.5** | 9.65.0 | 9.25.2 | 7.18.4 | 7.17.3 | 7.16.3 | 7.15.2 | 7.12.2 |
| **designer** | **9.159.5** | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **cms-core** | **9.36.3** | 9.35.0 | 9.21.2 | 5.11.1 | 5.10.3 | 5.9.2 | 5.8.2 | 5.5.1 |
| **scheduler-core** | **9.26.1** | 9.25.0 | 9.12.0 | 5.7.1 | 5.6.2 | 5.5.2 | 5.4.0 | 5.1.1 |
| **events-gateway** | **9.26.1** | 9.25.0 | 9.12.0 | 5.7.1 | 5.6.2 | 5.5.2 | 5.4.0 | 5.1.1 |
| **notification-plugin** | **9.29.1** | 9.28.0 | 9.14.2 | 6.8.1 | 6.7.2 | 6.6.2 | 6.5.0 | 6.2.1 |
| **document-plugin** | **9.35.1** | 9.34.0 | 9.17.2 | 6.10.1 | 6.9.2 | 6.8.2 | 6.7.0 | 6.4.1 |
| **task-management-plugin** | **9.34.2** | 9.33.0 | 9.14.2 | 7.9.2 | 7.8.2 | 7.7.2 | 7.6.0 | 7.3.1 |
| **data-search** | **9.23.1** | 9.22.0 | 9.12.1 | 4.7.1 | 4.6.2 | 4.5.2 | 4.4.0 | 4.1.1 |
| **audit-core** | **9.30.1** | 9.29.1 | 9.15.2 | 6.8.1 | 6.7.2 | 6.6.2 | 6.5.0 | 6.1.1 |
| **advancing-controller** | **9.25.1** | 9.24.0 | 9.11.0 | 4.7.1 | 4.6.2 | 4.6.2 | 4.4.0 | 4.1.1 |
| **integration-designer** | **9.50.0** | 9.49.1 | 9.26.2 | 2.16.1 | 2.15.3 | 2.14.2 | 2.13.0 | 2.9.0 |
| **application-manager** | **9.73.6** | 9.72.0 | 9.27.3 | 2.23.1 | 2.22.3 | 2.21.2 | 2.2 | |
| **runtime-manager** | **9.73.6** | 9.72.0 | 9.27.3 | 2.23.1 | 2.22.3 | 2.21.2 | 2.20.2 | 2.17.2 |
| **data-sync** | **9.22.1** | 9.21.0 | 9.11.0 | 2.10.2 | 2.9.2 | 2.8.1 | 2.7.1 | 2.4.1 |
| **authorization-system** | **9.34.2** | 9.33.0 | 9.14.2 | - | - | - | - | - |
| **nosql-db-runner** | **9.22.1** | 9.21.0 | 9.11.0 | - | - | - | - | - |
### Embedded components
* **SpiceDB**
* **DGraph**
### Renderers
| Component | 5.1.1 | 5.1.0 | 5.0.0 | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 |
| ----------------------------- | ----------- | ------- | ------ | ------- | ------ | ------ | ------ | ------ |
| **@flowx/angular-sdk** | **9.159.5** | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **@flowx/angular-theme** | **9.159.5** | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **@flowx/angular-ui-toolkit** | **9.159.5** | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **@flowx/react-sdk** | **9.159.5** | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **@flowx/react-theme** | **9.159.5** | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **@flowx/react-ui-toolkit** | **9.159.5** | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **iOS renderer** | **9.0.5** | 9.0.4 | 9.0.0 | 4.0.29 | 4.0.29 | 4.0.29 | 4.0.21 | 4.0.19 |
| **Android renderer** | **9.0.3** | 9.0.2 | 9.0.0 | 4.0.29 | 4.0.29 | 4.0.28 | 4.0.24 | 4.0.23 |
### Plugins
| Component | 5.1.1 | 5.1.0 | 5.0.0 | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 |
| -------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 |
| **reporting-plugin** | 0.2.3 | 0.2.3 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 |
### AI Platform
| Component | 5.1.1 | 5.1.0 | 5.0.0 | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 |
| ------------------------------- | --------- | ----- | ------ | ------ | ------ | ------ | ------ | ------ |
| **ai-assistant** | **9.2.5** | 9.2.4 | 9.2.3 | 1.8.22 | 1.8.22 | 1.8.21 | 1.8.20 | 1.8.19 |
| **di-platform** | 9.3.1 | 9.3.1 | 9.0.12 | 1.4.6 | 1.4.6 | 1.4.5 | 1.4.5 | 1.4.3 |
| **ai-platform-ai-developer** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-connected-graph** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-knowledge-graph** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-agents** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-conversations** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-models** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-tenants** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-planner** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-ai-analyst** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-ai-designer** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-agent-builder** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-binaries** | **9.4.2** | 9.3.0 | 9.0.1 | - | - | - | - | - |
For previous FlowX.AI releases, please refer to the [Release Notes overview](../../overview).
## Deployment notes
### Standard deployment
This maintenance release follows standard FlowX.AI deployment procedures with no special considerations:
1. Update container images to 5.1.1 versions listed in the table
2. Deploy services using your standard deployment process
3. Verify deployment via **FlowX Designer > Platform Status**
### No configuration changes required
No environment variable changes\
No database migrations\
No breaking changes\
Compatible with existing 5.1.0 processes and configurations
### What's included in 5.1.1
This maintenance release includes:
* **WCAG 2.1 Level AA compliance** across all web components (28 improvements)
* **3 customer-reported issue fixes** for production environments
* **62 proactive quality improvements** identified through internal testing
* **Platform enhancements** for SSE handling, CMS tags, and infrastructure
For detailed information on all changes, see the [FlowX.AI 5.1.1 Release Notes](./v5.1.1-november-2025).
## Infrastructure requirements
Infrastructure requirements remain unchanged from 5.1.0. Existing infrastructure can support 5.1.1 without modifications.
### Minimum requirements
The platform requirements are the same as FlowX.AI 5.1.0:
* **Kubernetes**: 1.26+
* **Kafka**: 3.4+
* **Elasticsearch**: 8.11+
* **Redis**: 7.2+
* **PostgreSQL**: 15+ (for FlowX Database)
* **MongoDB**: 7.0+ (for process data storage)
## Support
For deployment assistance or issues:
* Contact FlowX.AI Support
* Check the [FlowX.AI documentation](https://docs.flowx.ai)
* Review the [Platform Status guide](../../5.1/docs/flowx-designer/managing-a-project-flow/monitoring-and-debugging-a-process-instance)
# Deployment guidelines v5.1.0
Source: https://docs.flowx.ai/release-notes/v5.x/v5.1.x-lts/v5.1.0-september-2025/deployment-guidelines-v5.1
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

## Component versions
| Component | 5.1.0 | 5.0.0 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| -------------------------- | ----------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | ---------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ----- |
| **process-engine** | **9.63.0** | 9.29.2 | 8.23.2 | 8.22.3 | 8.21.1 | 8.17.0 | 8.15.2 | 8.13.0 | 8.9.0 | 8.5.1 | 8.3.1 | 8.1.1 | 8.0.2 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | |
| **admin** | **9.65.0** | 9.25.2 | 7.17.3 | 7.16.3 | 7.15.2 | 7.12.2 | 7.9.2 | 7.8.13 | 7.8.5 | 7.7.6 | 7.5.1 | 7.2.6 | 7.2.3 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **9.153.6** | 9.69.0 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **9.35.0** | 9.21.2 | 5.10.3 | 5.9.2 | 5.8.2 | 5.5.1 | 5.4.16 | 5.4.12 | 5.4.8 | 5.3.3 | 5.2.11 | 5.2.2 | 5.1.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **9.25.0** | 9.12.0 | 5.6.2 | 5.5.2 | 5.4.0 | 5.1.1 | 5.0.13 | 5.0.11 | 5.0.10 | 5.0.4 | 5.0.2 | 5.0.0 | 5.0.0 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **9.25.0** | 9.12.0 | 5.6.2 | 5.5.2 | 5.4.0 | 5.1.1 | 5.0.19 | 5.0.17 | 5.0.16 | 5.0.7 | 5.0.5 | 5.0.2 | 5.0.2 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **9.28.0** | 9.14.2 | 6.7.2 | 6.6.2 | 6.5.0 | 6.2.1 | 6.1.15 | 6.1.13 | 6.1.12 | 6.1.3 | 6.1.0 | 6.0.3 | 6.0.3 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **9.34.0** | 9.17.2 | 6.9.2 | 6.8.2 | 6.7.0 | 6.4.1 | 6.3.18 | 6.3.16 | 6.3.13 | 6.3.4 | 6.3.1 | 6.0.3 | 6.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **task-management-plugin** | **9.33.0** | 9.14.2 | 7.8.2 | 7.7.2 | 7.6.0 | 7.3.1 | 7.2.17 | 7.2.15 | 7.2.14 | 7.2.6 | 7.2.2 | 7.0.3 | 7.0.3 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **9.22.0** | 9.12.1 | 4.6.2 | 4.5.2 | 4.4.0 | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.13 | 4.0.6 | 4.0.4 | 4.0.0 | 4.0.0 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **9.29.1** | 9.15.2 | 6.7.2 | 6.6.2 | 6.5.0 | 6.1.1 | 6.0.17 | 6.0.15 | 6.0.14 | 6.0.6 | 6.0.4 | 6.0.0 | 6.0.0 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **advancing-controller** | **9.24.0** | 9.11.0 | 4.6.2 | 4.6.2 | 4.4.0 | 4.1.1 | 4.0.16 | 4.0.14 | 4.0.12 | 4.0.5 | 4.0.3 | 4.0.0 | 4.0.0 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **9.49.1** | 9.26.2 | 2.15.3 | 2.14.2 | 2.13.0 | 2.9.0 | 2.7.2 | 2.6.0 | 2.3.16 | 2.3.9 | 2.3.2 | 2.0.4 | 2.0.1 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **9.72.0** | 9.27.3 | 2.22.3 | 2.21.2 | 2.20.2 | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **runtime-manager** | **9.72.0** | 9.27.3 | 2.22.3 | 2.21.2 | 2.20.2 | 2.17.2 | 2.15.6 | 2.14.0 | 2.10.9 | 2.9.4 | 2.6.0 | 2.0.25 | 2.0.18 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **9.21.0** | 9.11.0 | 2.9.2 | 2.8.1 | 2.7.1 | 2.4.1 | 2.3.2 | 2.2.11 | 2.2.9 | 2.2.2 | 2.1.0 | 2.0.2 | 2.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **authorization-system** | **9.33.0** | 9.14.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **nosql-db-runner** | **9.21.0** | 9.11.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Embedded components
* **SpiceDB**
* **DGraph**
### Renderers
| Component | 5.1.0 | 5.0.0 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ----------------------------- | ----------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | -------- | -------- | -------- | ------ | ------ | --------- | --------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ----- |
| **@flowx/angular-sdk** | **9.153.6** | 9.69.0 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-theme** | **9.153.6** | 9.69.0 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | | | | | | | | | | | | | | | | |
| **@flowx/angular-ui-toolkit** | **9.153.6** | 9.69.0 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **9.153.6** | 9.69.0 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **9.153.6** | 9.69.0 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **9.153.6** | 9.69.0 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **9.153.6** | 9.69.0 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **9.153.6** | 9.69.0 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 | 5.93.1 | 5.91.2 | 5.84.5 | 5.83.8 | 5.80.6 | 5.69.3 | 5.64.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **iOS renderer** | **9.0.4** | 9.0.0 | 4.0.29 | 4.0.29 | 4.0.29 | 4.0.21 | 4.0.19 | 4.0.14 | 4.0.7 | 4.0.7 | 4.0.5 | 4.0.4 | 4.0.3 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **9.0.2** | 9.0.0 | 4.0.29 | 4.0.29 | 4.0.28 | 4.0.24 | 4.0.23 | 4.0.15 | 4.0.13 | 4.0.13 | 4.0.12 | 4.0.11 | 4.0.9 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Plugins
| Component | 5.1.0 | 5.0.0 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| -------------------- | --------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ----- | ------ | ------ | ------ | ------ |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **reporting-plugin** | **0.2.3** | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
## AI Platform
| Component | 5.1.0 | 5.0.0 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 | 4.7.4 | 4.7.3 | 4.7.2 | 4.7.1 | 4.7.0 | 4.6.1 | 4.6.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ------------------- | --------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ----- | ------ | ------ | ------ | ------ | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-assistant** | **9.2.4** | 9.2.3 | 1.8.22 | 1.8.21 | 1.8.19 | 1.8.18 | 1.8.17 | 1.8.12 | 1.8.9 | 1.8.2 | 1.7.2 | 1.6.15 | 1.6.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **9.3.1** | 9.0.12 | 1.4.6 | 1.4.6 | 1.4.5 | 1.4.5 | 1.4.5 | 1.4.3 | 1.4.1 | 1.2.35 | 1.2.31 | 1.2.27 | 1.2.24 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **9.3.0** | 9.0.1 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **connected-graph** | **9.3.0** | 9.0.1 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **knowledge-graph** | **9.3.0** | 9.0.1 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **agents** | **9.3.0** | 9.0.1 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **conversations** | **9.3.0** | 9.0.1 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **models** | **9.3.0** | 9.0.1 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **tenants** | **9.3.0** | 9.0.1 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **planner** | **9.3.0** | 9.0.1 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **ai-designer** | **9.3.0** | 9.0.1 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **ai-analyst** | **9.3.0** | 9.0.1 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Supported Versions |
| ---------------- | -------------------- | ------------------ |
| 5.1.0 | Keycloak | 26+ |
| 5.1.0 | Kafka | 3.8 - 3.9 |
| 5.1.0 | PostgreSQL | 16 - 17 |
| 5.1.0 | Oracle Database | 21c, 23ai |
| 5.1.0 | MongoDB | 7 - 8 |
| 5.1.0 | Redis | 7.4 - 8.0 |
| 5.1.0 | Elasticsearch | 8 - 9 |
| 5.1.0 | Angular (Web SDK) | 19.x |
| 5.1.0 | React (Web SDK) | 18.x |
Starting FlowX 5.0, the following versions of 3rd Party Dependencies are no longer be supported:
* Keycloak versions older than 26
* Kafka versions older than 3.8
* Redis versions older than 7.4
# Post-deployment configuration
Source: https://docs.flowx.ai/release-notes/v5.x/v5.1.x-lts/v5.1.0-september-2025/migrating-from-v4.7.x-to-5.1/configuration-and-migration
This section contains the steps in order that we recommend for post-deployment configuration of FlowX.AI.
## Redis cache clearing
**Cache Clearing**:
* FlowX.AI 5.1.0 removes process definition versioning. Cache must be cleared to remove legacy cached classes.
* When you start the runtime-manager on version 5.x, the library-to-library migration runs automatically. You must clear the cache after this step because a new field is added to the build mongo document, which is required for various operations.
### Endpoint
`POST {{baseUrlAdmin}}/api/internal/cache/clear`
### Body:
```json theme={"system"}
{
"cacheNames": [
"flowx:core:cache"
]
}
```
## Authentication & authorization
### Add users to default workspace
**Process**:
1. **User Re-login**: Existing configurators must log into FlowX.AI Designer once to create user references in FlowX.AI database
2. **Workspace Assignment**: Organization admin assigns users to the default workspace to reestablish access to existing assets and resources
**Access Restoration**: Without workspace assignment, existing users will lose access to previously available resources and projects.
This step ensures business continuity by maintaining user access to existing FlowX.AI assets in the new workspace-based architecture.
### Role mapping guide
FlowX.AI 4.7.x roles stored in Keycloak are not automatically migrated. Manual role assignment is required.
**FlowX.AI 4.7.x** → **FlowX.AI 5.1.0**
* `FLOWX_ADMIN` → `workspace_admin`
* `FLOWX_CONFIGURATOR` → `workspace_user` or `project_editor`
* `FLOWX_UI_DESIGNER` → `theme_editor`
* `FLOWX_VIEWER` → `project_viewer`
* Custom Keycloak roles → Manual review required
**Important Changes**
* Roles are now workspace-scoped
* More granular permission structure
* Database-stored instead of token-based
* New role hierarchy requires review
### Migration process
Document all existing Keycloak roles and their assigned users before migration
Determine appropriate FlowX.AI 5.1.0 roles for each user based on their current access needs
Decide how to organize users into workspaces based on business requirements
Use the FlowX.AI 5.1.0 interface to assign appropriate roles to users in their respective workspaces
Test user access to ensure proper permissions are granted and restrictions are enforced
### For existing customers
The auth-system will automatically:
* Create default organization and workspace
* Import the admin user from Keycloak
* Assign organization admin privileges
* Set up default roles and groups
The data-sync service will:
* Migrate existing projects from app-manager database to CAS database
* Assign all existing resources to the default workspace
* Preserve all existing functionality
* Require temporary write access to CAS database
**Note**: This is the only exception to the exclusive write access rule.
***
## Header migration: Fx-BuildId to Fx-Build-App-Version-Id
### Background
The header `Fx-BuildId` has been renamed to `Fx-Build-App-Version-Id` to accurately reflect that it contains an application version identifier, not a build identifier.
### Migration strategy
During the transition period, both headers are supported:
* **New messages**: Include `Fx-Build-App-Version-Id` with the application version ID
* **Legacy support**: `Fx-BuildId` is still accepted for backward compatibility
* **Priority**: FlowX.AI platform reads `Fx-Build-App-Version-Id` first, then falls back to `Fx-BuildId` if not present
### Implementation guidelines
1. **New integrations**: Use `Fx-Build-App-Version-Id` header
2. **Existing integrations**: Will continue to work during migration period
3. **Client considerations**: Existing client instances may continue sending `Fx-BuildId` until they are updated
### Timeline considerations
Client applications with long-running instances may continue using the legacy `Fx-BuildId` header until those instances complete their processes and are updated to use the new header format.
# Update environment variables
Source: https://docs.flowx.ai/release-notes/v5.x/v5.1.x-lts/v5.1.0-september-2025/migrating-from-v4.7.x-to-5.1/environment-variables
Update environment variables for all existing FlowX.AI services
Update environment variable configurations for all existing FlowX.AI services to support version 5.1.0 compatibility.
## Audit core
Elasticsearch configuration migrates from `SPRING_ELASTICSEARCH_*` to `FLOWX_ELASTICSEARCH_*` namespace with enhanced index management.
### Variables to remove & replace
| Remove This Variable | Replace With | Old Default | New Default |
| ----------------------------------------------- | -------------------------------------------- | ------------ | ------------ |
| `SPRING_ELASTICSEARCH_INDEXSETTINGS_DATASTREAM` | `FLOWX_ELASTICSEARCH_INDEXSETTINGS_NAME` | `audit-logs` | `audit-logs` |
| `SPRING_ELASTICSEARCH_INDEXSETTINGS_SHARDS` | `FLOWX_ELASTICSEARCH_INDEXSETTINGS_SHARDS` | `2` | `2` |
| `SPRING_ELASTICSEARCH_INDEXSETTINGS_REPLICAS` | `FLOWX_ELASTICSEARCH_INDEXSETTINGS_REPLICAS` | `2` | `0` |
### New variables to add
| Variable | Default Value | Description |
| --------------------------------------- | ------------- | ------------------------------- |
| `FLOWX_ELASTICSEARCH_INDEXROLLOVERDAYS` | `30` | Automatic index rollover policy |
## Data Search
Simple migration with containerization support and namespace alignment.
### Variables to update
| Variable | Current Value | New Value | Reason |
| -------------------------------- | ---------------- | -------------------- | ------------------------ |
| `SPRING_ELASTICSEARCH_REST_URIS` | `localhost:9200` | `elasticsearch:9200` | Containerization support |
### Variables to replace
| Remove This | Add This | Default Value |
| ----------------------------------------- | ---------------------------------------- | ------------------ |
| `SPRING_ELASTICSEARCH_INDEXSETTINGS_NAME` | `FLOWX_ELASTICSEARCH_INDEXSETTINGS_NAME` | `process_instance` |
## Document plugin
New configuration option for test documents bucket customization.
### New variables to add
| Variable | Default Value | Description |
| -------------------------------------------- | ----------------- | -------------------------------------------------------------------------------------------------------------- |
| `APPLICATION_FILE_STORAGE_TEST_FILES_BUCKET` | `-test-documents` | Overrides the default test documents bucket suffix. Use this to configure a custom bucket name for test files. |
This variable allows you to override the default `-test-documents` bucket suffix. You can configure a custom bucket name or use the same bucket as the main storage if needed.
## Kafka configuration
Complete Kafka migration including consumer group standardization to kebab-case, comprehensive topic restructuring with new versioned naming patterns, and enhanced messaging features across all FlowX.AI services.
**Do not modify default consumer group names.** We strongly recommend against changing the default consumer group names as this operation can lead to misconfigurations. The application is designed to work and scale with the consumer groups as they are defined by default.
### Consumer group migrations
**Admin (3 groups):**
| Old Group ID | New Group ID |
| ---------------------------------- | -------------------------------------- |
| `genericProcessingGroup` | `generic-processing-group` |
| `processSyncGroup` | `process-sync-group` |
| `adminResourcesUsagesRefreshGroup` | `admin-resources-usages-refresh-group` |
**Application Manager (15 groups):**
| Old Group ID | New Group ID |
| ----------------------------------- | ----------------------------------------- |
| `appResourceExportGroup` | `app-resource-export-group` |
| `appResourceImportGroup` | `app-resource-import-group` |
| `appResourceUsagesGroup` | `app-resource-usages-group` |
| `appResElemUsageValidationResp` | `app-resource-elem-usage-validation-resp` |
| `appResourceCopyGroup` | `app-resource-copy-group` |
| `appResourceSyncGroup` | `app-resource-sync-group` |
| `appResourceUpdatePropagationGroup` | `app-resource-update-propagation-group` |
| `appMergeItemGroup` | `app-merge-item-group` |
| `buildCreateGroup` | `build-create-group` |
| `buildUpdateGroup` | `build-update-group` |
| `buildResourceExportGroup` | `build-resource-export-group` |
| `buildResourceImportGroup` | `build-resource-import-group` |
| `buildRuntimeDataGroup` | `build-runtime-data-group` |
| `buildStartTimerEventsUpdatesGroup` | `build-start-timer-events-updates-group` |
| `processStartGroup` | `process-start-group` |
**CMS Core (1 group):**
| Old Group ID | New Group ID |
| ---------------------- | -------------------- |
| `cms-consumer-preview` | `cms-consumer-group` |
**Document Plugin (1 group):**
| Old Group ID | New Group ID |
| ----------------------------------------- | ----------------------------- |
| `kafka-svc-document-consumer-local-test2` | `kafka-svc-document-consumer` |
**Integration Designer (3 groups):**
| Old Group ID | New Group ID |
| ------------------------------------------- | ------------------------------------------------------ |
| `integrDesignerResourcesUsagesRefreshGroup` | `integration-designer-resources-usages-refresh-group` |
| `genericProcessingGroup` | `start-workflows-group` |
| `resElemUsageValidation` | `integration-designer-res-elem-usage-validation-group` |
**Notification Plugin (1 group):**
| Old Group ID | New Group ID |
| ------------------ | ------------------------------ |
| `notif123-preview` | `notification-plugin-consumer` |
**Process Engine (11 groups):**
| Old Group ID (all were `notif123-preview`) | New Group ID |
| ------------------------------------------ | -------------------------- |
| `notif123-preview` | `advance` |
| `notif123-preview` | `notify-parent` |
| `notif123-preview` | `adapters` |
| `notif123-preview` | `scheduler-run-action` |
| `notif123-preview` | `scheduler-advancing` |
| `notif123-preview` | `message-events` |
| `notif123-preview` | `process-start` |
| `notif123-preview` | `process-start-for-event` |
| `notif123-preview` | `process-expire` |
| `notif123-preview` | `process-operations` |
| `notif123-preview` | `process-batch-processing` |
### Kafka topic migrations
All Kafka topics migrate to versioned naming pattern `ai.flowx.{env}.{service}.{operation}.v1` for improved organization and future compatibility.
**Application resource topics:**
| Environment Variable | New Topic Name |
| ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_CORRECTIONAFTERAPPOPERATION_IN` | `ai.flowx.application-version.correction-after-app-operation.response.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_CORRECTIONAFTERAPPOPERATION_OUT_PROCESS` | `ai.flowx.application-version.correction-after-app-operation.process.request.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_CORRECTIONAFTERAPPOPERATION_OUT_BUSINESSRULE` | `ai.flowx.application-version.correction-after-app-operation.business-rule.request.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_CORRECTIONAFTERAPPOPERATION_OUT_REUSABLETEMPLATE` | `ai.flowx.application-version.correction-after-app-operation.reusable-template.request.v1` |
**Sync topics:**
| Environment Variable | New Topic Name |
| --------------------------------------------------------------- | ----------------------------------------------------------- |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_OUT_PROCESS_IN` | `ai.flowx.application-version.sync.process.in.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_OUT_BUSINESSRULE_IN` | `ai.flowx.application-version.sync.business-rule.in.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_OUT_REUSABLETEMPLATE_IN` | `ai.flowx.application-version.sync.reusable-template.in.v1` |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_IN` | `ai.flowx.application-version.sync.out.v1` |
**Resource update propagation:**
| Environment Variable | New Topic Name |
| ---------------------------------------------------- | ------------------------------------------------------------- |
| `KAFKA_TOPIC_APPLICATION_RESOURCE_UPDATEPROPAGATION` | `ai.flowx.application-version.resource.update.propagation.v1` |
**Build resource topics:**
| Environment Variable | New Topic Name |
| ------------------------------- | -------------------------------- |
| `KAFKA_TOPIC_BUILD_RUNTIMEDATA` | `ai.flowx.build.runtime-data.v1` |
**Consumer groups:**
| Environment Variable | New Consumer Group | Threads |
| ------------------------------------------------------------ | ----------------------------------------- | ------- |
| `KAFKA_CONSUMER_GROUPID_PROCESS_SYNC` | `process-sync-group` | `6` |
| `KAFKA_CONSUMER_GROUPID_BUSINESS_RULE_SYNC` | `business-rule-sync-group` | `6` |
| `KAFKA_CONSUMER_GROUPID_REUSABLE_TEMPLATE_SYNC` | `reusable-template-sync-group` | `6` |
| `KAFKA_CONSUMER_GROUPID_PROCESS_CORRECTIONAFTERAPPOPERATION` | `processCorrectionAfterAppOperationGroup` | `6` |
**Application sync topics:**
| Environment Variable | New Topic Name |
| ----------------------------------------------- | ----------------------------------------------------------- |
| `KAFKA_TOPIC_APPLICATION_SYNC_RESPONSE` | `ai.flowx.application-version.sync.out.v1` |
| `KAFKA_TOPIC_APPLICATION_PROCESS_SYNC` | `ai.flowx.application-version.sync.process.in.v1` |
| `KAFKA_TOPIC_APPLICATION_BUSINESSRULE_SYNC` | `ai.flowx.application-version.sync.business-rule.in.v1` |
| `KAFKA_TOPIC_APPLICATION_REUSABLETEMPLATE_SYNC` | `ai.flowx.application-version.sync.reusable-template.in.v1` |
**Application correction after app operation topics:**
| Environment Variable | New Topic Name |
| ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| `KAFKA_TOPIC_APPLICATION_CORRECTIONAFTERAPPOPERATION_IN_PROCESS` | `ai.flowx.application-version.correction-after-app-operation.process.request.v1` |
| `KAFKA_TOPIC_APPLICATION_CORRECTIONAFTERAPPOPERATION_IN_BUSINESSRULE` | `ai.flowx.application-version.correction-after-app-operation.business-rule.request.v1` |
| `KAFKA_TOPIC_APPLICATION_CORRECTIONAFTERAPPOPERATION_IN_REUSABLETEMPLATE` | `ai.flowx.application-version.correction-after-app-operation.reusable-template.request.v1` |
| `KAFKA_TOPIC_APPLICATION_CORRECTIONAFTERAPPOPERATION_OUT` | `ai.flowx.application-version.correction-after-app-operation.response.v1` |
**Build topics:**
| Environment Variable | New Topic Name |
| ------------------------------- | -------------------------------- |
| `KAFKA_TOPIC_BUILD_RUNTIMEDATA` | `ai.flowx.build.runtime-data.v1` |
### New Kafka features
**Consumer Group:** `app-resource-update-propagation-group`\
**Threads:** 3\
**Topic:** `ai.flowx.{env}.application-version.resource.update.propagation.v1`\
**Purpose:** Real-time resource change propagation
**Consumer Group:** `build-runtime-data-group`\
**Threads:** 2\
**Topic:** `ai.flowx.{env}.build.runtime-data.v1`\
**Purpose:** Build process data management
**Topic:** `ai.flowx.{env}.application-version.sync.business-rule.in.v1`\
**Purpose:** Enhanced business rule synchronization\
**Consumer Group:** `business-rule-sync-group`
**Topic:** `ai.flowx.{env}.application-version.sync.process.in.v1`\
**Purpose:** Improved process synchronization\
**Consumer Group:** `process-sync-group`
**Topic:** `ai.flowx.{env}.application-version.sync.reusable-template.in.v1`\
**Purpose:** Template synchronization\
**Consumer Group:** `reusable-template-sync-group`
**Multiple Topics:** Process, business rule, and template correction\
**Purpose:** Post-deployment resource correction\
**Consumer Group:** `processCorrectionAfterAppOperationGroup`
### Configure environment variables
**Automatic Configuration**: Most deployments can rely on the built-in naming patterns without explicit environment variable overrides. Only override when custom naming is required.
```bash Application Manager Topics theme={"system"}
# Resource Update Propagation
KAFKA_TOPIC_APPLICATION_RESOURCE_UPDATEPROPAGATION=ai.flowx.dev.application-version.resource.update.propagation.v1
# Build Runtime Data
KAFKA_TOPIC_BUILD_RUNTIMEDATA=ai.flowx.dev.build.runtime-data.v1
# Sync Topics
KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_OUT_PROCESS=ai.flowx.dev.application-version.sync.process.in.v1
KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_OUT_BUSINESSRULE=ai.flowx.dev.application-version.sync.business-rule.in.v1
KAFKA_TOPIC_APPLICATION_RESOURCE_SYNC_OUT_REUSABLE_TEMPLATE=ai.flowx.dev.application-version.sync.reusable-template.in.v1
# Correction After App Operation
KAFKA_TOPIC_APPLICATION_RESOURCE_CORRECTIONAFTERAPPOPERATION_OUT_PROCESS=ai.flowx.dev.application-version.correction-after-app-operation.process.request.v1
KAFKA_TOPIC_APPLICATION_RESOURCE_CORRECTIONAFTERAPPOPERATION_OUT_BUSINESSRULE=ai.flowx.dev.application-version.correction-after-app-operation.business-rule.request.v1
KAFKA_TOPIC_APPLICATION_RESOURCE_CORRECTIONAFTERAPPOPERATION_OUT_REUSABLETEMPLATE=ai.flowx.dev.application-version.correction-after-app-operation.reusable-template.request.v1
```
```bash Admin Topics theme={"system"}
# Application Sync
KAFKA_TOPIC_APPLICATION_SYNC_RESPONSE=ai.flowx.dev.application-version.sync.out.v1
KAFKA_TOPIC_APPLICATION_PROCESS_SYNC=ai.flowx.dev.application-version.sync.process.in.v1
KAFKA_TOPIC_APPLICATION_BUSINESSRULE_SYNC=ai.flowx.dev.application-version.sync.business-rule.in.v1
KAFKA_TOPIC_APPLICATION_REUSABLETEMPLATE_SYNC=ai.flowx.dev.application-version.sync.reusable-template.in.v1
# Correction After App Operation
KAFKA_TOPIC_APPLICATION_CORRECTIONAFTERAPPOPERATION_IN_PROCESS=ai.flowx.dev.application-version.correction-after-app-operation.process.request.v1
KAFKA_TOPIC_APPLICATION_CORRECTIONAFTERAPPOPERATION_IN_BUSINESSRULE=ai.flowx.dev.application-version.correction-after-app-operation.business-rule.request.v1
KAFKA_TOPIC_APPLICATION_CORRECTIONAFTERAPPOPERATION_IN_REUSABLETEMPLATE=ai.flowx.dev.application-version.correction-after-app-operation.reusable-template.request.v1
KAFKA_TOPIC_APPLICATION_CORRECTIONAFTERAPPOPERATION_OUT=ai.flowx.dev.application-version.correction-after-app-operation.response.v1
```
```bash Consumer Groups and Threads theme={"system"}
# Application Manager Consumer Groups
KAFKA_CONSUMER_GROUPID_APPLICATION_RESOURCE_UPDATEPROPAGATION=app-resource-update-propagation-group
KAFKA_CONSUMER_GROUPID_BUILD_RUNTIMEDATA=build-runtime-data-group
# Admin Consumer Groups
KAFKA_CONSUMER_GROUPID_PROCESS_SYNC=process-sync-group
KAFKA_CONSUMER_GROUPID_BUSINESS_RULE_SYNC=business-rule-sync-group
KAFKA_CONSUMER_GROUPID_REUSABLE_TEMPLATE_SYNC=reusable-template-sync-group
KAFKA_CONSUMER_GROUPID_PROCESS_CORRECTIONAFTERAPPOPERATION=processCorrectionAfterAppOperationGroup
# Thread Configuration
KAFKA_CONSUMER_THREADS_APPLICATION_RESOURCE_UPDATEPROPAGATION=3
KAFKA_CONSUMER_THREADS_BUILD_RUNTIMEDATA=2
KAFKA_CONSUMER_THREADS_PROCESS_SYNC=6
KAFKA_CONSUMER_THREADS_BUSINESS_RULE_SYNC=6
KAFKA_CONSUMER_THREADS_REUSABLE_TEMPLATE_SYNC=6
KAFKA_CONSUMER_THREADS_PROCESS_CORRECTIONAFTERAPPOPERATION=6
```
### Additional Application Manager variables
| Variable | Default Value | Description |
| ---------------------------------------------------------------- | ------------- | -------------------------------- |
| `FLOWX_RESOURCESUSAGES_REFRESHPRODUCER_REFRESHEXPIRATIONSECONDS` | `300` | Refresh expiration timeout |
| `SERVER_MAXHTTPREQUESTHEADERSIZE` | `16KB` | Maximum HTTP request header size |
## Integration Designer
### Storage configuration
Added support for S3 storage for files in Integration Designer.
| Variable | Default Value | Description |
| ---------------------------------------------- | ------------------- | --------------------- |
| `APPLICATION_FILESTORAGE_TYPE` | `s3` | Storage type |
| `APPLICATION_FILESTORAGE_PARTITIONSTRATEGY` | `NONE` | Partition strategy |
| `APPLICATION_FILESTORAGE_DELETIONSTRATEGY` | `delete` | Deletion strategy |
| `APPLICATION_FILESTORAGE_S3_ENABLED` | `true` | S3 enabled |
| `APPLICATION_FILESTORAGE_S3_SERVERURL` | `http://minio:9000` | S3 server URL |
| `APPLICATION_FILESTORAGE_S3_ENCRYPTIONENABLED` | `false` | S3 encryption enabled |
| `APPLICATION_FILESTORAGE_S3_ACCESSKEY` | `minio` | S3 access key |
| `APPLICATION_FILESTORAGE_S3_SECRETKEY` | `minio123` | S3 secret key |
| `APPLICATION_FILESTORAGE_S3_BUCKETPREFIX` | `workflows-bucket` | S3 bucket prefix |
### Redis
Added caching when running a workflow.
| Variable | Default Value | Description |
| ------------------------------- | ---------------------------------------- | ------------------ |
| `SPRING_CACHE_TYPE` | `redis` | Cache type |
| `SPRING_CACHE_REDIS_KEYPREFIX` | `flowx:core:cache:integration-designer:` | Cache key prefix |
| `SPRING_CACHE_REDIS_TIMETOLIVE` | `5000000` | Cache time to live |
| `SPRING_REDIS_HOST` | `redis-master` | Redis host |
| `SPRING_REDIS_PORT` | `6379` | Redis port |
| `SPRING_REDIS_PASSWORD` | `defaultpassword` | Redis password |
| `SPRING_REDIS_TTL` | `5000000` | Redis time to live |
| `SPRING_DATA_REDIS_HOST` | `spring.redis.host` | Redis host |
## FlowX Engine
The ADVANCING controller has been redesigned with separate picking and processing operations for improved performance and resource management.
### Variables to remove & replace
| Remove This Variable | Replace With |
| ---------------------------- | ------------------------------------------------ |
| `ADVANCING_THREADS` | `ADVANCING_PICKINGTHREADS` (default: `1`) |
| `ADVANCING_PICKINGBATCHSIZE` | `ADVANCING_PROCESSINGBUFFERSIZE` (default: `20`) |
### New variables to add
| Variable | Default Value | Description |
| ------------------------------------------- | ------------- | -------------------------------------------------------------- |
| `ADVANCING_PROCESSINGTHREADS` | `20` | Number of threads for parallel processing of advancing events |
| `ADVANCING_BLOCKPICKINGIFNOWORKERAVAILABLE` | `true` | Block picking operations when no worker threads are available |
| `ADVANCING_DATASOURCE_MAXIMUMPOOLSIZE` | `20` | Maximum database connection pool size for advancing operations |
### Variables to update
| Variable | Current Value | New Value | Reason |
| ------------------------------ | ------------- | --------- | ----------------------------------------------- |
| `ADVANCING_PICKINGPAUSEMILLIS` | `100` | `50` | Optimized pause duration for better performance |
**How the new advancing controller works:**
* **Picking threads** (`ADVANCING_PICKINGTHREADS`): Controls how many worker threads read events from the database. This handles only the picking/reading operations.
* **Processing buffer** (`ADVANCING_PROCESSINGBUFFERSIZE`): Acts as a queue between picking and processing. When the buffer is full, no new events are read. When there's available space, that amount of events will be read.
* **Processing threads** (`ADVANCING_PROCESSINGTHREADS`): Controls how many threads process the advancing events in parallel. Events are processed instantly if processing threads are available. If all processing threads are busy, events accumulate in the buffer until it reaches capacity.
* **Blocking behavior** (`ADVANCING_BLOCKPICKINGIFNOWORKERAVAILABLE`): When enabled, prevents picking operations if no worker threads are available, ensuring better resource management.
### Elasticsearch indexing configuration
Elasticsearch indexing environment variables have been updated with new naming conventions for better consistency with FlowX naming standards.
#### Variables to remove & replace
| Remove This Variable | Replace With | Old Default | New Default |
| ---------------------------------------------- | -------------------------------------------- | ------------------ | ------------------ |
| `FLOWX_INDEXING_PROCESSINSTANCE_INDEXING_TYPE` | `FLOWX_INDEXING_TYPE` | `kafka` | `kafka` |
| `FLOWX_INDEXING_PROCESSINSTANCE_INDEX_NAME` | `FLOWX_ELASTICSEARCH_INDEXSETTINGS_NAME` | `process_instance` | `process_instance` |
| `FLOWX_INDEXING_PROCESSINSTANCE_SHARDS` | `FLOWX_ELASTICSEARCH_INDEXSETTINGS_SHARDS` | `2` | `2` |
| `FLOWX_INDEXING_PROCESSINSTANCE_REPLICAS` | `FLOWX_ELASTICSEARCH_INDEXSETTINGS_REPLICAS` | `2` | `0` |
For complete Elasticsearch indexing setup including Kafka Connect configuration and time-based partitioning, see the [Configuring Elasticsearch indexing](/5.1/setup-guides/flowx-engine-setup-guide/configuring-elasticsearch-indexing/elasticsearch-indexing) guide.
## Java runtime configuration
FlowX.AI containers and services must rely exclusively on Java-standard environment variables for runtime tuning.
| Deprecated variables | Standard Replacement | Notes |
| -------------------------------- | -------------------- | ------------------------------------------------------------------ |
| `JAVA_OPTS`, `JAVA_TOOL_OPTIONS` | `JDK_JAVA_OPTIONS` | Ensures compatibility with Java 21 and simplifies container config |
Environment-specific memory configurations must now be defined using `JDK_JAVA_OPTIONS`. Avoid relying on `JAVA_OPTS`, `JAVA_TOOL_OPTIONS` or legacy Docker-level overrides — these are no longer processed explicitly.
## Config profiles
Config profiles are deprecated since 4.7.6 version.
Remove legacy `CONFIG_PROFILE` usage. Delete any `CONFIG_PROFILE` environment variable definitions from deployments. This variable is no longer referenced by FlowX.AI services.
### Development environment exception
For development environments only, `CONFIG_PROFILE` migrates to the standard Spring configuration profile variable.
| Remove This Variable | Replace With | Environment |
| -------------------- | ----------------------- | ----------- |
| `CONFIG_PROFILE` | `SPRING_CONFIG_PROFILE` | devenv only |
## SpiceDB integration
FlowX.AI 5.1 introduces SpiceDB integration for enhanced authorization capabilities across all core services.
### Services affected
The following services require new SpiceDB configuration variables:
* Admin
* Application Manager
* Audit Core
* CMS Core
* Document Plugin
* Integration Designer
* Notification Plugin
* Process Engine
* Runtime Manager
* Task Management Plugin
### New variables to add
For every CAS configuration, add the following variables:
| Variable | Default Value | Description |
| --------------------- | ------------- | ----------------------------------------------------------------------------------------------------- |
| `FLOWX_SPICEDB_HOST` | `spicedb` | SpiceDB server hostname. Change only if your deployment uses a non-default host. |
| `FLOWX_SPICEDB_PORT` | `50051` | SpiceDB server port. Change only if your deployment uses a non-default port. |
| `FLOWX_SPICEDB_TOKEN` | *(secret)* | SpiceDB authentication token. Add as a Secret to all services connecting to CAS, including Data-Sync. |
## Data sync updates
### Data Sync additional variables
For every Data-Sync configuration, add the following variables:
| Variable | Default Value | Description |
| -------------------------------------- | ------------- | ----------------------------------------------------------------------------------------------------- |
| `FLOWX_SPICEDB_HOST` | `spicedb` | SpiceDB server hostname. Change only if your deployment uses a non-default host. |
| `FLOWX_SPICEDB_PORT` | `50051` | SpiceDB server port. Change only if your deployment uses a non-default port. |
| `FLOWX_DATASOURCE_AUTHSYSTEM_URL` | - | Authentication system URL. |
| `FLOWX_DATASOURCE_AUTHSYSTEM_USERNAME` | - | Authentication system username. |
| `FLOWX_DATASOURCE_AUTHSYSTEM_PASSWORD` | - | Authentication system password. |
| `FLOWX_SPICEDB_TOKEN` | - | SpiceDB authentication token. Add as a Secret to all services connecting to CAS, including Data-Sync. |
## Kafka topic naming
### Global configuration change
| Variable | Old Default | New Default | Description |
| -------------------------------- | ----------- | ----------- | ---------------------------------- |
| `KAFKA_TOPIC_NAMING_ENVIRONMENT` | (varies) | `""` | Moved to default empty environment |
This change standardizes topic naming across environments by defaulting to an empty environment identifier.
## CORS and ingress updates
### Admin service
Admin service ingress configuration requires additional CORS header support for workspace identification.
**Kubernetes ingress annotation update:**
```yaml theme={"system"}
nginx.ingress.kubernetes.io/cors-allow-headers: "...,Fx-Workspace-Id"
```
### Process Engine service
**Ingress paths requiring `Fx-Workspace-Id` header:**
* `/admin`
* `/adminInstances`
**Kubernetes ingress annotation update:**
```yaml theme={"system"}
nginx.ingress.kubernetes.io/cors-allow-headers: "...,Fx-Workspace-Id"
```
### Runtime Manager service
**Ingress paths requiring `Fx-Workspace-Id` header:**
* `/admin`
* `/adminInstances`
**Kubernetes ingress annotation update:**
```yaml theme={"system"}
nginx.ingress.kubernetes.io/cors-allow-headers: "...,Fx-Workspace-Id"
```
# Install new services
Source: https://docs.flowx.ai/release-notes/v5.x/v5.1.x-lts/v5.1.0-september-2025/migrating-from-v4.7.x-to-5.1/install-services
Step-by-step installation guide for new FlowX.AI 5.1.0 services
FlowX.AI 5.1.0 introduces two new services:
1. **Authorization System (CAS)** - Centralized authorization and permission management
2. **NoSQL DB Runner** - The NoSQL DB Runner is a backend microservice that powers FlowX.AI Database functionality. It provides MongoDB and Azure Cosmos DB operations support for FlowX.AI Database collections and handles data persistence operations across FlowX.AI processes.
# Overview
Source: https://docs.flowx.ai/release-notes/v5.x/v5.1.x-lts/v5.1.0-september-2025/migrating-from-v4.7.x-to-5.1/migration-overview
Complete migration guide from FlowX.AI 4.7.x to 5.1.0 with prerequisites and step-by-step process
You can only upgrade from version 4.7.8 (or newer) to 5.1.0. If you’re on an earlier version, upgrade to the latest LTS version first.
## Success factors
Take care when following steps are mandatory and will prevent service startup if skipped:
1. **SpiceDB and DGraph** must be installed before any FlowX.AI services
DGraph is required only if you are using FlowX AI agents. If not, you can skip this step.
2. **Organization admin user** must be configured before authorization-system service deployment
3. **Service accounts** must have `SA_FLOWX` role assigned
4. **Data migration** must complete before service upgrades
## Migration process
Follow these steps in the exact order specified to ensure a successful migration:
### Data migration
Migrate existing Elasticsearch data to support the new workspace-based architecture.
### Installing new third parties
**New mandatory infrastructure components:**
* **SpiceDB** - Authorization and permission management backend
* **DGraph** - Graph-based data operations and relationships
### Upgrading existing third parties
Update existing infrastructure to the new supported versions:
* Kafka 3.8+, Redis 7.4+, Elasticsearch 8+, Keycloak 26+
### Organization admin user
Configure the organization admin user before deploying the authorization-system service.
### Service accounts
Assign `SA_FLOWX` role to all service accounts used by FlowX services.
See the details on prerequisites for migration
Deploy new FlowX.AI 5.1.0 services in the correct order to ensure proper startup and dependency validation.
**Required installation sequence:**
1. **Authorization System (CAS)** - Must be installed first to validate SpiceDB connection
2. **NoSQL DB Runner** - Backend service for [FlowX.AI Database](../../../../../5.1/docs/platform-deep-dive/integrations/flowx-database)
**Service Startup Dependency**: Authorization System will not start without proper SpiceDB installation and organization admin configuration.
Step-by-step installation with validation procedures
Installing Authorization System first allows you to validate all critical configurations before proceeding.
Update environment variable configurations for all existing FlowX.AI services to support version 5.1.0 compatibility.
**Configuration updates include:**
* New Kafka topics and consumer groups
* Updated Elasticsearch settings and index configurations
* Enhanced security and authorization parameters
* New service integration endpoints
Update environment variables for all existing FlowX.AI services
Upgrade all existing FlowX.AI services to version 5.1.0 after completing environment variable updates.
See the details on container apps (Renderers SDKs)
Perform the post deployment steps:
* Validate data-sync migrations
* Clear cache with endpoint
* Remove deprecated configuration roles (optional)
* Add users to default workspace
### Validate data-sync migrations
Verify that all data synchronization processes completed successfully and perform additional system checks.
### Clear cache with endpoint
**Required**: Clear Redis cache using the dedicated endpoint with organization admin token.
**Cache Clearing**:
* FlowX.AI 5.1.0 removes process definition versioning. Cache must be cleared to remove legacy cached classes.
* When you start the runtime-manager on version 5.x, the library-to-library migration runs automatically. You must clear the cache after this step because a new field is added to the build mongo document, which is required for various operations.
### Remove deprecated configuration roles (optional)
Clean up legacy roles from Keycloak or other authentication servers that are now managed by CAS.
### Add users to default workspace
**Process**:
1. **User Re-login**: Existing configurators must log into FlowX.AI Designer once to create user references in FlowX.AI database
2. **Workspace Assignment**: Organization admin assigns users to the default workspace to reestablish access to existing assets and resources
**Access Restoration**: Without workspace assignment, existing users will lose access to previously available resources and projects.
Complete post-deployment procedures and validation
Common issues and solutions for post-upgrade problems
# Prerequisites
Source: https://docs.flowx.ai/release-notes/v5.x/v5.1.x-lts/v5.1.0-september-2025/migrating-from-v4.7.x-to-5.1/prerequisites
This section contains the steps in order that we recommend for migrating data from FlowX v4.7.x to v5.1.0.
## Upgrading existing third parties
Update existing infrastructure to at least the new supported versions:
| Component | 4.7.8 | FlowX.AI 5.1.0 |
| ----------------- | --------- | -------------- |
| **Kafka** | 3.2 - 3.9 | **3.8 - 3.9** |
| **Redis** | 7.2 - 8.0 | **7.4 - 8.0** |
| **Elasticsearch** | 7 - 9 | **8 - 9** |
| **Keycloak** | 22,26+ | **26+** |
***
## Installing new third parties
FlowX.AI 5.1.0 requires two new infrastructure components that must be installed and properly configured before any FlowX.AI services can start.
* **SpiceDB** - Required for authorization management (Must be accessible by the authorization-system service)
* **DGraph** - Required for data relationships and graph operations. If you are not using FlowX AI agents (you don't have an AI deployment), you can skip this step.
***
## Elasticsearch workspace migration
**The primary goal of this Elasticsearch migration is to add the default workspace ID to all existing resources in your environment.** This ensures that all your current data (process instances, audit logs, etc.) will be properly associated with a workspace and remain accessible after the upgrade to FlowX 5.1.0.
Without this migration, existing data would not have workspace associations and could become inaccessible or invisible in workspace-scoped operations.
Elasticsearch index mappings must be updated before upgrading to FlowX.AI 5.1.0 to ensure workspace functionality works correctly.
### Migration timing
**Recommended approach**: Complete these Elasticsearch migrations **before** upgrading FlowX.AI microservices. Upgrading services first and then creating new workspaces will complicate the migration process.
### Prerequisites for migration
Before upgrading to FlowX.AI 5.1.0, you must update the mappings for all existing Elasticsearch indices to include the `workspaceId` field:
```json theme={"system"}
PUT /{indexName/indexPattern}/_mapping
{
"properties": {
"workspaceId": {
"type": "keyword"
}
}
}
```
This mapping update is required for:
* Process instances indices (you can find the indices in the `flowx-process-engine` setup guide at `FLOWX_INDEXING_PROCESSINSTANCE_INDEX_NAME` environment variable, if not set, the default is `process_instance`)
* Audit log indices (you can find the indices in the `audit-core` setup guide at `SPRING_ELASTICSEARCH_INDEX_SETTINGS_DATASTREAM` environment variable)
### Migration execution methods
You can execute these migration queries using:
* **Kibana Dev Tools**: Execute queries directly in the Kibana interface
* **Elasticsearch API**: Use direct API calls to perform migrations
### Process instances migration
Process instances indices require manual migration using Elasticsearch's `update_by_query` API to assign them to the default workspace:
#### Synchronous migration
```json theme={"system"}
POST /{indexName}/_update_by_query?slices=auto
{
"script": {
"source": "ctx._source.workspaceId = params.workspace_id;",
"lang": "painless",
"params": {
"workspace_id": "00000000-0000-0000-0000-000000000001"
}
},
"query": {
"bool": {
"must_not": {
"exists": {
"field": "workspaceId"
}
}
}
}
}
```
#### Asynchronous migration (for large datasets)
For large datasets, use asynchronous migration:
```json theme={"system"}
POST /{indexName}/_update_by_query?slices=auto&wait_for_completion=false
```
Monitor async tasks with:
```json theme={"system"}
GET /_tasks/{task_id}
```
### Audit logs migration
Audit logs follow the same migration process as process instances, using identical scripts and procedures to assign them to the default workspace:
```json theme={"system"}
POST /{audit_index_pattern}/_update_by_query?slices=auto
{
"script": {
"source": "ctx._source.workspaceId = params.workspace_id;",
"lang": "painless",
"params": {
"workspace_id": "00000000-0000-0000-0000-000000000001"
}
},
"query": {
"bool": {
"must_not": {
"exists": {
"field": "workspaceId"
}
}
}
}
}
```
### Performance optimization
* Use `slices=auto` for automatic parallelization based on primary shards
* For multiple indices, use patterns: `POST /my_pattern-*/_update_by_query?slices=auto`
* Batch processing with size parameter: `?size=1000`
* Monitor large operations using asynchronous execution
### Post-migration impact
**Without proper Elasticsearch migration, you will experience:**
* Some process instances may not appear in search results
* Data-search functionality may not return complete results
* Workspace-scoped queries will fail for unmigrated data
* **Existing resources will not be visible or accessible within the new workspace structure**
### Default workspace ID
The migration uses the default workspace ID: `00000000-0000-0000-0000-000000000001`
All existing resources (process instances, audit logs, etc.) will be moved to this default workspace, ensuring continuity of operations after the upgrade to FlowX.AI 5.1.0.
***
### Organization admin user
Configure the organization admin user before deploying the authorization-system service (that is mentioned in the [Install Services](./install-services) section).
Details on how to configure the organization admin user:
***
#### Pre-migration preparation
You must configure the authorization-system service before migration. There are two supported approaches:
Set the following authorization-system environment variables:
* `SPRING_LIQUIBASE_PARAMETERS_CREATEDEFAULTWORKSPACE=true`: This environment variable is mandatory for migrations.
* `SPRING_LIQUIBASE_PARAMETERS_DEFAULTORGADMINUSERNAME=`: The value for the environment variable must be set with the username of the user that must be the first organization administrator.
Set the following environment variables:
* `SPRING_LIQUIBASE_PARAMETERS_CREATEDEFAULTWORKSPACE=true`: This environment variable is mandatory for migrations.
* `SPRING_LIQUIBASE_PARAMETERS_DEFAULTORGADMINUSERSUBJECTID=`: The value for the environment variable can be set with the unique identifier of the user that must be the first organization administrator. The value that is added by auth server on the access token (”sub” attribute - subject identifier in JWT token).
To get the subject ID of the admin user, extract it from the JWT token of the admin user.

Make sure the admin user is created in Keycloak before deploying the authorization-system service.
***
## Update service accounts
FlowX.AI 5.1.0 introduces new service account role requirements that must be configured before service deployment.
All service accounts used by FlowX.AI services must have the `SA_FLOWX` role assigned. Services will not authenticate properly without this role.
***
## Additional Keycloak roles requirements for authorization-system service
Before deploying the `authorization-system` service, you must assign additional roles to its service account in Keycloak to enable user management operations.
**Required client roles for the service account:**
```json theme={"system"}
{
"clientRoles" : {
"realm-management" : [
"manage-users",
"query-users",
"view-users",
"manage-realm"
]
}
}
```
***
## Process instances migration
All active process instances will be migrated under default workspace.
For clients who need inactive process instances migrated, we’ll provide migration script which will be run post migration.
# Renderer SDKs
Source: https://docs.flowx.ai/release-notes/v5.x/v5.1.x-lts/v5.1.0-september-2025/migrating-from-v4.7.x-to-5.1/renderers
This guide assists in migrating from FlowX.AI v4.7.x to v5.1.0.
## Angular SDK migration guide
### Upgrading to the new SDK libraries
The Angular SDK node packages have been updated to support Workspaces, introduced in FlowX.AI v5.1.0. All container apps that want to use the new SDKs should update to the latest package versions and implement the required workspace configuration.
* Remove old FlowX.AI SDK libraries (if upgrading from earlier versions):
```bash theme={"system"}
npm uninstall @flowx/angular-sdk @flowx/core-sdk @flowx/core-theme @flowx/angular-theme @flowx/angular-ui-toolkit
```
* Install new FlowX.AI v5.1.0 packages:
```bash theme={"system"}
npm install \
@flowx/core-sdk@ \
@flowx/core-theme@ \
@flowx/angular-sdk@ \
@flowx/angular-theme@ \
@flowx/angular-ui-toolkit@ \
@angular/cdk@19 \
@types/event-source-polyfill
```
Replace `` with the correct version corresponding to your FlowX.AI v5.1.0 platform version. Check: **Release Notes → v5.1.0 → Deployment guidelines → Component versions**.
* Ensure your Angular version is compatible:
```bash theme={"system"}
npm install -g @angular/cli@19
```
* Verify system requirements:
* Node.js: v20.9.0 or higher
* npm: v10.1.0 or higher
* Angular: \~19
* Run through all the migration steps in the [New SDK API changes](#new-sdk-api-changes) section below.
### SDK API changes
In the Angular SDK, the `` component has a new mandatory parameter: `workspaceId`.
| Name | Description | Type | Requirement |
| ------------- | ---------------------------------------------------------------------------- | -------- | ----------- |
| `workspaceId` | **Workspace identifier** that contains the project and process to be started | `string` | Mandatory |
Add the definition for this property in your component:
```typescript theme={"system"}
export class AppComponent {
workspaceId = 'your-workspace-id';
// ... other existing properties
}
```
Use this parameter as input for the `` component:
```html theme={"system"}
>
```
### Task management component changes
The task management component now also requires workspace context:
```html theme={"system"}
>
```
***
## React SDK migration guide
### Upgrading to the new SDK libraries
The React SDK node packages have been updated to support Workspaces, introduced in FlowX.AI v5.1.0. All container apps that want to use the new SDKs should update to the latest package versions and implement the required workspace configuration.
* Remove old FlowX.AI SDK libraries:
```bash theme={"system"}
npm uninstall @flowx/react-sdk @flowx/core-sdk @flowx/core-theme @flowx/react-theme @flowx/react-ui-toolkit
```
* Install new FlowX.AI v5.1.0 packages:
```bash theme={"system"}
npm install \
react@18 \
react-dom@18 \
@flowx/core-sdk@ \
@flowx/core-theme@ \
@flowx/react-sdk@ \
@flowx/react-theme@ \
@flowx/react-ui-toolkit@ \
air-datepicker@3 \
axios \
ag-grid-react@32
```
Replace `` with the correct version corresponding to your FlowX.AI v5.1.0 platform version. Check: **Release Notes → v5.1.0 → Deployment guidelines → Component versions**.
* Ensure your React version is compatible:
```bash theme={"system"}
npm install react@~18 react-dom@~18
```
* Verify Node.js version compatibility:
* Node.js: v18.16.9 or higher
* npm: v10.8.0 or higher
* Run through all the migration steps in the [New SDK API changes](#new-sdk-api-changes) section below.
### New SDK API changes
In the React SDK, the `` component has a new mandatory parameter: `workspaceId`.
| Name | Description | Type | Requirement |
| ------------- | ---------------------------------------------------------------------------- | -------- | ----------- |
| `workspaceId` | **Workspace** identifier that contains the project and process to be started | `string` | Mandatory |
Add the definition for this property in your component:
```typescript theme={"system"}
const workspaceId = 'your-workspace-id';
```
Use this parameter as input for the `` component:
```tsx theme={"system"}
```
### Task management component changes
The task management component now also requires workspace context:
```tsx theme={"system"}
```
## Android SDK migration guide
### System requirements
System requirements:
* **minSdk = 26**
* **compileSdk = 35**
The SDK library was build using:
* **[Android Gradle Plugin](https://developer.android.com/build/releases/gradle-plugin) 8.11.0**
* **[Gradle](https://gradle.org/releases/) 8.14.2**
* **[Kotlin](https://kotlinlang.org/) 2.2.0**
### Library dependencies
Impactful dependencies:
* **[Android Core KTX](https://developer.android.com/kotlin/ktx#core) 1.16.0**
* **[Android Activity Compose](https://developer.android.com/jetpack/androidx/releases/activity) 1.10.1**
* **[Compose BOM](https://developer.android.com/jetpack/compose/bom/bom-mapping) 2025.09.01**
* **[Compose Navigation](https://developer.android.com/develop/ui/compose/navigation) 2.9.1**
* **[Android Lifecycle](https://developer.android.com/jetpack/androidx/releases/lifecycle) 2.9.1**
* **[Accompanist Permissions](https://google.github.io/accompanist/permissions/) 0.37.3**
* **[Kotlin Coroutines](https://kotlinlang.org/docs/coroutines-overview.html) 1.10.2**
* **[Android DataStore](https://developer.android.com/jetpack/androidx/releases/datastore) 1.1.7**
* **[Android Preference](https://developer.android.com/jetpack/androidx/releases/preference) 1.2.1**
* **[Android Security](https://developer.android.com/jetpack/androidx/releases/security) 1.1.0-beta01**
* **[OkHttp BOM](https://square.github.io/okhttp/) 4.12.0**
* **[Retrofit](https://square.github.io/retrofit/) 2.12.0**
* **[Moshi](https://github.com/square/moshi) 1.15.2**
* **[Coil BOM](https://coil-kt.github.io/coil/) 3.2.0**
* **[Android Core Library Desugaring](https://developer.android.com/studio/write/java8-support#library-desugaring) 2.1.5**
Other dependencies:
* **[Android Annotation](https://developer.android.com/jetpack/androidx/releases/annotation) 1.9.1**
* **[Google Protobuf](https://github.com/protocolbuffers/protobuf/tree/main/java#use-java-protocol-buffers-on-android) 4.31.1**
* **[Mozilla Rhino](https://github.com/mozilla/rhino) 1.8.0**
* **[JetBrains Markdown](https://github.com/JetBrains/markdown) 0.7.3**
* **[CommonMark](https://github.com/commonmark/commonmark-java) 0.25.0**
- **[Koin](https://insert-koin.io/)** dependency has been removed
- **[Gson](https://github.com/google/gson)** dependency has been removed
Some dependencies were removed, others got updated.
It is highly recommended that the container projects to be aligned with these versions in order to avoid any compatibility issues.
### New SDK Migration Guide
To successfully build and run your project with the updated SDK, please follow these sequential steps within your container project:
```kotlin [rootProject]/app/build.gradle.kts lines theme={"system"}
implementation("ai.flowx.android:android-sdk:4.0.25") // [!code --]
implementation("ai.flowx.android:sdk:9.0.2") // [!code ++]
```
```kotlin [rootProject]/app/build.gradle.kts lines theme={"system"}
android {
compileSdk = 34 // [!code --]
compileSdk = 35 // [!code ++]
}
```
```kotlin [rootProject]/app/build.gradle.kts theme={"system"}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8 // [!code --]
sourceCompatibility = JavaVersion.VERSION_17 // [!code ++]
targetCompatibility = JavaVersion.VERSION_1_8 // [!code --]
targetCompatibility = JavaVersion.VERSION_17 // [!code ++]
}
kotlinOptions { // [!code --]
jvmTarget = "1.8" // [!code --]
} // [!code --]
kotlin { // [!code ++]
compilerOptions { // [!code ++]
jvmTarget.set(JvmTarget.JVM_17) // [!code ++]
} // [!code ++]
} // [!code ++]
```
```kotlin [rootProject]/build.gradle.kts theme={"system"}
plugins {
id("com.android.application") version "M.m.p" apply false // where M.m.p < 8.10.0 // [!code --]
id("com.android.application") version "8.10.0" apply false // [!code ++]
}
```
```properties [root-project]/gradle/wrapper/gradle-wrapper.properties icon="ini" theme={"system"}
distributionUrl=https\://services.gradle.org/distributions/gradle-M.m.p-bin.zip # where M.m.p < 8.11.1 [!code --]
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip # [!code ++]
```
```kotlin [rootProject]/build.gradle.kts theme={"system"}
plugins {
id("org.jetbrains.kotlin.android") version "1.m.p" apply false // [!code --]
id("org.jetbrains.kotlin.android") version "2.2.0" apply false // [!code ++]
}
```
```kotlin [rootProject]/build.gradle.kts theme={"system"}
plugins {
id("org.jetbrains.kotlin.plugin.compose") version "2.2.0" apply false // [!code ++]
}
```
```kotlin [rootProject]/app/build.gradle.kts theme={"system"}
plugins {
id("org.jetbrains.kotlin.plugin.compose") // [!code ++]
}
```
```kotlin [rootProject]/app/build.gradle.kts theme={"system"}
android {
composeOptions { // [!code --]
kotlinCompilerExtensionVersion = "1.m.p" // [!code --]
} // [!code --]
}
```
It is recommended to use the same version as the one configured for the **Kotlin** pluginConsult the [Compose Compiler Migration Guide](https://kotlinlang.org/docs/compose-compiler-migration-guide.html)
```kotlin [rootProject]/app/build.gradle.kts theme={"system"}
android {
compileOptions { // [!code ++]
isCoreLibraryDesugaringEnabled = true // [!code ++]
} // [!code ++]
}
dependencies {
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5") // [!code ++]
}
```
```kotlin [rootProject]/app/src/main/[java|kotlin]/com/example/MyApp.kt theme={"system"}
import ai.flowx.android.sdk.main.FlowxOwner
class MyApp : Application(), FlowxOwner { // [!code ++]
override val flowx: Lazy = lazy { Flowx.getInstance() } // [!code ++]
}
```
As a result of this change, all calls to `FlowxSdkApi.getInstance()` must be replaced with `Flowx.getInstance()`.
```kotlin theme={"system"}
import ai.flowx.android.sdk.FlowxSdkApi // [!code --]
import ai.flowx.android.sdk.main.Flowx // [!code ++]
FlowxSdkApi.getInstance() // [!code --]
Flowx.getInstance() // [!code ++]
```
```kotlin theme={"system"}
import ai.flowx.android.sdk.process.model.SdkConfig // [!code --]
import ai.flowx.android.sdk.api.Config // [!code ++]
Flowx.getInstance().init(
context = applicationContext,
config = SdkConfig(...), // [!code --]
config = object : Config { ... }, // [!code ++]
)
```
The `config` parameter is no longer a `data class`. It is now an `interface`.
```kotlin theme={"system"}
data class SdkConfig(...) // [!code --]
interface Config { ... } // [!code ++]
```
When passing custom validators as a configuration parameter, the linter might show errors related to inferring the type of the `validators` property. To fix, use `Map Boolean>?` as a type.
```kotlin focus={5,9} theme={"system"}
FlowxSdkApi.getInstance().init( // [!code --]
Flowx.getInstance().init( // [!code ++]
context = applicationContext,
config = SdkConfig( // [!code --]
enableLog = true, // [!code --]
), // [!code --]
config = object : Config {
//...
override val logEnabled: Boolean get() = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE // [!code ++]
}, // [!code ++]
)
```
```kotlin focus={1,4,5} theme={"system"}
Flowx.getInstance().init(
context = applicationContext,
config = object : Config { ... },
accessTokenProvider = null, // null by default; can be set later, depending on the existing authentication logic // [!code --]
)
```
Authentication will now be managed by calling the `Flowx.getInstance().setAccessToken(accessToken: String?)` method with the appropriate argument
Refer to the following steps for detailed information about the authentication process migration
```kotlin theme={"system"}
import ai.flowx.android.sdk.ui.components.custom.CustomComponentsProvider // [!code --]
import ai.flowx.android.sdk.api.custom.components.CustomComponentsProvider // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderProvider // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeaderProvider // [!code ++]
```
```kotlin theme={"system"}
// if used explicitly
import ai.flowx.android.sdk.analytics.AnalyticsCollector // [!code --]
import ai.flowx.android.sdk.api.analytics.AnalyticsCollector // [!code ++]
import ai.flowx.android.sdk.analytics.Event // [!code --]
import ai.flowx.android.sdk.api.analytics.Event // [!code ++]
```
```kotlin theme={"system"}
import ai.flowx.android.sdk.NewProcessStartedHandler // [!code --]
import ai.flowx.android.sdk.api.NewProcessStartedHandler // [!code ++]
```
**Summary of changes:**
```kotlin diff v4.0.25..v9.0.2 focus={2,5,9,13,17,20,24,27,41-52,63} theme={"system"}
import ai.flowx.android.sdk.FlowxSdkApi // [!code --]
import ai.flowx.android.sdk.main.FlowxSdk // [!code ++]
import ai.flowx.android.sdk.process.model.SdkConfig // [!code --]
import ai.flowx.android.sdk.api.Config // [!code ++]
// if used explicitly
import ai.flowx.android.sdk.ui.components.custom.CustomComponentsProvider // [!code --]
import ai.flowx.android.sdk.api.custom.components.CustomComponentsProvider // [!code ++]
// if used explicitly
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderProvider // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeaderProvider // [!code ++]
// if used explicitly
import ai.flowx.android.sdk.analytics.AnalyticsCollector // [!code --]
import ai.flowx.android.sdk.api.analytics.AnalyticsCollector // [!code ++]
import ai.flowx.android.sdk.analytics.Event // [!code --]
import ai.flowx.android.sdk.api.analytics.Event // [!code ++]
// if used explicitly
import ai.flowx.android.sdk.NewProcessStartedHandler // [!code --]
import ai.flowx.android.sdk.api.NewProcessStartedHandler // [!code ++]
FlowxSdkApi.getInstance().init( // [!code --]
Flowx.getInstance().init( // [!code ++]
context = applicationContext,
config = SdkConfig( // [!code --]
baseUrl = "flowx base url", // [!code --]
enginePath = "flowx engine path", // [!code --]
imageBaseUrl = "flowx image base url", // [!code --]
language = "en", // [!code --]
locale = Locale.getDefault(), // [!code --]
validators = mapOf("cnp" to { it.length == 13 }), // a simplified example for custom validator, named "cnp", which checks only the length of the given data // [!code --]
customHeaders = mapOf("Custom-Header" to "custom header value"), // [!code --]
updateStateEnabled = true, // [!code --]
cacheDocuments = true, // [!code --]
enableLog = true, // [!code --]
), // [!code --]
config = object : Config { // [!code ++]
override val baseUrl: String = "flowx base url" // [!code ++]
override val enginePath: String = "flowx engine path" // [!code ++]
override val imageBaseUrl: String = "flowx image base url" // [!code ++]
override val language: String = "en" // defaults to "en" // [!code ++]
override val locale: Locale = Locale.getDefault() // defaults to Locale.getDefault() // [!code ++]
override val validators: Map Boolean>? = mapOf("cnp" to { it.length == 13 }) // a simplified example for custom validator, named "cnp", which checks only the length of the given data // defaults to null // [!code ++]
override val customHeaders: Map? = mapOf("Custom-Header" to "custom header value") // defaults to null // [!code ++]
override val updateStateEnabled: Boolean = true // defaults to true // [!code ++]
override val cacheDocuments: Boolean = true // defaults to true // [!code ++]
override val logEnabled: Boolean get() = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE // or whatever value fits your use case // [!code ++]
}, // [!code ++]
accessTokenProvider = null, // null by default; can be set later, depending on the existing authentication logic // [!code --]
customComponentsProvider = object : CustomComponentsProvider {...},
customStepperHeaderProvider = object : CustomStepperHeaderProvider { ... },
analyticsCollector = { event ->
when (event) {
is Event.Screen -> Log.i("Analytics", "Event.Screen(value = ${event.data.value})")
is Event.Action -> Log.i("Analytics", "Event.Action(value = ${event.data.value}, screen = ${event.data.screen}, component = ${event.data.component}, label = ${event.data.label})")
}
},
onNewProcessStarted = object : NewProcessStartedHandler.Delegate { ... }
)
```
The `setAccessTokenProvider` method on the SDK instance has been replaced with `setAccessToken`.
```kotlin theme={"system"}
import ai.flowx.android.sdk.FlowxSdkApi.Companion.AccessTokenProvider // [!code --]
fun setAccessTokenProvider(accessTokenProvider: AccessTokenProvider) // [!code --]
fun setAccessToken(accessToken: String?) // null or empty argument clears the token // [!code ++]
```
Consequently, all calls to `setAccessTokenProvider` must be replaced with calls to `setAccessToken`:
```kotlin theme={"system"}
FlowxSdkApi.getInstance().setAccessTokenProvider(accessTokenProvider = { "accessTokenValue" }) // [!code --]
Flowx.getInstance().setAccessToken("accessTokenValue") // [!code ++]
```
To be able to query for substitution tags or media library items in order to display them in the `CloseModalProcessConfirmAlert`, the `closeModalFunc` lambda passed as a parameter when starting (i.e. `Flowx.getInstance.startProcess(...)`) or continuing (i.e. `Flowx.getInstance.continueProcess(...)`) is now scoped to the `CloseModalProcessScope` interface, which allows that.
```kotlin theme={"system"}
interface CloseModalProcessScope {
public fun replaceSubstitutionTag(string: String): String
public fun getMediaResourceUrl(key: String): String?
}
```
This restricts the usage of previously unrestricted exposed functions to only within the context of the `CloseModalProcessScope` receiver (i.e. they can now be called only from inside a @Composable running in this scope).
Methods within the `CloseModalProcessScope` are now called through the actual scope itself, rather than relying on `Flowx.getInstance()`, since they are no longer visible on the SDK instance.
```kotlin theme={"system"}
import ai.flowx.android.sdk.api.CloseModalProcessScope
@Composable
private fun ProcessContent(
uiState: ProcessViewModel.UiState,
onProcessEnded: (() -> Unit)? = null,
onCloseProcessModalFunc: ((processName: String) -> Unit)? = null, // [!code --]
onCloseProcessModalFunc: (CloseModalProcessScope.(processName: String) -> Unit)? = null, // [!code ++]
) {
when {
!uiState.projectId.isNullOrBlank() && !uiState.processName.isNullOrBlank() -> {
Flowx.getInstance().startProcess(
projectId = uiState.projectId,
processName = uiState.processName,
isModal = true,
onProcessEnded = { onProcessEnded?.invoke() },
closeModalFunc = { processName -> onCloseProcessModalFunc?.invoke(processName) }, // [!code --]
closeModalFunc = { processName -> onCloseProcessModalFunc?.invoke(this, processName) }, // [!code ++]
).invoke()
}
!uiState.processUuid.isNullOrBlank() -> {
Flowx.getInstance().continueProcess(
processUuid = uiState.processUuid,
isModal = true,
onProcessEnded = { onProcessEnded?.invoke() },
closeModalFunc = { processName -> onCloseProcessModalFunc?.invoke(processName) }, // [!code --]
closeModalFunc = { processName -> onCloseProcessModalFunc?.invoke(this, processName) }, // [!code ++]
).invoke()
}
}
}
```
When using it, an approach could be this:
```kotlin ProcessActivity.kt theme={"system"}
setContent {
var closeModalProcessScope by remember { mutableStateOf(null) }
val showCloseModalProcessAlert = remember { mutableStateOf(false) }
ProcessContent(
...
onCloseProcessModalFunc = { processName ->
closeModalProcessScope = this
showCloseModalProcessAlert.value = true
},
)
closeModalProcessScope?.CloseModalProcessConfirmAlert(show = showCloseModalProcessAlert)
}
@Composable
private fun CloseModalProcessScope.CloseModalProcessConfirmAlert(show: MutableState) {
if (show.value) {
AlertDialog(
...
text = { Text(replaceSubstitutionTag("@@close_message")) } // `replaceSubstitutionTag` is now accessible through the `CloseModalProcessScope` scope
)
}
}
```
Update the related imports:
```kotlin theme={"system"}
import ai.flowx.android.sdk.ui.components.custom.CustomComponentsProvider // [!code --]
import ai.flowx.android.sdk.api.custom.components.CustomComponentsProvider // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.CustomComposable // [!code --]
import ai.flowx.android.sdk.api.custom.components.CustomComponent // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.CustomComposableComponent // [!code --]
import ai.flowx.android.sdk.ui.components.custom.CustomView // [!code --]
import ai.flowx.android.sdk.ui.components.custom.CustomViewComponent // [!code --]
import ai.flowx.android.sdk.ui.components.custom.CustomComponentAction // [!code --]
import ai.flowx.android.sdk.api.custom.components.CustomComponentAction // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.FxEnumerationItem // [!code --]
import ai.flowx.android.sdk.api.custom.components.FxEnumeration // [!code ++]
import ai.flowx.android.sdk.api.custom.components.CustomComponentScope // [!code ++]
```
The new class hierarchy structure is as follows:
```kotlin v4.0.25 theme={"system"}
interface CustomComponentsProvider {
fun provideCustomComposableComponent(): CustomComposableComponent?
@Deprecated(...) fun provideCustomViewComponent(): CustomViewComponent? = null
}
interface CustomComposableComponent {
fun provideCustomComposable(componentIdentifier: String): CustomComposable?
}
interface CustomComposable {
@Deprecated(...) val isDefined: Boolean
val composable: @Composable () -> Unit
fun populateUi(data: Any?)
fun populateUi(actions: Map)
fun validate(): Boolean = true
fun saveData(): JSONObject? = null
}
@Deprecated(...)
interface CustomViewComponent {
@Deprecated(...) fun provideCustomView(componentIdentifier: String): CustomView
}
@Deprecated(...)
interface CustomView {...}
```
```kotlin v9.0.2 theme={"system"}
interface CustomComponentsProvider {
fun provideCustomComponent(componentIdentifier: String): CustomComponent?
}
interface CustomComponent {
val composable: @Composable CustomComponentScope.() -> Unit
fun populateUi(data: Any?)
fun populateUi(actions: Map)
fun validate(): Boolean = true
fun saveData(): JSONObject? = null
}
```
The structural changes include:
* The `CustomComposable` class has been renamed to `CustomComponent`.
* All deprecated properties, methods, and interfaces have been removed. Support for the Android classical View system has been completely discontinued.
* The `provideCustomComposableComponent()` method within `CustomComponentsProvider` has been replaced with `fun provideCustomComponent(): CustomComponent?`.
* The `CustomComposableComponent` class has been removed.
* The provided @Composable function passed to the `composable` property of the `CustomComponent` interface can now only exist and be called within the context of a `CustomComponentScope` receiver.
```kotlin theme={"system"}
interface CustomComponent {
val composable: @Composable () -> Unit // [!code --]
val composable: @Composable CustomComponentScope.() -> Unit // [!code ++]
}
```
```kotlin theme={"system"}
interface CustomComponentScope {
fun executeAction(action: CustomComponentAction, params: JSONObject? = null)
fun replaceSubstitutionTag(string: String): String
fun getMediaResourceUrl(key: String): String?
suspend fun getEnumeration(name: String, parentName: String? = null): FxEnumeration?
}
```
This restricts the usage of previously unrestricted exposed functions to only within the context of the `CustomComponentScope` receiver (i.e., they can now be called only from within a custom component implementation).
Methods within the `CustomComponentScope` are now called through the actual scope itself, rather than relying on `Flowx.getInstance()`, since they are no longer visible on the SDK instance.
```kotlin theme={"system"}
Flowx.getInstance().executeAction(...) // [!code --]
flowxScope.executeAction(...) // [!code ++]
Flowx.getInstance().replaceSubstitutionTag(...) // [!code --]
flowxScope.replaceSubstitutionTag(...) // [!code ++]
Flowx.getInstance().getMediaResourceUrl(...) // [!code --]
flowxScope.getMediaResourceUrl(...) // [!code ++]
Flowx.getInstance().getEnumeration(...) // [!code --]
flowxScope.getEnumeration(...) // [!code ++]
```
Consequently, the following changes should be made to access the scope within the custom component ViewModel:
```kotlin MyCustomComponentViewModel.kt theme={"system"}
class MyCustomComponentViewModel() : ViewModel() {
private lateinit var flowxScope: CustomComponentScope
fun setFlowxScope(scope: CustomComponentScope) {
flowxScope = scope
}
fun executeSomeRealAction() {
actions["someRealAction"]?.let {
if (this@MyCustomComponentViewModel::flowxScope.isInitialized) {
flowxScope.executeAction(
action = it,
params = JSONObject() // e.g. JSONObject("{\"someParameter\": \"someValue\"}")
)
}
}
}
}
```
```kotlin MyCustomComponent.kt theme={"system"}
@Composable
private fun CustomComponentScope.MyCustomComponent(
viewModel: MyCustomComponentViewModel
) {
viewModel.setFlowxScope(this@MyCustomComponent)
// here goes the rest of the UI implementation
}
```
* The `CustomComponentAction` is no longer a `data class` as before. It is now an `interface`.
The exposed data has been reduced to the maximum required for executing the action:
```kotlin v4.0.25 theme={"system"}
data class CustomComponentAction(
internal val actionName: String?,
internal val type: ActionType?,
internal var tokenUuid: String?,
internal var uiActionFlowxUuid: String,
internal val context: String,
internal val params: Params?,
internal val keys: List?,
internal val customBody: JsonElement?,
internal val collectionItemData: JsonObject?,
internal val componentTemplateConfigId: Int,
)
```
```kotlin v9.0.2 theme={"system"}
interface CustomComponentAction {
val name: String
val uiTemplateId: Int
val uiTemplateContext: String
val uiTemplateReusableContext: String?
}
```
* When querying for an enumeration by calling the `CustomComponentScope.getEnumeration(...)` method, the returned type has changed from `List` to `FxEnumeration`
```kotlin v4.0.25 theme={"system"}
data class FxEnumerationItem(
val type: String? = null,
val order: Int? = null,
val childContentDescription: ChildContentDescription? = null,
val code: String? = null,
val content: String? = null
) {
data class ChildContentDescription(
val name: String? = null
)
}
```
```kotlin v9.0.2 theme={"system"}
interface FxEnumeration {
val name: String
val items: List
val parentName: String?
interface Item {
val code: String
val content: String?
val childNomenclatorName: String?
val order: Int
}
}
```
These changes are reflected in an actual implementation as shown below:
```kotlin v4.0.25 expandable theme={"system"}
import ai.flowx.android.sdk.FlowxSdkApi
import ai.flowx.android.sdk.ui.components.custom.CustomComponentAction
import ai.flowx.android.sdk.ui.components.custom.CustomComponentsProvider
import ai.flowx.android.sdk.ui.components.custom.CustomComposable
import ai.flowx.android.sdk.ui.components.custom.CustomComposableComponent
import ai.flowx.android.sdk.ui.components.custom.CustomView
import ai.flowx.android.sdk.ui.components.custom.CustomViewComponent
import ai.flowx.external.android.template.app.R
import android.content.Context
import android.util.AttributeSet
import android.view.View
import android.widget.Button
import android.widget.LinearLayout
import android.widget.TextView
import android.widget.Toast
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LifecycleRegistry
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelStore
import androidx.lifecycle.ViewModelStoreOwner
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.compose.viewModel
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.launch
import org.json.JSONObject
class CustomComponentsProviderImpl : CustomComponentsProvider {
override fun provideCustomComposableComponent(): CustomComposableComponent? {
return object : CustomComposableComponent {
override fun provideCustomComposable(componentIdentifier: String): CustomComposable =
object : CustomComposable {
val data: MutableStateFlow = MutableStateFlow(null)
var actions: Map = emptyMap()
override val isDefined: Boolean
get() = when (componentIdentifier) {
"myCustomComponent" -> true // NOTE: set this to false to use the legacy view system instead of compose, which is mainstream now
else -> false
}
override val composable: @Composable () -> Unit = when (componentIdentifier) {
"myCustomComponent" -> { {
val viewModel = remember { MyCustomComponentViewModel(data, actions) }
MyCustomComponent(viewModel = viewModel)
} }
else -> { {} }
}
override fun populateUi(data: Any?) {
this.data.value = data
}
override fun populateUi(actions: Map) {
this.actions = actions
}
// Optional override, defaults to `true`.
override fun validate(): Boolean = true
// Optional override, defaults to `null`.
override fun saveData(): JSONObject? = null
}
}
}
override fun provideCustomViewComponent(): CustomViewComponent? {
return object : CustomViewComponent {
override fun provideCustomView(componentIdentifier: String) = object : CustomView {
val data: MutableStateFlow = MutableStateFlow(null)
var actions: Map = emptyMap()
override val isDefined: Boolean
get() = when (componentIdentifier) {
"myCustomComponent" -> true // NOTE: set the compose equivalent component to false to use the legacy view system instead of compose (which is mainstream now)
else -> false
}
override fun getView(context: Context): View = when (componentIdentifier) {
"myCustomComponent" -> myCustomComponent(context, data, actions)
else -> View(context)
}
override fun populateUi(data: Any?) {
this.data.value = data
}
override fun populateUi(actions: Map) {
this.actions = actions
}
}
}
}
}
@Composable
private fun MyCustomComponent(
viewModel: MyCustomComponentViewModel = viewModel()
) {
val firstName by viewModel.firstName.collectAsState()
val lastName by viewModel.lastName.collectAsState()
val dateOfBirth by viewModel.dateOfBirth.collectAsState()
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
) {
Text(
text = "Compose Custom Component",
style = MaterialTheme.typography.titleLarge,
)
Spacer(modifier = Modifier.height(16.dp))
Column(
modifier = Modifier
.background(color = Color(0x80FFFF00))
.padding(16.dp)
.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(4.dp)
) {
Text(
text = "Client: $firstName $lastName",
style = MaterialTheme.typography.titleMedium,
)
Text(
text = "Date of Birth: $dateOfBirth",
style = MaterialTheme.typography.titleMedium,
)
}
val context = LocalContext.current
TextButton(
onClick = {
// enable and adjust values to test the action (which was prior defined in the process)
// viewModel.executeSomeRealAction()
Toast.makeText(context, "Define action in the process and enable its execution in the code", Toast.LENGTH_LONG).show()
}
) {
Text(text = "Confirm")
}
}
}
private fun myCustomComponent(
context: Context,
data: MutableStateFlow = MutableStateFlow(null),
actions: Map = emptyMap(),
): View {
return CustomComponentView(context = context, data = data, actions = actions)
}
class CustomComponentView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0,
data: MutableStateFlow = MutableStateFlow(null),
actions: Map = emptyMap(),
) : LinearLayout(context, attrs, defStyleAttr), ViewModelStoreOwner, LifecycleOwner {
private val registry = LifecycleRegistry(this)
private var job: Job? = null
private lateinit var client: TextView
private lateinit var dateOfBirth: TextView
private val viewModel: MyCustomComponentViewModel by lazy {
ViewModelProvider(
store = viewModelStore,
factory = object : ViewModelProvider.Factory {
override fun create(modelClass: Class): T {
@Suppress("UNCHECKED_CAST")
return MyCustomComponentViewModel(data, actions) as T
}
}
)[MyCustomComponentViewModel::class.java]
}
init {
initView()
}
private fun initView() {
View.inflate(context, R.layout.my_custom_component, this)
client = findViewById(R.id.tvClient)
dateOfBirth = findViewById(R.id.tvDateOfBirth)
findViewById
Update the related imports:
```kotlin theme={"system"}
import ai.flowx.android.sdk.ui.components.custom.CustomComposableStepperHeader // [!code --]
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderData // [!code --]
import ai.flowx.android.sdk.ui.components.custom.ComposableStepperHeader // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeader // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderProvider // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeaderProvider // [!code ++]
```
The new class hierarchy structure is as follows:
```kotlin v4.0.25 theme={"system"}
interface CustomStepperHeaderProvider {
fun provideCustomComposableStepperHeader(): CustomComposableStepperHeader?
}
interface CustomComposableStepperHeader {
fun provideComposableStepperHeader(): ComposableStepperHeader
}
interface ComposableStepperHeader {
val composable: @Composable (data: CustomStepperHeaderData) -> Unit
}
interface CustomStepperHeaderData { ... }
```
```kotlin v9.0.2 theme={"system"}
interface CustomStepperHeaderProvider {
fun provideCustomStepperHeader(): CustomStepperHeader?
}
interface CustomStepperHeader {
val composable: @Composable (data: Data) -> Unit
interface Data { ... }
}
```
The structural changes include:
* The `ComposableStepperHeader` class has been renamed to `CustomStepperHeader`.
* The `CustomStepperHeaderData` class has been moved under the `CustomStepperHeader` and renamed to `Data`.
* The `provideCustomComposableStepperHeader()` method within `CustomStepperProvider` has been replaced with `fun provideCustomStepperHeader(): CustomStepperHeader?`.
* The `CustomComposableStepperHeader` class has been removed.
These changes are reflected in an actual implementation as shown below:
```kotlin diff v4.0.25..v9.0.2 focus={2,5,10,14,16,18,22,23,26} theme={"system"}
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderProvider // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeaderProvider // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.ComposableStepperHeader // [!code --]
import ai.flowx.android.sdk.api.custom.stepper.CustomStepperHeader // [!code ++]
import ai.flowx.android.sdk.ui.components.custom.CustomComposableStepperHeader // [!code --]
import ai.flowx.android.sdk.ui.components.custom.CustomStepperHeaderData
class CustomStepperHeaderProviderImpl : CustomStepperHeaderProvider {
override fun provideCustomComposableStepperHeader(): CustomComposableStepperHeader? { // [!code --]
return object : CustomComposableStepperHeader { // [!code --]
override fun provideComposableStepperHeader(): ComposableStepperHeader { // [!code --]
override fun provideCustomStepperHeader(): CustomStepperHeader? { // [!code ++]
return object : ComposableStepperHeader { // [!code --]
return object : CustomStepperHeader { // [!code ++]
override val composable: @Composable (data: CustomStepperHeaderData) -> Unit // [!code --]
override val composable: @Composable ((CustomStepperHeader.Data) -> Unit) // [!code ++]
get() = @Composable { data ->
// custom header implementation
}
}
}
} // [!code --]
} // [!code --]
}
```
For runtime environment changes, use the `changeEnvironment` method available on the SDK instance.
```kotlin theme={"system"}
fun updateConfig(config: SdkConfig) // [!code --]
fun changeEnvironment(baseUrl: String, imageBaseUrl: String, enginePath: String) // [!code ++]
```
Do not change the environment while displaying a running processWhen changing the environment, ensure the access token is updated properly
```kotlin diff v4.0.25..v9.0.2 theme={"system"}
fun startProcess(
workspaceId: String, // [!code ++]
projectId: String,
processName: String,
params: JSONObject? = null,
isModal: Boolean = false,
onProcessEnded: (() -> Unit)? = null,
closeModalFunc: (CloseModalProcessScope.(processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
The `workspaceId` is the identifier of the workspace that contains the project and process to be started
```kotlin diff v4.0.25..v9.0.2 theme={"system"}
fun setupTheme(
workspaceUuid: String, // [!code ++]
themeUuid: String,
fallbackThemeJsonFileAssetsPath: String? = null,
appearance: Flowx.ThemeAppearance = Flowx.ThemeAppearance.LIGHT, // or DARK
@MainThread onCompletion: () -> Unit,
)
```
The `workspaceId` is the identifier of the workspace that contains the theme to be loaded
## iOS SDK migration guide
### SDK API changes
#### Start process
The start process API require a `workspaceId`.
```swift theme={"system"}
public func startProcess(navigationController: UINavigationController,
workspaceId: String,
projectId: String,
name: String,
params: [String: Any]?,
isModal: Bool = false,
showLoader: Bool = false,
onProcessEnded: (() -> Void)? = nil)
```
```swift theme={"system"}
public func startProcess(tabBarController: UITabBarController,
workspaceId: String,
projectId: String,
name: String,
params: [String: Any]?,
isModal: Bool = false,
showLoader: Bool = false,
onProcessEnded: (() -> Void)? = nil)
```
#### Setup theme
The setup theme API requires a `workspaceId`.
```swift theme={"system"}
public func setupTheme(withUuid uuid: String,
workspaceId: String,
localFileUrl: URL? = nil,
appearance: SwiftUI.ColorScheme? = .light,
completion: (() -> Void)?)
```
# Post-upgrade troubleshooting
Source: https://docs.flowx.ai/release-notes/v5.x/v5.1.x-lts/v5.1.0-september-2025/migrating-from-v4.7.x-to-5.1/troubleshooting
Common issues and solutions that may occur after upgrading from FlowX v4.7.x to v5.1.0.
This section covers common issues that may occur after completing the upgrade to FlowX.AI 5.1.0 and their solutions.
## Designer login issues
### DataIntegrityViolationException error
If you cannot login to FlowX Designer after the 5.x upgrade and encounter the following error in the authorization-system logs:
```
org.springframework.dao.DataIntegrityViolationException: could not execute statement [ERROR: duplicate key value violates unique constraint "cas_user_username_key"
Detail: Key (username)=(admin@flowx.ai) already exists.] [insert into public.cas_user (created_by,created_date,email,first_name,issuer,last_name,modified_by,modified_date,subject_id,username,id) values (?,?,?,?,?,?,?,?,?,?,?)]; SQL [insert into public.cas_user (created_by,created_date,email,first_name,issuer,last_name,modified_by,modified_date,subject_id,username,id) values (?,?,?,?,?,?,?,?,?,?,?)]; constraint [cas_user_username_key]
```
**Root Cause**: This error occurs because the `sub` (subject ID) is missing from JWT tokens. Starting with Keycloak version 25, the `sub` claim is not added by default to lightweight access tokens.
**Solution**: Ensure the `basic` Client Scope is created in your Keycloak Realm and added to all FlowX clients.
Since Keycloak version 25, the `sub` claim is not added by default to JWT lightweight tokens. This is a breaking change that affects FlowX.AI authentication.
### How to verify if subject ID is missing
Try to login to FlowX Designer and note if the login fails.
1. Open your browser's Developer Tools
2. Navigate to the **Network** tab
3. Attempt to login again
4. Look for a call to: `https:///auth/realms/flowx/protocol/openid-connect/token`
5. Copy the access token from the response
1. Go to [https://jwt.io/](https://jwt.io/)
2. Paste the token in the **Encoded** section
3. Check the **Payload** section for the presence of the `sub` claim
If the `sub` claim is present, the token should contain a field like: `"sub": "12345678-1234-1234-1234-123456789abc"`
If the `sub` claim is missing, you need to configure the Client Scope in Keycloak:
1. Login to your Keycloak Admin Console
2. Navigate to your FlowX realm
3. Go to **Client Scopes**
4. Ensure the `basic` client scope exists and includes the `sub` claim
5. Add this client scope to all FlowX clients (FlowX Designer, Admin, etc.)
### Additional resources
Official Keycloak documentation about lightweight access token changes
***
## Other common issues
Additional troubleshooting sections will be added as common post-upgrade issues are identified. If you encounter issues not covered here, please consult the FlowX support team.
# FlowX.AI 5.1.0 Release Notes
Source: https://docs.flowx.ai/release-notes/v5.x/v5.1.x-lts/v5.1.0-september-2025/v5.1.0-september-2025
Introducing Workspaces, Project Data Model, Library-to-Library Dependencies, Data Mappers, Reusable Resources, and more for a more efficient and flexible development experience.
**What's new? 🆕**
Build once, use everywhere. These features transform how you develop and maintain applications by eliminating duplication and enabling sophisticated modular architectures.
🔄 [**Project Data Model (PDM)**](#project-data-model-pdm) - Define reusable data types at the project level to ensure consistency across processes\
🔄 [**Library-to-Library Dependencies**](#library-to-library-dependencies) - Create complex dependency trees with multiple levels of library-to-library relationships\
🔄 [**Data Mappers**](#data-mappers) - Visual drag-and-drop data mapping with reusable parameter definitions\
🔄 [**Reusable Resources**](#reusable-resources) - Create and manage UI Templates and Business Functions across multiple processes\
🔄 [**Files in Integration Designer**](#files-in-integration-designer) - Enhanced file management and reusability in integration workflows\
🔄 [**Resources Overrides**](#resources-overrides) - Localization and customization of core applications across multiple regions with centralized management\
🔄 [**Active Policy Overrides**](#active-policy-overrides) - User-specific and role-specific deployment policies for independent testing and controlled rollouts
### **Project Data Model (PDM)**

The new Project Data Model feature enables you to define and manage data types at the project level, which can then be reused across all processes within your project.
Define data types once at the project level and reuse them across multiple processes
Changes to PDM data types automatically propagate to all referencing processes
Configure sensitive data and reporting settings at the project level
Use data types from libraries in your Project Data Model
Define common data types like Customer, Product, or Document once instead of recreating them in each process
Update a data type in one place and have changes apply everywhere it's used
Enforce consistent naming, structure, and governance across your application
Create new processes faster by leveraging pre-defined data types

***
### **Library-to-Library Dependencies**

FlowX.AI 5.1.0 introduces the ability for libraries to depend on other libraries, enabling hierarchical dependency structures and more sophisticated modular architectures.
Create complex dependency trees with multiple levels of library-to-library relationships
Projects automatically gain access to resources from the entire dependency hierarchy
Single-version constraint ensures consistency across the dependency tree
Built-in validation prevents circular dependencies and version conflicts
Break down complex functionality into smaller, focused libraries that can depend on each other
Enable different teams to own and maintain specific libraries while building on shared foundations
Create country-specific or domain-specific libraries that extend common base libraries
Organize libraries hierarchically, reducing complexity and improving maintainability

```
Mortgage Project
├── Enums Library (1.6.0)
├── Integrations Library (2.5.0)
│ ├── Commons Library (1.1.0)
│ └── Enums Library (1.6.0) # Transitive dependency
└── Subprocesses Library (1.3.0)
└── Enums Library (1.6.0) # Transitive dependency
```
In this example, both Integrations Library and Subprocesses Library depend on other libraries, creating a multi-level hierarchy that the Mortgage Project can leverage.
### **Data Mappers**
Data Mappers enable users to visually map data transfers between components with intuitive drag-and-drop functionality while maintaining full backward compatibility with existing implementations.
Drag-and-drop interface for mapping data between source and destination components
Seamlessly connect processes, subprocesses, workflows, and business rules
Define input/output parameters with predefined and flexible parameter types
Choose between new Data Mapper or existing implementation methods
Visual interface eliminates complex configuration syntax and reduces integration errors
Define parameters once and reuse across multiple components and processes
Centralized parameter management with clear data flow visibility
Optional adoption with full backward compatibility ensures smooth transition
Map data between parent processes and subprocesses (sync/async)
Connect processes with Integration Designer workflows
Pass data to and from business rule executions
Map data between workflow nodes (REST endpoints, data persistence)
***
### **Reusable Resources**

FlowX.AI 5.1.0 introduces Reusable Resources, a revolutionary new section that eliminates repetitive development work by enabling you to create and manage both UI Templates and Business Functions that can be used across multiple processes and projects.
Create JavaScript or Python functions once and use them across multiple processes via Business Rule actions
Define input/output parameters with full project data model integration and testing capabilities
Test functions with sample data in real-time before deployment to ensure accuracy
Changes to functions automatically update all instances across your application
Design UI components once and instantiate them across multiple User Tasks with automatic data binding
Manage all templates from the new Reusable Resources section alongside Reusable Functions
Templates work seamlessly across different platforms and channels
Define UI actions within templates with two scenarios: template-defined actions or form-centric data handling
Stop recreating the same business logic and UI patterns across different processes - build once, use everywhere
Update functions and templates in one place to automatically affect all instances across your application
Replace scattered, inconsistent UI patterns with centrally managed, reusable components
Build new processes faster by leveraging pre-built, tested components instead of starting from scratch
**Customer Data Validation Function:**
* **Input**: firstName, lastName, email, phone
* **Logic**: Format validation, duplicate checking, data standardization
* **Output**: validatedCustomer object with formatted data
* **Usage**: Customer onboarding, profile updates, registration processes across all channels
**Credit Risk Assessment Function:**
* **Input**: applicationData, customerProfile, financialHistory
* **Logic**: Complex credit scoring algorithms, risk categorization, recommendation engine
* **Output**: riskScore, riskCategory, approvalRecommendation, requiredDocuments
* **Usage**: Loan applications, credit cards, mortgage processes, business lending
**Document Processing Function:**
* **Input**: documentFile, documentType, customerID
* **Logic**: OCR processing, data extraction, compliance validation
* **Output**: extractedData, validationStatus, complianceFlags
* **Usage**: KYC processes, claims processing, application reviews
**Personal Details Card Template:**
* **Root Component**: Card with professional styling
* **Contains**: Name, email, phone, address input fields with validation
* **UI Actions**: Save data, clear form, auto-populate from existing data
* **Usage**: Customer registration, profile updates, employee onboarding, contractor management
**Document Upload Section Template:**
* **Root Component**: Container with drag-and-drop functionality
* **Contains**: File upload area, progress indicators, document list, preview capabilities
* **UI Actions**: Upload documents, delete files, download copies, validate formats
* **Usage**: Loan applications, compliance documentation, claims submissions, HR processes
**Financial Summary Dashboard Template:**
* **Root Component**: Card with data visualization
* **Contains**: Balance displays, transaction history, chart components, action buttons
* **UI Actions**: Refresh data, export reports, drill-down details
* **Usage**: Account overviews, investment portfolios, expense tracking, budget management
***
### **Files in Integration Designer**

FlowX.AI 5.1.0 introduces comprehensive file handling capabilities in Integration Designer, resolving previous limitations where sending or receiving documents, photos, or any files via Integration Designer was not supported. This powerful enhancement enables seamless file exchange with external systems through automated workflows.
Process calls external API (GET/POST) and receives files in response. Integration Designer saves files to specified location and returns paths to workflow
Process sends files stored in Document Plugin or S3 Bucket to external API via POST request. Workflow transmits file path for seamless transfer
Seamless integration with FlowX.AI Document Plugin for process-specific file management and organization
Custom S3 bucket storage for files not tied to specific process instances or when Document Plugin is unavailable
Enable seamless file transfer with external systems without manual handling or complex custom integrations
Choose between Document Plugin for process-specific files or S3 Protocol for independent file operations
Files are automatically integrated into workflow processes with proper path management and metadata handling
Communicate effectively with document services, AI processing systems, report generators, and CMS platforms
**Scenario**: Generate personalized contracts using external document services
* **Process Flow**: Send customer data → External contract service → Receive generated PDF contract
* **Integration**: Customer information flows to document generation API, completed contracts return to process
* **Storage**: Generated contracts stored in Document Plugin for process tracking and audit trails
* **Business Value**: Automated contract creation with legal template compliance and version control
**Scenario**: Process uploaded documents through external AI/OCR services
* **Process Flow**: Upload document → AI processing service → Receive extracted data and processed files
* **Integration**: Documents sent to AI services for text extraction, classification, or compliance validation
* **Storage**: Processed documents and extracted data stored for business logic processing
* **Business Value**: Automated document processing with intelligent data extraction capabilities
**Scenario**: Generate business reports using external reporting services
* **Process Flow**: Send business data → Reporting service → Receive formatted reports (PDF, Excel)
* **Integration**: Business metrics and KPIs sent to specialized reporting engines
* **Storage**: Generated reports available for download and distribution workflows
* **Business Value**: Professional report generation with advanced formatting and visualization capabilities
**Scenario**: Integrate with content management systems for file organization
* **Process Flow**: Upload files → CMS integration → Organize and categorize content
* **Integration**: Files uploaded to external CMS platforms with metadata and categorization
* **Storage**: S3 Protocol ideal for CMS integrations with unassociated documents
* **Business Value**: Centralized content management with automated workflow integration
***
### **Resources Overrides**

Resources Overrides enable localization and customization of core business applications across multiple regions while maintaining centralized updates from headquarters. This powerful feature allows organizations to adapt specific business logic, compliance requirements, or local regulations without losing connection to the master application.
Customize processes, workflows, and enumerations for different countries or regions while maintaining core functionality
Manage all resource overrides through the Dependencies page with comprehensive override tracking and configuration
Override only specific resources that need localization while inheriting all other updates from the main library
Automatically include override configurations in project exports and imports for seamless environment management
Deploy core applications to new regions quickly by overriding only country-specific elements instead of rebuilding from scratch
Adapt business logic and data handling to meet local regulatory requirements while preserving global standards
Continue receiving updates and improvements from headquarters without losing local customizations
Manage regional variations centrally instead of maintaining completely separate application instances
Customize business process logic while maintaining input/output compatibility and core workflow structure
Replace entire workflow implementations to adapt business rules for local requirements
Localize value lists, dropdown options, and classification systems for regional variations
Overrides are resolved dynamically at runtime, ensuring the correct regional version is always used
**Scenario**: Global bank with country-specific loan approval processes
* **Global Library**: Common loan application workflow with standard validation steps
* **Country Overrides**: Local credit scoring algorithms, regulatory compliance checks, documentation requirements
* **Business Value**: Single platform maintenance with automated compliance for each country's banking regulations
**Scenario**: Insurance company operating across different regulatory environments
* **Global Library**: Standard claims processing workflow and policy management
* **Regional Overrides**: Country-specific coverage types, claim validation rules, regulatory reporting
* **Business Value**: Consistent global operations with local market adaptation and compliance
**Scenario**: Manufacturing company with different operational requirements per region
* **Global Library**: Core production planning and inventory management processes
* **Local Overrides**: Regional supplier networks, compliance standards, environmental regulations
* **Business Value**: Standardized operations with flexibility for local business practices and regulations
***
### **Active Policy Overrides**

Active Policy Overrides enable user-specific and role-specific deployment policies that allow independent testing of different builds or branches without affecting the global policy. This powerful feature provides granular control over which project versions different users access in runtime environments.
Create individual policy overrides for specific users to test different builds independently
Apply policy overrides to entire roles for team-based testing and deployment strategies
Handle conflicts when multiple overrides apply using configurable priority systems
Switch between different project versions instantly without deployment downtime
Enable QA teams and developers to test different builds simultaneously without interfering with production users
Gradually deploy new features to specific user groups before full production release
Quickly revert specific users to stable versions during incidents without affecting the entire system
Allow different teams to work with different development branches in shared environments
Support for both "Latest on Branch" and specific "Build" policies with flexible branch and version selection
Real-time search functionality to quickly locate specific user or role overrides
Enable or disable overrides without deletion for temporary testing scenarios
Clear hierarchy: User overrides > Role overrides > Global policy with priority-based resolution
**Scenario**: Frontend team needs to test with latest UI changes while backend team tests API updates
* **Override Setup**: Create role-based overrides for "Frontend Developers" and "Backend Developers"
* **Policy Configuration**: Frontend role uses latest on `ui-redesign` branch, Backend role uses `api-v2` branch
* **Business Value**: Parallel development with isolated testing environments and no cross-team interference
**Scenario**: New premium features need testing with select customers before full release
* **Override Setup**: Create user-specific overrides for beta customers and internal stakeholders
* **Policy Configuration**: Beta users get latest build with premium features, others remain on stable version
* **Business Value**: Risk mitigation through controlled exposure and real-world testing feedback
**Scenario**: Critical bug discovered in production affecting specific user workflows
* **Override Setup**: Create high-priority role override for affected user groups
* **Policy Configuration**: Temporarily revert affected users to last stable build while others continue normally
* **Business Value**: Immediate incident response with minimal user impact and service continuity
Advanced data management and storage capabilities that enable new architectural patterns and improved data governance.
🔄 [**Workspaces (Multi-Tenant Architecture)**](#workspaces-multi-tenant-architecture) - Logical separation of business contexts with shared infrastructure\
🔄 [**FlowX.AI Database**](#flowx-ai-database) - New persistence layer that enables you to store and retrieve data across different processes and applications, without relying on external systems.
### **Workspaces (Multi-Tenant Architecture)**

FlowX.AI 5.1.0 introduces Workspaces, enabling organizations to manage multiple business lines, verticals, or countries within a single FlowX.AI instance while maintaining complete data isolation.
Logical separation of business contexts with shared infrastructure
Role-based access control (RBAC) and Access Control Lists (ACLs) with workspace-specific permissions
Complete logical isolation between workspaces while enabling controlled resource sharing
Simplified permission management through groups and workspace-specific roles
Onboard new business verticals in days instead of weeks with shared platform capabilities
Implement fine-grained access control with workspace-specific roles and permissions
Centralize platform upgrades, maintenance, and monitoring across all business units
Separate workspaces for different countries/regions with shared global processes
Independent workspaces for retail, corporate, and investment banking divisions
Isolate processes subject to different regulatory requirements
Enable different teams to work independently while sharing common resources
***
### **FlowX.AI Database**
FlowX.AI Database is a new persistence layer that enables you to store and retrieve data across different processes and applications, without relying on external systems.
Store data that persists beyond process instances
Find, insert, and manipulate data using familiar MongoDB operations
Seamlessly integrate with workflows through Data Source nodes
Organize your data in structured collections
Enable communication and data sharing between different process instances
Store operational data within FlowX.AI instead of building custom connectors
Build dashboards, caching solutions, and other applications that require persistent data
Keep your data within the FlowX.AI ecosystem for improved security and simplicity

FlowX.AI Database integrates directly into the existing Integration Designer as a new Data Source type alongside RESTful System, making it easy to create and manage database collections without learning new interfaces.
Enhanced user experience through improved components, better performance, and streamlined interface design.
🎨 [**Rendering Improvements & UI/UX Enhancements**](#rendering-improvements-uiux-enhancements) - Enhanced grid components, navigation redesign, advanced form controls, and analytics capabilities\
📋 [**Forms in Collections**](#forms-in-collections) - Enhanced support for form elements within collection components, enabling complex data entry scenarios\
🔄 [**Multi Select UI Component**](#multi-select-ui-component) - Allows users to choose multiple options from a predefined list, expanding upon the existing single Select component to support multi-value scenarios.
### **Rendering Improvements & UI/UX Enhancements**
FlowX.AI 5.1.0 delivers comprehensive UI/UX improvements that enhance the user experience across all platform components, from streamlined navigation to advanced form controls and better workflow handling.
## Interface & Navigation Improvements
Improved performance, responsiveness, and customization options for data display and form organization
Streamlined navigation experience in both UI Designer and Process Designer with improved interface organization
Batch operations support for UI components, enabling simultaneous actions on multiple elements, multi select, multi copy/paste, multi drag and drop, multi delete
Granular control over UI element editing based on user permissions with partial editing capabilities, allow multiple executors on swimlane level
## Enhanced Form Controls & Components
Specialized input component for code entry
Advanced formatting capabilities for Input and Slider components
Enhanced switch component supporting both toggle and checkbox variants
Configure specific options as disabled while keeping them visible in dropdown lists
## User Experience Enhancements
Configurable loading indicators for improved user experience during data operations
Advanced validation logic using dynamic computed expressions that can reference other process data values. Write JavaScript expressions that return boolean values for cross-field validation scenarios
Introduces a specialized button variant for file upload operations, supporting fill, ghost, and text types for flexible UI styling.
Efficiently replicate styling across multiple UI components
## Workflow & Analytics Improvements
Custom payload support for detailed user interaction tracking and business intelligence
Improved user experience when processes complete or terminate
Streamlined template organization by consolidating functionality in Reusable Resources
***
### **Forms in Collections**
A powerful new feature that enables dynamic, repeatable forms within collection prototypes, eliminating the need for custom development when building forms with repeatable sections like co-debtors, comments, or any list of similar items.
## Key Capabilities
Drag Form components directly into Collection Prototypes - they automatically repeat for each item in your data array
Choose between individual item validation or bulk validation across all collection items
Individual save (one item at a time) or bulk save (entire collection) with different validation behaviors
## Common Use Cases Solved
Build forms that show different elements based on conditions without custom development
Create forms with sections like adding multiple co-debtors, comments, or family members
Handle arrays of objects with proper validation and data management
Choose individual saves for real-time editing or bulk saves for form completion workflows
***
### **Multi Select UI Component**

The new Multi Select component allows users to choose multiple options from a predefined list, expanding upon the existing single Select component to support multi-value scenarios.
Users can select multiple options from dropdown lists, with values stored as arrays
Show selections as chips, comma-separated lists, or custom formats
Configure maximum number of selectable options to control user input
Built-in search functionality to filter through large option lists
Allow users to select multiple skills, qualifications, or areas of expertise
Enable selection of multiple categories, tags, or classification options
Let customers choose multiple product features, services, or add-ons
Capture user preferences where multiple options can be active simultaneously

Configure Multi Select components with the same ease as other form elements. Set maximum selections, display formats, search options, and validation rules through the familiar UI Designer interface.
* **Max. Options Selectable**: Limit the number of selections
* **Show selections**: Choose how selected items are displayed
* **Search for options**: Enable filtering within large lists
* **Has Clear**: Allow users to clear all selections at once
* **Validation rules**: Min/max selections, required validations
## **Additional information**
Instructions for deploying FlowX.AI 5.1.0
Step-by-step guide for migrating from v4.7.x to v5.1.0
# FlowX.AI 5.1.1 Release Notes (LTS)
Source: https://docs.flowx.ai/release-notes/v5.x/v5.1.x-lts/v5.1.1-november-2025
WCAG 2.1 Level AA compliance achieved, AI Platform enhancements, bug fixes, and quality improvements for the FlowX.AI 5.1.x LTS line.
This is a **Long-Term Support (LTS)** maintenance release focusing on **accessibility compliance**, **AI Platform enhancements**, **customer issue resolution**, and **proactive quality improvements**.
Upgrades from **5.1.0 → 5.1.1** are non-breaking and fully compatible.
**Quality Achievement**: FlowX.AI 5.1.1 demonstrates our commitment to proactive quality improvement:
* **[WCAG 2.1 Level AA compliance](https://www.w3.org/TR/WCAG21/)** achieved across all web components
* **Proactive quality improvements** identified through internal QA before reaching customers
* **Customer issues** resolved with full business context
* **Zero breaking changes** - fully compatible upgrade from 5.1.0
This release represents months of accessibility audits, automated testing, and quality assurance work to deliver exceptional software quality.
***
**What's new? 🆕**
FlowX.AI 5.1.1 delivers comprehensive improvements across accessibility, stability, and platform reliability.
♿ [**WCAG 2.1 Compliance Achieved**](#wcag-21-compliance-achieved) — Full accessibility support across all web components\
🌍 [**Task Management Localization**](#task-management-localization) — Comprehensive multi-language support with 51 substitution tags\
🤖 [**AI Platform Enhancements**](#ai-platform-enhancements) — Multi-agent system improvements and AI workflow stability\
🎯 [**Customer Fixes**](#customer-fixes) — Critical issues resolved based on customer feedback\
✨ [**Proactive Improvements**](#proactive-quality-improvements) — Issues identified through internal QA before reaching customers\
🔧 [**Platform Enhancements**](#platform-enhancements) — SSE handling, audit logs, and infrastructure improvements
### **WCAG 2.1 compliance**
**FlowX.AI is now WCAG 2.1 Level AA compliant**
This release delivers full accessibility support through **28 comprehensive improvements** across Angular and React SDKs, making FlowX applications usable by everyone, including users with disabilities.
### Business value
Meet accessibility requirements for government and public sector applications
Comply with healthcare industry accessibility regulations and standards
Satisfy financial sector requirements for inclusive digital experiences
Keyboard navigation and clear labels improve usability for all users, not just those with disabilities
### What changed
* All components now fully keyboard-accessible
* Complete screen reader support with ARIA labels
* Proper focus management across all interactions
* Accessible error announcements and validation
* Semantic HTML structure throughout
Automatically bind accessibility labels, descriptions, and ARIA attributes to all UI components from Designer configuration
Full keyboard navigation support with proper focus management, tab order, and keyboard shortcuts in Angular and React SDKs
ARIA labels, descriptions, and live regions implemented across all form elements and interactive components
Dedicated accessibility configuration section in UI Designer for managing labels and descriptions
Input fields, Select/Multiselect, Checkbox, Switch, Radio/Segmented buttons, Slider, and File upload with labels, descriptions, and error announcements
Buttons, Links, Modals, Stepper, Tabs, and Accordion/Card with keyboard navigation, focus management, and state announcements
Messages and Images with semantic HTML structure and proper labeling
Complete implementation for Angular and React SDKs (iOS and Android in future releases)
**28 Improvements Delivered:**
* Custom keyboard navigation implementation
* Focus management for Select/Multiselect components
* Modal focus trap and restoration
* Shift+Tab handling across form elements
* Listbox keyboard operations
* Table navigation improvements
* Switch and checkbox accessibility
* File preview focus indicators
* Button Space key activation
* Link focus outlines
* Disabled element keyboard behavior
* BaseUI Combobox implementation for Select/Multiselect
* Keyboard navigation with clear buttons
* Focus restoration after interactions
* Outline theming for focus indicators
* Modal auto-focus on open
* Card accordion keyboard handling
* Table row navigation
* Option highlighting in dropdowns
* Accessibility configuration panel
* Auto-bindable tags for all components
* Label and description fields
* Alt text management for images
* ARIA attribute configuration
* Accessibility section styling
* Component-specific accessibility settings
* Implemented BaseUI Combobox for Select/Multiselect
* Custom keyboard navigation for Angular
* React SDK keyboard navigation with clear button
* Auto-bindable accessibility tags for all components
* Accessibility configuration panel in UI Designer
* Removed conflicting title attribute tooltips
* Aligned Stepper accessibility between frameworks
* Bind labels and descriptions to form fields
***
### **Customer fixes**
We prioritized and resolved **customer-reported issues** in this release, addressing critical functionality issues and workflow inefficiencies reported via Zendesk.
**Problem:**\
When copying nodes with Kafka send actions, topic and message configurations were not preserved, forcing users to manually reconfigure all action parameters after paste operations.
**Customer Impact:**
* Development velocity significantly reduced
* Risk of configuration errors during manual re-entry
* Frustration with repetitive configuration work
**Resolution:**\
actionParamsMap now properly persists through copy/paste operations
**Steps to reproduce (fixed):**
1. Create send message node with Kafka action
2. Configure topic and message parameters
3. Copy and paste the node
4. All configurations now preserved correctly
**Customer Benefit:**\
Faster workflow development with reduced configuration errors and improved developer experience.
**Problem:**\
When deleting parent actions that had child actions with warnings, the warnings remained in the system as orphans. These orphaned warnings prevented process export/import operations and blocked build deployments.
**Customer Impact:**
* Build pipelines blocked by stale warnings
* Deployment delays requiring manual database cleanup
* Process export/import operations failed
* Development and testing workflows disrupted
**Resolution:**\
Warnings now cascade-delete automatically when parent actions are removed
**Steps to reproduce (fixed):**
1. Create action with subactions containing warnings
2. Delete the parent action
3. All child warnings now properly cleaned up
**Customer Benefit:**\
Clean deployments without manual intervention, faster development cycles, no more blocked pipelines.
**Problem:**\
Auto-generated `default_application` in new environments existed only in app\_manager schema and could not be deleted through standard operations, returning validation errors.
**Customer Impact:**
* Environment cleanup difficulties
* Testing complications with unwanted default projects
* Confusion about application lifecycle management
**Resolution:**\
Added proper runtime validation for application deletion operations
**Error (Fixed):**
```json theme={"system"}
{
"status": 400,
"message": "error.validation.runtime.application.not_found",
"title": "Runtime project not found."
}
```
**Customer Benefit:**\
Clean environment management with predictable application lifecycle operations.
***
### **Proactive quality improvements**
**Issues identified and resolved proactively**:
### Quality process
WCAG 2.1 compliance testing identified keyboard navigation and focus management improvements
Continuous integration pipelines caught component behavior issues and rendering problems
Manual testing uncovered edge cases in form interactions and modal behaviors
Peer reviews identified potential stability issues in backend processing and dependency management
### Distribution by category
* **Keyboard Navigation**: Fixes across Angular and React
* **Focus Management**: Fixes for modals, forms, and interactive elements
* **Component Behavior**: Fixes for proper state handling and rendering
* **Backend Stability**: Fixes for processing and dependency management
* Fixed listbox remaining open when pressing Shift+Tab
* Fixed Shift+Tab not working on Select with search
* Fixed Multiselect tab navigation moving to first element instead of next
* Fixed Select input focus not working properly
* Fixed Select list not scrolling during keyboard navigation
* Fixed up/down arrow scrolling screen alongside option list
* Fixed focus lost after loading new user task
* Fixed focusable table content not reached from table header
* Fixed Link in message focus missing outline
* Fixed modal close button not focused automatically
* Fixed file preview focus not highlighted and lost
* Fixed button inside modal not working with Space key
* Fixed Multiselect options list not opening
* Fixed MultiSelect and link focusable when disabled
* Fixed modal dismiss buttons not working with Space key
* Fixed modal without close button not easily focusable
* Fixed modal dismiss not focused automatically
* Fixed Switch type checkbox focus not highlighted
* Fixed Space pressed on card with accordion scrolling page
* Fixed Switch with label position start focus issues
* Fixed outline from theme not applied to modal close button and links
* Fixed Select selected option not highlighted in options list
* Fixed Select search not filtering after selection
* Fixed Input/textarea/select focus lost after using clear button
* Fixed Tab focus moving inside collapsed card
* Fixed table Tab navigation skipping rows
* Fixed focusable table content not reached from table header
* Fixed file preview retry focus not highlighted and lost
* Fixed Select and link focusable when disabled
* Fixed Switch type checkbox focus not highlighted
* Fixed Datepicker clear icon focus not highlighted
* Fixed modal dismiss not focused automatically
* Fixed doc preview modal not closable with Enter or Space
* Fixed button inside table focus not highlighted
* Fixed Slider decimal numbers not rendered correctly
* Fixed Substepper not rendered correctly
* Fixed doc preview display mode showing inline
* Fixed cards expandable before token reaches them
* Fixed missing accessibility section on Link component
* Fixed missing accessibility section on Image button
* Fixed missing space in accessibility label and info icon
* Fixed Alt text field disabled styling not applied
* Fixed console errors when changing pages from header
* Fixed Select/multiselect highlighted in preview and settings tabs
* Fixed outline theming in enumerations and inputs
* Fixed Workflows info points content not rendered correctly
* Fixed Workflows tabs content not showing properly
* Fixed padding missing on RUT UI Assets panel
* Fixed wrong navigationTree response on overridden process
* Fixed incorrect navigationTree for resource override details
* Fixed error when trying to update dependency lib versions
* Fixed error returned when updating dependency with override
* Fixed no response on out topic for start process by name from Kafka
* Fixed checkbox "Allow back to this action" status not loaded
* Fixed empty screen when logging in without workspace access
* Fixed Elasticsearch scheduled task errors with failed documents
* Fixed services not logging when Liquibase crashing due to lock
Proactive Quality
***
### **Task management localization**
FlowX.AI 5.1.1 adds comprehensive localization support for Task Management, enabling multi-language task management interfaces through 51 system substitution tags. Table grid localization is automatic.

* **FlowX Substitution Tags** (51 keys) - Custom Task Management elements, **manually configured in CMS**
* **Table Grid Localization** - Data table components, **automatically localized based on container app language**
This feature enables complete Task Management localization for global deployments, meeting requirements for government, healthcare, and financial services applications requiring multi-language support.
Complete set of substitution tags for task actions, statuses, history events, and UI elements
Table grid localizes automatically based on container app language; FlowX tags configured manually in CMS
Angular and React renderers use system substitution tags on all task management texts
**FlowX Substitution Tags (51 Keys):**
* Table columns (title, stage, assignee, status, priority, last updated)
* Process states (created, started, finished, failed, expired, etc.)
* Task actions (assign, unassign, hold, unhold, execute, start)
* Bulk operations (assign to, unassign all, hold all, etc.)
* History events (task created, assigned, status changed, etc.)
* User selection dialogs and UI states
**Table Grid Localization**:
* Filters (set, text, number, date with all operators)
* Menus (column, context, aggregation, sorting)
* Pagination (navigation, page size, row counts)
* Data types (boolean, dates, numbers with formatting)
* ARIA labels for accessibility
Configure your container application language - FlowX.AI automatically handles table grid localization based on this setting
Add translations for all 51 sys\_tm\_\* tags in CMS for each supported language - this is the only manual configuration needed
Web renderers automatically apply system substitution tags to all task management UI elements
Localization
Complete implementation guide with all 51 substitution tags, supported languages, and troubleshooting
Configure substitution tags in CMS for multi-language support
***
### **AI Platform enhancements**
FlowX.AI 5.1.1 delivers significant improvements to the AI Platform, enhancing multi-agent collaboration, conversation management, and AI workflow stability. These enhancements ensure more reliable AI-assisted development workflows and better user experience.
Enhanced agent communication and thread management for improved collaborative AI workflows
Improved conversation handling with better error propagation and session management
Enhanced AI Developer capabilities with proper data model integration and expression generation
Multi-page document generation support and improved content handling
**Multi-Agent Conversation Management:**
* Enhanced conversation thread handling with proper parent action status updates
* Improved backend support for adding new messages on agent threads
* Better session management with new session button in Command Center
* Context switching prevention during execution plan generation
**AI Developer Enhancements:**
* Fixed data model integration for expressions and business rules generation
* Improved action target saving and destination setting
* Enhanced execution plan editing from user prompts
* Better handling of empty execution plans
**Error Handling & Stability:**
* Graceful error propagation from internal AI agent operations
* Improved CORS headers for document object downloads
* Enhanced telemetry support for debugging and monitoring
* Better handling of plan enhancement patches
**Document & Content Features:**
* Multi-page document generation support in AI nodes
* Source selector component for image and document inputs
* Improved messaging system for AI agents in command center
* Enhanced UI feedback for AI-generated resources
**Backend Enhancements:**
* Continuous patching support for action contexts during execution
* Improved navigation tree responses for overridden processes
* Enhanced dependency management for library overrides
* Better error handling and logging across AI services
**Frontend Improvements:**
* Fixed target selector closing behavior in implementation threads
* Improved preview mode handling after developer changes
* Enhanced command center messaging and error display
* Better UI state management for AI workflow interactions
**Integration Updates:**
* CORS headers properly configured for GraphQL object downloads
* Process task destinations automatically set to current process
* Improved integration between AI agents and execution plans
* Enhanced audit logging for resource overrides
AI Platform
***
### **Platform enhancements**
Improved Server-Sent Events disconnect handling to reduce error log flooding when clients disconnect
Implemented audit logs for library resource overrides to track configuration changes
Fixed high vulnerabilities in Designer 5.1.x and main branch
Web renderers now use system substitution tags on all task management texts
Enhanced outline and select/multiselect option highlight theming for visual consistency
**Code Quality:**
* Eliminated deprecated code for Kafka start process
* Improved error handling for Elasticsearch document updates
* Enhanced dependency management for library overrides
* Better logging and error reporting across services
**Performance:**
* Optimized SSE connection handling
* Improved query performance for navigation tree
* Better resource management in long-running processes
Platform Updates
## Additional information
**Upgrade Compatibility**: FlowX.AI 5.1.1 is fully compatible with 5.1.0. No configuration changes, schema migrations, or data transformations are required.
### Compatibility
Direct upgrade from 5.1.0 → 5.1.1 with no breaking changes or configuration updates
Compatible with FlowX.AI SDKs (Angular/React/iOS/Android), Designer, and Database 5.1.x
### Deployment information
Standard deployment procedures apply. No special migration steps required for this maintenance release.
### Known issues
The following items are in progress or backlog for future releases:
* Android and iOS accessibility properties implementation
* Additional Select component refinements
* UI Designer padding optimizations
### What's next
**FlowX.AI 5.1.x LTS** will continue to receive maintenance updates focused on:
* Security patches and vulnerability fixes
* Stability improvements and critical bug fixes
* Accessibility enhancements for mobile platforms
* Performance optimizations
Major new features are planned for future releases in the 5.x series. See the [5.2.0 Tech Preview](../v5.2.0-tech-preview/v5.2.0-tech-preview) for upcoming capabilities.
# Deployment guidelines v5.2.0
Source: https://docs.flowx.ai/release-notes/v5.x/v5.2.0-november-2025/deployment-guidelines-v5.2
After upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.

## Component versions
| Component | 5.2.0 | 5.1.1 | 5.1.0 | 5.0.0 | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 |
| -------------------------- | ----------- | ------- | ------- | ------ | ------- | ------ | ------ | ------ | ------- |
| **process-engine** | **10.12.0** | 9.64.3 | 9.63.0 | 9.29.2 | 8.24.1 | 8.23.3 | 8.23.2 | 8.22.3 | 8.21.11 |
| **admin** | **10.12.0** | 9.66.5 | 9.65.0 | 9.25.2 | 7.18.4 | 7.17.3 | 7.16.3 | 7.15.2 | 7.12.2 |
| **designer** | **10.12.1** | 9.159.5 | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **cms-core** | **10.7.0** | 9.36.3 | 9.35.0 | 9.21.2 | 5.11.1 | 5.10.3 | 5.9.2 | 5.8.2 | 5.5.1 |
| **scheduler-core** | **10.4.1** | 9.26.1 | 9.25.0 | 9.12.0 | 5.7.1 | 5.6.2 | 5.5.2 | 5.4.0 | 5.1.1 |
| **events-gateway** | **10.4.1** | 9.26.1 | 9.25.0 | 9.12.0 | 5.7.1 | 5.6.2 | 5.5.2 | 5.4.0 | 5.1.1 |
| **notification-plugin** | **10.7.0** | 9.29.1 | 9.28.0 | 9.14.2 | 6.8.1 | 6.7.2 | 6.6.2 | 6.5.0 | 6.2.1 |
| **document-plugin** | **10.6.0** | 9.35.1 | 9.34.0 | 9.17.2 | 6.10.1 | 6.9.2 | 6.8.2 | 6.7.0 | 6.4.1 |
| **task-management-plugin** | **10.7.0** | 9.34.2 | 9.33.0 | 9.14.2 | 7.9.2 | 7.8.2 | 7.7.2 | 7.6.0 | 7.3.1 |
| **data-search** | **10.4.1** | 9.23.1 | 9.22.0 | 9.12.1 | 4.7.1 | 4.6.2 | 4.5.2 | 4.4.0 | 4.1.1 |
| **audit-core** | **10.6.0** | 9.30.1 | 9.29.1 | 9.15.2 | 6.8.1 | 6.7.2 | 6.6.2 | 6.5.0 | 6.1.1 |
| **advancing-controller** | **10.4.1** | 9.25.1 | 9.24.0 | 9.11.0 | 4.7.1 | 4.6.2 | 4.6.2 | 4.4.0 | 4.1.1 |
| **integration-designer** | **10.8.0** | 9.50.0 | 9.49.1 | 9.26.2 | 2.16.1 | 2.15.3 | 2.14.2 | 2.13.0 | 2.9.0 |
| **application-manager** | **10.11.0** | 9.73.6 | 9.72.0 | 9.27.3 | 2.23.1 | 2.22.3 | 2.21.2 | 2.2 | |
| **runtime-manager** | **10.11.0** | 9.73.6 | 9.72.0 | 9.27.3 | 2.23.1 | 2.22.3 | 2.21.2 | 2.20.2 | 2.17.2 |
| **data-sync** | **10.3.1** | 9.22.1 | 9.21.0 | 9.11.0 | 2.10.2 | 2.9.2 | 2.8.1 | 2.7.1 | 2.4.1 |
| **authorization-system** | **10.7.0** | 9.34.2 | 9.33.0 | 9.14.2 | - | - | - | - | - |
| **nosql-db-runner** | **10.4.1** | 9.22.1 | 9.21.0 | 9.11.0 | - | - | - | - | - |
### Embedded components
* **SpiceDB**
* **DGraph**
### Renderers
| Component | 5.2.0 | 5.1.1 | 5.1.0 | 5.0.0 | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 |
| ----------------------------- | ----------- | ------- | ------- | ------ | ------- | ------ | ------ | ------ | ------ |
| **@flowx/angular-sdk** | **10.12.1** | 9.159.5 | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **@flowx/angular-theme** | **10.12.1** | 9.159.5 | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **@flowx/angular-ui-toolkit** | **10.12.1** | 9.159.5 | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **@flowx/react-sdk** | **10.12.1** | 9.159.5 | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **@flowx/react-theme** | **10.12.1** | 9.159.5 | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **@flowx/react-ui-toolkit** | **10.12.1** | 9.159.5 | 9.153.6 | 9.69.0 | 5.101.1 | 5.98.0 | 5.97.1 | 5.96.1 | 5.95.1 |
| **iOS renderer** | **10.0.0** | 9.0.5 | 9.0.4 | 9.0.0 | 4.0.29 | 4.0.29 | 4.0.29 | 4.0.21 | 4.0.19 |
| **Android renderer** | **10.0.0** | 9.0.3 | 9.0.2 | 9.0.0 | 4.0.29 | 4.0.29 | 4.0.28 | 4.0.24 | 4.0.23 |
### Plugins
| Component | 5.2.0 | 5.1.1 | 5.1.0 | 5.0.0 | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 |
| -------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 |
| **reporting-plugin** | 0.2.3 | 0.2.3 | 0.2.3 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 | 0.2.0 |
### AI Platform
| Component | 5.2.0 | 5.1.1 | 5.1.0 | 5.0.0 | 4.7.9 | 4.7.8 | 4.7.7 | 4.7.6 | 4.7.5 |
| ------------------------------- | ---------- | ----- | ----- | ------ | ------ | ------ | ------ | ------ | ------ |
| **ai-assistant** | **10.0.1** | 9.2.5 | 9.2.4 | 9.2.3 | 1.8.22 | 1.8.22 | 1.8.21 | 1.8.20 | 1.8.19 |
| **di-platform** | **10.2.0** | 9.3.1 | 9.3.1 | 9.0.12 | 1.4.6 | 1.4.6 | 1.4.5 | 1.4.5 | 1.4.3 |
| **ai-platform-ai-developer** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-connected-graph** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-knowledge-graph** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-agents** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-conversations** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-models** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-tenants** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-planner** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-ai-analyst** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-ai-designer** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-agent-builder** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
| **ai-platform-binaries** | **10.0.1** | 9.4.2 | 9.3.0 | 9.0.1 | - | - | - | - | - |
## Third-party recommended component versions
| FlowX.AI Version | 3rd Party Dependency | Supported Versions |
| ---------------- | -------------------- | ------------------ |
| 5.2.0 | Keycloak | 26+ |
| 5.2.0 | Kafka | 3.8 - 3.9 |
| 5.2.0 | PostgreSQL | 16 - 17 |
| 5.2.0 | Oracle Database | 21c, 23ai |
| 5.2.0 | MongoDB | 7 - 8 |
| 5.2.0 | Redis | 7.4 - 8.0 |
| 5.2.0 | Elasticsearch | 8 - 9 |
| 5.2.0 | Angular (Web SDK) | 19.x |
| 5.2.0 | React (Web SDK) | 18.x |
Starting FlowX 5.0, the following versions of 3rd Party Dependencies are no longer supported:
* Keycloak versions older than 26
* Kafka versions older than 3.8
* Redis versions older than 7.4
## New in v5.2.0
### Key infrastructure updates
Upgraded to SpiceDB v1.38.0+ and spice-db-operator for improved permission management and stability
Updated Java libraries and base images to Oracle 10-slim, resolving HIGH and CRITICAL vulnerabilities
Enhanced renderer components with comprehensive WCAG 2.1 compliance features
Added autocomplete and IntelliSense support in business rules editors
Support for concurrent execution paths in Integration Designer workflows
## Upgrading from v5.1.0
### Key changes
* **Accessibility Features**: No breaking changes, but new accessibility properties available in UI Designer
* **Database Security**: FlowX Database now supports sensitive data masking (requires Project Data Model configuration)
* **IDE Enhancements**: Python autocomplete is automatically available in business rules editors
* **Infrastructure**: SpiceDB upgrade requires cache clearing after migration
### Environment variables updates
For detailed information on environment variables, see the [Update environment variables](./update-environment-variables-5.2) section.
### Compatibility
* **Backward Compatible**: v5.2.0 maintains backward compatibility with v5.1.0 configurations
* **Renderer Updates**: Web SDKs include accessibility enhancements without breaking changes
* **Mobile Renderers**: iOS and Android renderers include accessibility improvements
## Support
For technical support, deployment assistance, or feature questions, please contact your FlowX.AI support representative.
### Support channels
* **Technical issues**: Contact your FlowX.AI support representative
* **Feature questions**: Reach out through your designated support channel
* **Documentation**: Report documentation issues or suggestions
# Update environment variables
Source: https://docs.flowx.ai/release-notes/v5.x/v5.2.0-november-2025/update-environment-variables-5.2
Update environment variables for all existing FlowX.AI services
## Integration Designer
Integration Designer now uses the new ADVANCING controller with separate picking and processing operations for improved performance and resource management.
### Variables to remove & replace
| Remove This Variable | Replace With |
| ---------------------------- | ------------------------------------------------ |
| `ADVANCING_THREADS` | `ADVANCING_PICKINGTHREADS` (default: `1`) |
| `ADVANCING_PICKINGBATCHSIZE` | `ADVANCING_PROCESSINGBUFFERSIZE` (default: `20`) |
### New variables to add
| Variable | Default Value | Description |
| ------------------------------------------- | ------------- | -------------------------------------------------------------- |
| `ADVANCING_PROCESSINGTHREADS` | `20` | Number of threads for parallel processing of advancing events |
| `ADVANCING_BLOCKPICKINGIFNOWORKERAVAILABLE` | `true` | Block picking operations when no worker threads are available |
| `ADVANCING_DATASOURCE_MAXIMUMPOOLSIZE` | `20` | Maximum database connection pool size for advancing operations |
### Variables to update
| Variable | Current Value | New Value | Reason |
| ------------------------------ | ------------- | --------- | ----------------------------------------------- |
| `ADVANCING_PICKINGPAUSEMILLIS` | `100` | `50` | Optimized pause duration for better performance |
**How the new advancing controller works:**
* **Picking threads** (`ADVANCING_PICKINGTHREADS`): Controls how many worker threads read events from the database. This handles only the picking/reading operations.
* **Processing buffer** (`ADVANCING_PROCESSINGBUFFERSIZE`): Acts as a queue between picking and processing. When the buffer is full, no new events are read. When there's available space, that amount of events will be read.
* **Processing threads** (`ADVANCING_PROCESSINGTHREADS`): Controls how many threads process the advancing events in parallel. Events are processed instantly if processing threads are available. If all processing threads are busy, events accumulate in the buffer until it reaches capacity.
* **Blocking behavior** (`ADVANCING_BLOCKPICKINGIFNOWORKERAVAILABLE`): When enabled, prevents picking operations if no worker threads are available, ensuring better resource management.
# FlowX.AI 5.2.0 Release Notes
Source: https://docs.flowx.ai/release-notes/v5.x/v5.2.0-november-2025/v5.2.0-november-2025
Accessibility improvements, new side panel navigation, FlowX Database sensitive data handling, REST API response caching, and Python IDE enhancements for business rules development.
**What's new?**
Making FlowX applications more inclusive and user-friendly with comprehensive accessibility improvements and enhanced navigation.
♿ [**Accessibility Enhancements**](#accessibility-enhancements) - Comprehensive [WCAG](https://www.w3.org/TR/WCAG21/) (Web Content Accessibility Guidelines) compliance features across all UI components\
🎨 [**New Workflow Side Panel**](#new-workflow-side-panel) - Enhanced navigation experience with improved drag-and-drop functionality
### **Accessibility enhancements**
FlowX.AI 5.2.0 adds accessibility features across all UI components, enabling you to build [WCAG 2.1 Level AA compliant](https://www.w3.org/TR/WCAG21/) applications. These features support users with assistive technologies such as screen readers and keyboard-only navigation.


Configure labels, descriptions, and ARIA attributes in a dedicated accessibility section within UI Designer
Bind accessibility tags automatically to buttons, inputs, selects, modals, and other UI components
Navigate using keyboard shortcuts with proper focus management and tab order in Angular and React SDKs
Use screen readers with ARIA labels, descriptions, and live regions on all components
Input fields, Select/Multiselect, Checkbox, Switch, Radio buttons, Slider, and File upload components with labels and descriptions
Buttons, Links, Modals, Stepper, Tabs, and Accordion/Card components with keyboard navigation and focus management
Messages and Images with alt text support and semantic HTML structure
Web (Angular/React), iOS, and Android platforms
Build applications that meet WCAG 2.1 Level AA standards for web accessibility
Make your applications usable for people with diverse abilities and assistive technology users
Keyboard navigation and clear labels improve usability for all users, not just those using assistive technologies
Meet accessibility requirements for government, healthcare, financial services, and other regulated industries
Major Enhancement
***
### **New workflow side panel**
The new Workflow Side Panel provides an enhanced navigation experience in Integration Designer workflows. It includes improved organization, better drag-and-drop functionality, and intuitive access to design components and resources.

Add and organize workflow nodes with drag-and-drop functionality
Group nodes logically with expandable/collapsible sections
Find nodes instantly with quick search functionality
UI/UX Enhancement
***
Enhanced data management and security features for FlowX Database and business rules.
🔒 [**FlowX Database Sensitive Data**](#flowx-database-sensitive-data) - GDPR-compliant sensitive data handling for FlowX Database\
🚀 [**Performance Improvements**](#performance-improvements) - Caching optimizations for better system performance
### **FlowX database sensitive data**
FlowX.AI 5.2.0 adds sensitive data handling for FlowX Database to ensure GDPR compliance. Attributes marked as sensitive in your Project Data Model are automatically protected across all FlowX Database operations.
Hide sensitive attributes automatically in logs, console outputs, and testing interfaces
Mark attributes as sensitive in Project Data Model to apply protection across all FlowX Database operations
Access full data at runtime while maintaining security in design-time interfaces
Mask sensitive data in workflow output logs and operational documents
Sensitive attributes are masked when viewing FlowX Database documents in the designer
Database operation testing interfaces automatically hide sensitive data
Console logs and output panels mask sensitive information from FlowX Database responses
Applications have full access to sensitive data at runtime - protection is design-time only
Meet data protection requirements by preventing sensitive data exposure in design tools
Sensitive data protection is automatic once attributes are marked in Project Data Model
Test and develop without worrying about accidentally exposing sensitive information
Demonstrate proper data handling practices with masked logs and interfaces
Security Enhancement
***
### **Performance improvements**
FlowX.AI 5.2.0 adds intelligent caching mechanisms that improve system performance by reducing redundant processing when identical values are sent at process start.
Cache and reuse results automatically when identical input values are detected
Start processes faster when repeating operations with the same parameters
Reduce server load and improve resource utilization
Manage cache automatically with no configuration required
Initialize processes faster in cached scenarios
Handle more concurrent users with the same infrastructure
Use fewer compute resources for high-volume scenarios
Performance
Enhanced tools and features for business rules development, testing, and workflow design.
🔀 [**Parallel Branches in Workflows**](#parallel-branches-in-workflows) - Design and execute parallel execution paths in Integration Designer workflows\
💾 [**REST API Response Caching**](#rest-api-response-caching) - Cache GET endpoint responses in Integration Designer with flexible TTL policies\
🐍 [**Python IDE Enhancements**](#python-ide-enhancements) - Autocomplete and IntelliSense for Python business rules\
🧪 [**Business Rules Testing**](#business-rules-testing) - Save test parameters in reusable functions modal
### **Parallel branches in workflows**
FlowX.AI 5.2.0 adds the ability to design and execute parallel branches in Integration Designer workflows. This enables concurrent execution of independent workflow paths and improves performance for complex integrations.
Split workflow execution into multiple concurrent branches with start parallel nodes
Merge parallel branches with end parallel nodes that wait for all branches to complete
View which nodes belong to which parallel branch with visual path indexing in the workflow diagram
Track parallel path execution with timing information for each branch and merge point
Add a Start Parallel node and create multiple sequences from it. Each sequence represents an independent execution path
Add workflow nodes to each parallel branch, such as API calls, transformations, or database operations
Close parallel branches with an End Parallel node. This node waits for all branches to complete before continuing
All branches execute concurrently at runtime. The End Parallel node completes when the slowest branch finishes
Call multiple independent APIs concurrently instead of sequentially, reducing total execution time
Fetch data from multiple sources in parallel for comprehensive data aggregation
Send notifications through multiple channels (email, SMS, push) simultaneously
Process different document types or sections in parallel for faster throughput
* **Path Time**: Sum of all node execution times within that branch
* **End Parallel Time**: Node processing time + maximum time across all parallel paths
* **Example**: If Branch A takes 2s and Branch B takes 5s, the End Parallel node completes after 5s (plus its own processing time)
* **Start Parallel Node**: Displays Input tab showing data split across branches
* **End Parallel Node**: Displays Output tab showing merged results from all branches
* **Path Grouping**: Nodes within each parallel path are grouped for easy monitoring
* If any branch fails, the workflow handles it according to standard error handling rules
* End Parallel node waits for all non-failed branches before continuing
* Runtime validation ensures parallel branches are configured correctly
**First Iteration Constraints**: This is the initial implementation of parallel branches with the following considerations:
* **Array Processing**: Arrays are not merged across parallel branches. When multiple branches modify the same array path, the last branch to complete determines the final array value. You cannot process individual objects from the same array in different parallel branches (for example, first element in branch 1, second element in branch 2). To preserve data from all branches, save to different keys and merge manually using a script before the end node
* **Branch Closure**: All start parallel branches must be closed with end parallel nodes. Nodes following a start parallel node must merge into the same end parallel node, except for nodes that terminate with end workflow nodes
Based on user feedback and raised exceptions during runtime execution, additional configuration constraints and validations are planned for future releases.
Reduce workflow execution time by running independent operations concurrently instead of sequentially
Maximize throughput by executing multiple operations simultaneously
Model concurrent operations explicitly in your workflow diagrams
Track execution time for each parallel path to identify bottlenecks
Integration Designer
***
### **Integration Designer REST API response caching**
FlowX.AI 5.2.0 introduces intelligent response caching for REST API GET endpoints in Integration Designer. Cache responses based on flexible Time-To-Live (TTL) policies to reduce redundant API calls, avoid rate limits, and lower operational costs while maintaining data freshness.

When data is stable for a defined period, caching eliminates unnecessary external API calls and improves workflow performance.
Configure caching with "Expires after" (duration-based) or "Expires at" (time-based) policies
Clear cached responses from endpoint definitions or testing modals as needed
View cache status, keys, and TTL information in testing modals and workflow console logs
System automatically calls the external API if cache retrieval fails, ensuring reliability
Cache responses for a specific duration after the request is made.
**Configuration Options**:
* **ISO Duration**: Use ISO 8601 duration format (e.g., `PT1H` for 1 hour, `P1D` for 1 day, `P1W` for 1 week)
* **Dynamic Duration**: Reference configuration parameters (e.g., `${myConfigParam}`)
* **Default**: `R/P1D` (1 day)
**Example**: Cache for 10 minutes after each request
```
PT10M
```
Cache responses until a specific time of day with recurring patterns.
**Configuration Options**:
* **Expire Time**: Set specific time (e.g., `23:00` for midnight, `08:00` for 8 AM)
* **Recurrency**: Set how often the pattern repeats (integer > 0, default: 1)
* **Time Unit**: Choose Day, Week, or Month (default: Day)
**Example**: Cache until midnight every day
```
Expire Time: 00:00
Recurrency: 1
Time Unit: Day
```
**Example**: Cache until 6 PM every Friday
```
Expire Time: 18:00
Recurrency: 1
Time Unit: Week
```
View cache status directly in the endpoint testing modal with:
* **Cache Hit/Miss Status**: Whether results came from cache
* **Cache Key**: The unique identifier for the cached response
* **TTL Information**: When the cache expires (e.g., "Expires after PT10M" or "Expires at 23:00 on 2025-11-04")
Monitor cache usage in workflow execution logs with the same detailed information
Clear cached responses from the endpoint page or testing modal when cache is configured
In Integration Designer, open a REST System and navigate to a GET endpoint. Enable caching and select your TTL policy (Expires After or Expires At)
When the endpoint is called for the first time, the response is fetched from the external API and stored in cache with the configured TTL
If the cache is still valid (within TTL), subsequent requests return the cached response immediately without calling the external API
Once TTL expires, the next request fetches fresh data from the external API and updates the cache
Use the "Clear Cache" action to manually invalidate cached responses when needed (e.g., after data updates)
Cache country lists, product catalogs, or other reference data that rarely changes
Reduce API calls to third-party services with strict rate limits
Lower operational costs by reducing billable API calls to external services
Improve workflow execution speed by eliminating network latency for cached responses
**Reliability First**: If any issue occurs with cache retrieval or storage, FlowX.AI automatically falls back to calling the external API directly. This ensures your workflows always receive correct data.
**Failure Scenarios**:
* Cache service unavailable → Direct API call
* Cache corruption or invalid data → Direct API call
* Cache storage failure → Direct API call (with warning logged)
Your workflows continue to function normally even if caching fails.
Minimize charges from external APIs by serving cached responses when data hasn't changed
Return responses instantly from cache instead of waiting for external API calls
Stay within API rate limits by reducing the number of requests to external services
Handle higher workflow volumes without increasing external API calls
Integration Designer
Learn how to configure caching policies, manage cache, and optimize your REST API integrations
***
### **Python IDE enhancements**
FlowX.AI 5.2.0 adds professional IDE features to Python business rules development, including autocomplete, IntelliSense, and enhanced code editing capabilities.
Get intelligent code suggestions as you type, including Python standard library and FlowX APIs
Use context-aware code completion with parameter hints and documentation
Read code more easily with enhanced Python syntax highlighting
Detect syntax errors in real-time with helpful error messages
Write business rules faster with intelligent code suggestions
Catch syntax errors before deployment with real-time validation
Discover available APIs and methods through IntelliSense
Use IDE-quality editing features directly in FlowX Designer
Developer Tools
***
### **Functions testing**
Test Reusable Functions more efficiently by saving test parameters directly from the testing modal. This enables faster iteration and better test coverage.
Save test inputs directly from the testing modal and reuse them in future test runs
Access previously saved test parameters for regression testing
Re-test functions quickly with saved parameter sets
Build a library of test cases for comprehensive function validation
Test functions more thoroughly to improve quality
Avoid re-entering test data for each test iteration
Use saved test cases as examples of how to use the function
Testing Enhancement
Platform improvements, security updates, and bug fixes.
🌍 [**Task Management Localization**](#task-management-localization) - Comprehensive localization support with automatic table grid localization and 51 substitution tags\
🔧 [**Platform Enhancements**](#platform-enhancements) - Infrastructure upgrades and security improvements\
🐛 [**Bug Fixes**](#bug-fixes) - Resolved issues and stability improvements
### **Task management localization**
FlowX.AI 5.2.0 adds comprehensive localization support for Task Management, enabling you to customize all user-facing text elements including table columns, filters, and actions. This allows you to deliver Task Management experiences in multiple languages:

* **FlowX Substitution Tags** (51 keys) - Custom Task Management elements, **manually configured in CMS**
* **Table Grid Localization** - Data table components, **automatically localized based on container app language**
Data table components (filters, menus, pagination, data types) are automatically localized based on container app language
Configure 51 system substitution tags in CMS to localize table columns, task actions, and UI elements
Support for 34 languages including Arabic, Chinese, Japanese, Korean, and European languages
Localize all task actions, statuses, and workflow-related text elements
FlowX Task Management uses a comprehensive table grid localization system. These keys are **automatically applied** by FlowX.AI based on your container app language and cover all table functionality:
* **Filters**: Set filters, text filters, number filters, date filters with all operators (equals, contains, starts with, etc.)
* **Menus**: Column menus, context menus, aggregation functions, sorting options
* **Pagination**: Page navigation, page size selectors, row counts
* **Data Types**: Boolean values, dates, numbers with proper formatting
* **Advanced Features**: Pivot mode, charting, column grouping, and row operations
* **ARIA Labels**: Accessibility labels for screen readers and assistive technologies
**Automatic Localization**: Table grid locale keys are automatically translated by FlowX.AI based on your container app language. No manual configuration or setup required.
Use these substitution tags in CMS to localize custom Task Management interface elements. All tags include English default values:
**Search & Navigation**
* `sys_tm_search` - "Search"
**Table Columns**
* `sys_tm_title` - "Title"
* `sys_tm_stage` - "Stage"
* `sys_tm_assignee` - "Assignee"
* `sys_tm_status` - "Status"
* `sys_tm_priority` - "Priority"
* `sys_tm_last_updated` - "Last updated"
**Process States (Status Values)**
* `sys_tm_created` - "Created"
* `sys_tm_started` - "Started"
* `sys_tm_finished` - "Finished"
* `sys_tm_finished_with_error` - "Finished with error"
* `sys_tm_failed` - "Failed"
* `sys_tm_expired` - "Expired"
* `sys_tm_aborted` - "Aborted"
* `sys_tm_terminated` - "Terminated"
* `sys_tm_dismissed` - "Dismissed"
* `sys_tm_on_hold` - "On hold"
**Bulk Actions**
* `sys_tm_assign_to` - "Assign to…"
* `sys_tm_unassign_all` - "Unassign All"
* `sys_tm_assign_all_to_me` - "Assign All to me"
* `sys_tm_hold_all` - "Hold All"
* `sys_tm_unhold_all` - "Unhold All"
**Task Actions**
* `sys_tm_view_application` - "View Application"
* `sys_tm_unassign` - "Unassign"
* `sys_tm_assign_to_myself` - "Assign to myself"
* `sys_tm_unhold` - "Unhold"
* `sys_tm_hold` - "Hold"
* `sys_tm_assign` - "Assign"
* `sys_tm_execute` - "Execute"
* `sys_tm_start` - "Start"
**Task Details Sections**
* `sys_tm_assignee_deactivated` - "(Deactivated)"
* `sys_tm_comments` - "Comments"
* `sys_tm_write_a_comment` - "Write a comment…"
* `sys_tm_history` - "History"
**History Events**
* `sys_tm_task_created` - "Task created"
* `sys_tm_user_created_this_task` - "`${user}` created this task"
* `sys_tm_started_process_instance_with_id` - "Started Process Instance with ID"
* `sys_tm_started_process_instance_on_build` - "Started Process Instance on build"
* `sys_tm_task_ownership_changed_to` - "Task ownership changed to"
* `sys_tm_task_moved_to` - "Task moved to"
* `sys_tm_task_status_changed_to` - "Task status changed to"
* `sys_tm_task_assigned_to` - "Task assigned to"
* `sys_tm_task_owner_removed` - "Task owner removed"
**User Selection & Search**
* `sys_tm_select_person` - "Select person..."
* `sys_tm_search_person` - "Search users"
* `sys_tm_search_term_validation` - "Type at least 4 characters..."
**UI States**
* `sys_tm_loading` - "Loading..."
* `sys_tm_nothing_found` - "Nothing Found"
**Data Display**
* `sys_tm_in` - "In" (custom filter operator)
* `sys_tm_yes` - "Yes" (boolean value)
* `sys_tm_no` - "No" (boolean value)
**\*\*Manual Configuration Required**: These 51 FlowX substitution tags must be configured manually in CMS for each language. They control custom Task Management UI elements outside of the data table.
Configure your container application language - FlowX.AI automatically handles table grid localization (300+ keys for filters, menus, pagination, data types) based on this setting
Add translations for all 51 FlowX substitution tags (sys\_tm\_\*) in CMS for each supported language. These control custom Task Management UI elements (task actions, bulk operations, history events, comments)
If you need custom columns beyond the defaults, use substitution tags for column display names in your Task Management configuration
Verify complete localization:
* **Table grid elements** (automatic): filters, sorting, pagination, menus should display in container app language
* **FlowX custom elements** (CMS): task actions, bulk operations, history events, comments should use your CMS translations
**Simple Setup**: Configure only the 51 FlowX substitution tags in CMS. Table grid localization (300+ keys) is handled automatically by the platform.
Deploy Task Management to users worldwide with native language support
Provide a fully localized experience across all Task Management components
Manage translations centrally through CMS substitution tags
Leverage professional translations for data grid components with automatic localization
Localization
Complete implementation guide with all 51 substitution tags, supported languages, and troubleshooting
Configure substitution tags in CMS for multi-language support
Learn about Task Management features and configuration
Configure Task Management integration in process settings
***
### **Platform enhancements**
FlowX.AI 5.2.0 includes platform improvements focused on security, stability, and infrastructure.
## Security & Infrastructure Updates
Update Java libraries and base images to address security vulnerabilities
Upgrade SpiceDB with new operator version
Update platform dependencies to latest secure versions
## Additional improvements
Add permission-based UI functionality in Reusable UI Templates
Improve FlowX Database query handling and error messages
Use system substitution tags in task management texts in CMS
Handle Server-Sent Events disconnections better to reduce log noise
Update environment variables for improved advancing controller with separate picking and processing operations, see details [here](./update-environment-variables-5.2)
Platform Updates
***
### **Bug fixes**
FlowX.AI 5.2.0 includes bug fixes and stability improvements to improve the overall user experience.
## Notable fixes
* **Process Instances Page**: Fix error when opening Runtime process instances page
* **Resource Import**: Fix import requests that use incorrect content type
* **Elasticsearch Updates**: Fix engine errors when updating documents in older indexes
* **Navigation Tree**: Fix navigation tree response for overridden processes
* **Dependency Management**: Fix errors when updating library dependency versions
* **Accessibility**: Fix missing accessibility sections on various components
* **Theme Configuration**: Fix element selection issues in segmented button panel
* **Modal Behavior**: Improve modal focus management and keyboard navigation
* **Select Components**: Fix highlighting and navigation issues in select/multiselect
* **Task Manager**: Fix browser freeze when opening table configuration
* **Angular SDK**: Fix keyboard navigation issues with select components and shift+tab behavior
* **React SDK**: Fix option highlighting and keyboard navigation in various components
* **Workflow Display**: Fix rendering issues in Integration Designer workflows
* **Collection Components**: Fix card expansion issues with accordions in navigation areas
* **Events Gateway**: Improve SSE disconnect handling to reduce error log flooding
* **Database Operations**: Improve error handling and validation for FlowX Database queries
* **Process Navigation**: Fix back button redirects from process definitions
* **Warning Management**: Clean up warnings properly when deleting parent actions
## Additional information
### Deployment information
For detailed deployment guidelines, component versions, and upgrade instructions, see the [Deployment Guidelines v5.2.0](./deployment-guidelines-v5.2).
### Environment variables updates
For detailed information on environment variables, see the [Update environment variables](./update-environment-variables-5.2) section.
### Coming soon
Additional features currently in development for future releases:
* Extended accessibility support for iOS and Android platforms
* Additional Python IDE capabilities
* Enhanced FlowX Database query preview and optimization tools
# Deployment guidelines v3.0
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.0.0-february-2023/deployment-guidelines-v3.0.0
Do not forget, when upgrading to a new platform version, always check and make sure your installed component versions match the versions stated in the release. To do that, go to **FLOWX.AI Designer > Platform Status**.
After updating to **3.0.0** FLOWX.AI release, importing old processes definitions in the new platform release is not possible (available for exports from **\< 3.0.0** releases).

## Component versions
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* In future FlowX.AI releases, the `paperflow-web-components` library will be deprecated (some old components still can be found inside this lib). Instead, the new components can be found in `@flowx/ui-toolkit@3.0`.
| :ballot\_box\_with\_check: | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 | 2.9.0 | 2.8.1 | 2.8.0 | 2.7.0 | 2.6.0 | 2.5.0 | 2.4.0 | 2.3.0 | 2.2.0 | 2.1.0 |
| ------------------------------ | --------- | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | --------- |
| **Process engine** | **2.0.7** | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 | 0.4.49 | 0.4.44 | 0.4.42 | 0.4.42 | 0.4.36 | 0.4.29 | 0.4.22 | 0.4.21 | 0.4.18 | 0.4.13 |
| **Admin** | **2.0.8** | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 | 0.3.55 | 0.3.47 | 0.3.43 | 0.3.40 | 0.3.36 | 0.3.34 | 0.3.29 | 0.3.23 | 0.3.21 | 0.3.13 |
| **Designer** | **3.2.1** | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 | 2.14.4 | 2.11.2 |
| **@flowx/ui-sdk** | **3.2.1** | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.2.1** | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | |
| **@flowx/ui-theme** | **3.2.1** | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **flowx-process-renderer** | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 | 2.14.4 | 2.11.2 |
| **paperflow-web-components** | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 | 0.2.10 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.5 | 0.2.4 |
| **CMS Core** | **1.0.2** | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.20 | 0.2.20 | 0.2.18 | 0.2.17 | 0.2.17 |
| **Scheduler Core** | **1.0.1** | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.24 | 0.0.24 | 0.0.23 | 0.0.23 | 0.0.23 |
| **Notification Plugin** | **2.0.1** | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 | 1.0.198 | 1.0.198 | 1.0.197 | 1.0.194 | 1.0.194 | 1.0.191 | 1.0.191 | 1.0.190 | 1.0.190 | 1.0.186-1 |
| **Document Plugin** | **2.0.2** | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 | 1.0.42 | 1.0.41 | 1.0.38 | 1.0.37 | 1.0.37 | 1.0.35 | 1.0.35 | 1.0.31 | 1.0.31 | 1.0.30 |
| **OCR Plugin** | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.0.109 | 0.0.109 | 0.0.109 |
| **License Core** | **1.0.1** | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.19 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.15 | 0.1.15 | 0.1.13 | 0.1.13 | 0.1.12 |
| **Customer Management Plugin** | **0.2.1** | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.20 | 0.1.20 | 0.1.18 | 0.1.18 | 0.1.18 |
| **Task Management Plugin** | **1.0.1** | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 | 0.0.28 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.22 | 0.0.22 | 0.0.21 | 0.0.21 | 0.0.16 |
| **Data search** | **0.1.3** | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Audit Core** | **1.0.1** | 0.0.8 | 0.0.5 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Reporting** | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **advancing-controller** | **0.1.2** | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **iOS renderer** | **2.0.0** | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | **2.0.1** | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
### 3.0.0 Minimum Recommended Versions
| FLOWX.AI Platform Version | Component name | Minimum recommended version (tested versions) |
| ------------------------- | ---------------------------- | --------------------------------------------- |
| 3.0 | Keycloak | 18.0.x |
| 3.0 | Kafka | 3.2.0 |
| 3.0 | PostgreSQL | 14.3.0 |
| 3.0 | MongoDB | 5.0.8 |
| 3.0 | Redis | 6.2.6 |
| 3.0 | Elasticsearch | 7.17 |
| 3.0 | S3 (Min.IO) / minio-operator | 2022-05-26T05-48-41Z / 4.5.4 |
| 3.0 | OracleDB | 19.8.0.0.0 |
| 3.0 | Angular (Web SDK) | 14.2.2 |
FlowX.AI supports any version of the third-party components listed as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://support.flowx.ai/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
## Additional configuration
### Updates
New updates have been made to the backend and designer configurations. The following changes have been made:
* **Backend**: The Java container base image has been updated from **11.0.15** to **11.0.17\_8**
* **Designer**: The Nginx container base image has been updated from **1.19** to **1.23.2**
### Redis configuration
```
disableCommands:
- CONFIG
# enable keyspace notif as CONFIG is disabled
notify-keyspace-events KEA
```
The above command is enabling key space notifications in Redis by setting the `notify-keyspace-events` configuration parameter to "KEA". The `notify-keyspace-events` configuration parameter is used to enable notifications for certain events that occur in the Redis key space.
The reason for enabling this as CONFIG is disabled is that, in this configuration, the CONFIG command is disabled, which means that the Redis server will not accept the command to change its configuration. Therefore, this line is allowing Redis to notify events in key space.
### Theming
There are two important items that need to be taken in consideration with it comes to theming:
* [`theme_components.json`](#theme_componentsjson)
* [`theme_tokens.json`](#theme_tokensjson)
#### `theme_components.json`
This JSON object is a collection of all components and their properties. Each element represents a different design element (e.g. "accordion","card", etc.).
Each element object has two main properties:
* `genericProperties` - is an array of objects that define properties such as background color, padding, and font styles for the element
* `modifiers` - is also an array of objects, each representing a different modification of the element's properties, each modifier object has a `name` property and a `properties` array, which contains more objects that define the modified properties of the element.
#### Example
```json theme={"system"}
{
"elementName": "card",
"genericProperties": [
{
"name": "backgroundColor",
"reference": "color@shades-0",
"value": null,
"unit": null
},
{
"name": "color",
"reference": "color@neutrals-900",
"value": null,
"unit": null
},
{
"name": "borderRadius",
"reference": null,
"value": "12",
"unit": "px"
},
{
"name": "borderWidth",
"reference": null,
"value": "1",
"unit": "px"
},
{
"name": "paddingTop",
"reference": null,
"value": "16",
"unit": "px"
},
{
"name": "paddingRight",
"reference": null,
"value": "16",
"unit": "px"
},
{
"name": "paddingBottom",
"reference": null,
"value": "16",
"unit": "px"
},
{
"name": "paddingLeft",
"reference": null,
"value": "16",
"unit": "px"
},
{
"name": "titleFont",
"reference": "typography@Heading/H6/Semi Bold",
"value": null,
"unit": null
},
{
"name": "subtitleFont",
"reference": "typography@Paragraph/P2/Regular",
"value": null,
"unit": null
},
{
"name": "contentFont",
"reference": "typography@Paragraph/P1/Regular",
"value": null,
"unit": null
},
{
"name": "gap",
"reference": null,
"value": "24",
"unit": "px"
}
],
"modifiers": [
{
"name": "border",
"properties": [
{
"name": "borderColor",
"reference": "color@neutrals-300",
"value": null,
"unit": null
}
]
},
{
"name": "raised",
"properties": [
{
"name": "boxShadow",
"reference": "dropShadow@m",
"value": null,
"unit": null
}
]
},
{
"name": "ios",
"properties": [
{
"name": "titleFont",
"reference": "typography@Heading/H6/Semi Bold",
"value": null,
"unit": null
},
{
"name": "subtitleFont",
"reference": "typography@Paragraph/P2/Regular",
"value": null,
"unit": null
},
{
"name": "gap",
"reference": null,
"value": "16",
"unit": "px"
}
]
},
{
"name": "android",
"properties": [
{
"name": "titleFont",
"reference": "typography@Heading/H6/Semi Bold",
"value": null,
"unit": null
},
{
"name": "subtitleFont",
"reference": "typography@Paragraph/P2/Regular",
"value": null,
"unit": null
},
{
"name": "gap",
"reference": null,
"value": "16",
"unit": "px"
}
]
}
]
}
```
#### `theme_tokens.json`
This JSON object is a collection of color tokens for a design system. The object is structured with a "colors" object that contains multiple color objects, each representing a different color category (e.g. "primary", "secondary", "success", "warning", "error" and "neutrals").
Each color object has properties such as "name", "main" and "shades". The "name" property contains the name of the color category, the "main" property contains the main shade of the color, the "shades" is an object with key-value pairs that represent different shades of the color.
Each key is a number representing the shade level, and each value is a hex code representing the color at that level.
#### Example
```typescript theme={"system"}
// COLORS
[
{
"name": "primary",
"shades": [
{"tint": 50, "hex": "#aabbcc"},
{"tint": 100, "hex": "#aabbcc"},
...
],
"main": 500
},
{
"name": "secondary",
"shades": [
{"tint": 50, "hex": "#aabbcc"},
{"tint": 100, "hex": "#aabbcc"},
...
],
"main": 500
}
]
interface ColorShade {
tint: number,
hex: string
}
interface Color {
name: string,
shades: ColorShade[]
}
```
For more information on how to use the web renderer, check the following section:
[Using the Angular Renderer - Theming](../../docs/3.0.0/platform-deep-dive/core-components/renderer-sdks/angular-renderer)
### Task management plugin
* `FLOWX_ALLOW_USERNAME_SEARCH_PARTIAL` - new environment variable added to filter users by partial username (default value: true)
[Task management plugin setup](../../docs/platform-deep-dive/plugins/plugins-setup-guide/task-management-plugin-setup)
### Data search
* `SPRING_ELASTICSEARCH_INDEX_SETTINGS_NAME` - must correspond to the index configured on `process-engine`
[Data search setup](../../docs/platform-setup-guides/search-data-service-setup-guide)
# v3.0.0 February 2023
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.0.0-february-2023/v3.0.0-february-2023
We are excited to announce the release of FLOWX.AI 3.0 🔥, featuring new and improved features that will elevate your workflow experience. From the new theming options to enhanced functionality, this update will take your productivity to the next level. 🚀
## **New features**
* **Theming:** FLOWX.AI 3.0 introduces a new theming feature, allowing users to personalize all components on both web and mobile. The new theming feature provides a better user experience and offers more flexibility in using the platform.
**Notes for FDEs Post-Migration**:
To ensure the proper functionality of the migrated styles, please follow check the post-migration steps, available [**here**](../../docs/building-blocks/ui-designer/render-ui-designer-changelog).
[Additional configuration](./deployment-guidelines-v3.0.0#theming)
* **Generic JSONs for components**: JSONs for components have been added.
* **UI Designer**: A refreshed new interface for UI Designer.

* **UI Components Redesign**: Redesigned UI components.
[UI components](../../docs/building-blocks/ui-designer/ui-component-types)
Below you will find a Storybook which will demonstrate how components behave under different states, props, and conditions:
[Storybook](https://storybook.demo.flowxai.dev/)
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of \**FlowX 4.0*, the `paperflow-web-components` library will be deprecated. Instead, the new components can be found in `@flowx/ui-toolkit`.
For more information, check the section below:
[Using the Angular Renderer](../../docs/3.0.0/platform-deep-dive/core-components/renderer-sdks/angular-renderer)
## **Fixed**
* Fixed a bug in the FLOWX.AI Designer where the datepicker component's default value overlapped with the field placeholder.
* Fixed an issue in FLOWX.AI Designer where users could not copy/paste nodes that had UI actions without parameters.
* Forwarding external notifications is now possible with the Notifications plugin.
* Fixed an issue where the GET enumerations list (CMS) displayed an error message about memory exceeding.
## **Changed**
### UI Designer
* Indicators → deleted **Info Tooltip** and **Hint** UI components
* added Helpertext (to replace **Info tooltip** and **Hint**) - this new element can be found on [Form elements](../../docs/building-blocks/ui-designer/ui-component-types/form-elements) and provides additional information about each element, which can be hidden within an infopoint

### Documents plugin
* Updated document plugin file download path to use file UUID (string) instead of a numeric file ID.
### Task management plugin
* Improved filtering feature, now is possible to filter users by partial names.
[Additional configuration here](./deployment-guidelines-v3.0.0#task-management-plugin)
### FLOWX.AI Designer 👩🏭
#### Audit log
* The audit log now displays the name instead of identifiers for process definition, node, action, and swimlanes entities.

[Audit log](../../docs/platform-deep-dive/core-components/core-extensions/audit)
#### Sensitive data
* Sensitive data tab has been removed from the process definition settings and a new Sensitive data switch has been added in the Data model tab.

* Sensitive data migration is required when cloning old processes (sensitive data is deleted when cloning as it is not compatible with the new process version). Users must add the data model and keys for the new process.
[Data model](../../docs/building-blocks/process/process-definition#data-model)
#### Platform status report
* Added a new option to export the Platform Status, which will download a JSON file containing the state details of all components, enabling users to communicate the state of their instance to the support team.
* Added more data to the platform status report.

#### Kafka send/receive nodes
* New icons for Kafka send/receive nodes were added.

### Process Designer
#### Process Designer keyboard commands
* Added new keyboard commands for deleting, copying, and renaming nodes in the Process Designer:
* `backspace` - delete one or several selected nodes
* `Ctrl/Cmd + C` - copy one or several selected nodes
* `R` - rename a node
### FLOWX.AI Engine 🚂
#### Kafka
* Standardized Kafka topics and naming pattern in FLOWX.AI Engine, reducing confusion and errors by allowing for configuration only for the package name, environment name, and version, without having to list all topic names.
#### Performance
* Databases performance improvements, including clear caching (clear cache must be performed per process for process definitions).
For stages, integrations, and generic parameters, clear cache is performed globally, when it comes to process definitions, clear cache must be done per process.
### License model
* In the license model, another label/alias can be used instead of PII.
### Data search
* The ElasticSearch index for data search is now configurable. More info on:
[Deployment guidelines](./deployment-guidelines-v3.0.0#data-search)
## **UX/UI Improvements**
* The process instance search button has been removed, and search is now done automatically.
* Swimlanes interaction has been improved.
* It is possible now to select and delete multiple nodes in Process Designer.
Additional information regarding the deployment for v3.0 is available below:
## **Security**
* Improved security for Redis configuration.
[Redis configuration](./deployment-guidelines-v3.0.0#redis-configuration)
## **Known issues**
### Reporting
* Reporting plugin is not compatible with Oracle DBs.
[Deployment guidelines v3.0](./deployment-guidelines-v3.0.0)
# Deployment guidelines v3.1.0
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.1.0-march-2023/deployment-guidelines-v3.1.0
Do not forget, when upgrading to a new platform version, always check and make sure your installed component versions match the versions stated in the release. To do that, go to **FLOWX.AI Designer > Platform Status**.
After updating to **3.1.0** FLOWX.AI release, importing old processes definitions in the new platform release is not possible (available for exports from **\< 3.1.0** releases).

## Component versions
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FlowX 4.0**, the `paperflow-web-components` library is no longer being maintained. Instead, the new components can be found in `@flowx/ui-toolkit`.
For more information, check [**Using the Angular Renderer**](../../docs/3.1.0/platform-deep-dive/core-components/renderer-sdks/angular-renderer) section.
| :ballot\_box\_with\_check: | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 | 2.9.0 | 2.8.1 | 2.8.0 | 2.7.0 | 2.6.0 | 2.5.0 | 2.4.0 | 2.3.0 | 2.2.0 | 2.1.0 |
| ------------------------------ | ---------- | ------ | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | --------- |
| **Process engine** | **2.1.2** | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 | 0.4.49 | 0.4.44 | 0.4.42 | 0.4.42 | 0.4.36 | 0.4.29 | 0.4.22 | 0.4.21 | 0.4.18 | 0.4.13 |
| **Admin** | **2.1.3** | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 | 0.3.55 | 0.3.47 | 0.3.43 | 0.3.40 | 0.3.36 | 0.3.34 | 0.3.29 | 0.3.23 | 0.3.21 | 0.3.13 |
| **Designer** | **3.15.1** | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 | 2.14.4 | 2.11.2 |
| **@flowx/ui-sdk** | **3.15.1** | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | 2.23.0 | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.15.1** | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.15.1** | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 | 0.2.10 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.5 | 0.2.4 |
| **flowx-process-renderer** | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 | 2.14.4 | 2.11.2 |
| **CMS Core** | **1.0.3** | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.20 | 0.2.20 | 0.2.18 | 0.2.17 | 0.2.17 |
| **Scheduler Core** | **1.0.4** | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.24 | 0.0.24 | 0.0.23 | 0.0.23 | 0.0.23 |
| **Notification Plugin** | **2.0.3** | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 | 1.0.198 | 1.0.198 | 1.0.197 | 1.0.194 | 1.0.194 | 1.0.191 | 1.0.191 | 1.0.190 | 1.0.190 | 1.0.186-1 |
| **Document Plugin** | **2.0.3** | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 | 1.0.42 | 1.0.41 | 1.0.38 | 1.0.37 | 1.0.37 | 1.0.35 | 1.0.35 | 1.0.31 | 1.0.31 | 1.0.30 |
| **OCR Plugin** | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.0.109 | 0.0.109 | 0.0.109 |
| **License Core** | **1.0.2** | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.19 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.15 | 0.1.15 | 0.1.13 | 0.1.13 | 0.1.12 |
| **Customer Management Plugin** | **0.2.3** | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.20 | 0.1.20 | 0.1.18 | 0.1.18 | 0.1.18 |
| **Task Management Plugin** | **1.0.4** | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 | 0.0.28 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.22 | 0.0.22 | 0.0.21 | 0.0.21 | 0.0.16 |
| **Data search** | **0.1.4** | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Audit Core** | **1.0.4** | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Reporting** | **0.0.40** | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **advancing-controller** | **0.1.4** | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **iOS renderer** | **2.0.4** | 2.0.0 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
### 3.1.0 Minimum Recommended Versions
| FLOWX.AI Platform Version | Component name | Minimum recommended version (tested versions) |
| ------------------------- | ---------------------------- | --------------------------------------------- |
| 3.1 | Keycloak | 18.0.x |
| 3.1 | Kafka | 3.2.0 |
| 3.1 | PostgreSQL | 14.3.0 |
| 3.1 | MongoDB | 5.0.8 |
| 3.1 | Redis | 6.2.6 |
| 3.1 | Elasticsearch | 7.17 |
| 3.1 | S3 (Min.IO) / minio-operator | 2022-05-26T05-48-41Z / 4.5.4 |
| 3.1 | OracleDB | 19.8.0.0.0 |
| 3.1 | Angular (Web SDK) | 14.2.2 |
FlowX.AI supports any version of the third-party components listed as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
## Additional configuration
### Process engine - scheduler
Configuration for scheduler to be added on [**Process engine setup**](../../docs/platform-setup-guides/flowx-engine-setup-guide).
```yaml theme={"system"}
scheduler:
processCleanup:
enabled: false
cronExpression: 0 */5 0-5 * * ? #every day during the night, every 5 minutes, at the start of the minute.
batchSize: 1000
masterElection:
cronExpression: 30 */3 * * * ? #master election every 3 minutes
websocket:
namespace:
cronExpression: 0 * * * * *
expireMinutes: 30
```
### Undo/redo
Configuration for undo/redo actions in UI Designer to be added on [**Admin setup**](../../docs/flowx-designer/designer-setup-guide).
```yaml theme={"system"}
flowx:
undo-redo:
ttl: 86400 # in seconds
cleanup:
cronExpression: 0 0 2 ? * * # every day at 2am
days: 2
```
### Advancing controller with Oracle
To use advancing controller with OracleDBs, the following .yml files must be edited, configuring the right environment variables:
#### Advancing controller
If the parallel advancing configuration already exists, resetting the 'advancing' database must be done by executing the SQL command `DROP DATABASE advancing;`. Once the database has been dropped, the Liquibase script will automatically re-enable it.
* `SPRING_JPA_DATABASE` - value: `oracle`
* `SPRING_JPA_DATABASE_PLATFORM`
* `SPRING_DATASOUCE_URL`
* `SPRING_DATASOURCE_DRIVERCLASSNAME`
[Advancing controller setup](../../docs/platform-setup-guides/flowx-engine-setup-guide/advancing-controller-setup-guide)
#### Process engine
* `SPRING_JPA_DATABASE` - value: `oracle`
* `SPRING_JPA_DATABASE_PLATFORM`
* `SPRING_DATASOUCE_URL` - environment variable used to configure a data source URL for a Spring application, it typically contains the JDBC driver name, the server name, port number, and database name
* `SPRING_DATASOURCE_DRIVERCLASSNAME` - environment variable used to set the class name of the JDBC driver that the Spring datasource will use to connect to the database
* `ADVANCING_DATASOURCE_DRIVERCLASSNAME`
* `ADVANCING_DATASOURCE_URL`
* `ADVANCING_DATASOURCE_JDBC_URL`
[Process engine setup](../../docs/platform-setup-guides/flowx-engine-setup-guide)
# v3.1.0 March 2023
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.1.0-march-2023/v3.1.0-march-2023
Drumroll please... 🥁 We are excited to announce **FLOWX.AI 3.1** release 🔥.

So, what are you waiting for? Grab a snack, sit back, and get ready to explore the newest version of **FLOWX.AI**.
## **New features** 🆕
### UI Designer ✍️
#### Undo/redo actions in UI Designer
The latest update now allows users to easily undo or redo any actions they perform within the UI Designer. This includes tasks such as dragging, dropping, or deleting elements from the preview section, as well as adjusting settings within the styling and settings panel.
To undo or redo an action, users can simply click the corresponding icons in the UI Designer toolbar, or use the keyboard commands (undo: Cmd/Ctrl + Z, redo: Cmd/Ctrl + Shift + Z) for even quicker access. This new functionality provides users with greater control and flexibility, allowing them to easily make changes and adjustments without fear of losing progress or making mistakes.

[Deployment guidelines v3.1](./deployment-guidelines-v3.1.0#undoredo)
#### New UI element: file preview
We are excited to announce the addition of a new ready-made UI component. This new component allows users to easily display previews of documents within their designs, whether the documents are uploaded, generated during a process, or static.
With this new feature, users can create more dynamic and interactive designs that incorporate real-time document previews.

[File preview](../../docs/building-blocks/ui-designer/ui-component-types/file-preview)
### Process designer
#### Generate data model
A data model can be generated using data values from a [process instance](../../docs/building-blocks/process/active-process/process-instance). This can be done by either merging the data model with an existing one or replacing it entirely.

[Data model](../../docs/building-blocks/process/process-definition#data-model)
## **Fixed** 🔧
* Fixed an issue where [Engine](../../docs/platform-deep-dive/core-components/flowx-engine) and [Advancing controller](../../docs/platform-deep-dive/core-components/flowx-engine#advancing-controller) should be restarted if the advancing controller's database is down for a couple of minutes.
* Fixed an issue where image preview is not displayed.
* Fixed an issue where `GET child enumerations` request is not using the correct version.
* Fixed an issue where the [scheduler](../../docs/platform-deep-dive/core-components/core-extensions/scheduler) was sending messages multiple times.
## **Changed** 🛠️
### FLOWX.AI Engine 🚂
* [Advancing controller](../../docs/platform-deep-dive/core-components/flowx-engine#advancing-controller) now supports OracleDBs
[Deployment guidelines v3.1](deployment-guidelines-v3.1.0#advancing-controller-with-oracle)
### UI Designer ✍️
UI Designer improvements:
* You can now select enumeration data source for [Select](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/select-form-field), [Checkbox](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/checkbox-form-field), and [Radio](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/radio-form-field) UI elements.
* Clear content button option is available in the UI Designer, as a setting at element level for [form elements](../../docs/building-blocks/ui-designer/ui-component-types/form-elements) populated with content.
* Form elements under hidden containers can be disabled now.
:::info
Here is a brief example: form → disabled = `true` + child form element: disabled = `false` ⇒ entire form is disabled.
:::
* Improved UI element configuration error experience - when there is an error in the element’s settings, then the element is marked and on hover, an error message is displayed.
* Added code editor in expression fields.
[UI Designer](../../docs/building-blocks/ui-designer)
### Process designer
* Added a new flag in process settings to use a process in task management.

[Task management](../../docs/platform-deep-dive/plugins/custom-plugins/task-management)
## **Known issues** 🙁
### Reporting
* Reporting plugin is not compatible with Oracle DBs.
### UI Designer
* When configuring an [Input UI element](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/input-form-field) with a 'Has clear' (content clear) property, we recommend setting a fixed width value for the element. If the width is set to 'fill', it may cause the UI to break
* The 'auto' size property for Fit W is not available for [input](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/input-form-field), [select](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/select-form-field), [switch](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/switch-form-field), [textarea](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/text-area) and [datepicker](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/datepicker-form-field) UI elements
[Deployment guidelines v3.1](./deployment-guidelines-v3.1.0)
# Deployment guidelines v3.2.0
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.2.0-april-2023/deployment-guidelines-v3.2.0
Do not forget, when upgrading to a new platform version, always check and make sure your installed component versions match the versions stated in the release. To do that, go to **FLOWX.AI Designer > Platform Status**.
After updating to **3.2.0** FLOWX.AI release, importing old processes definitions in the new platform release is not possible (available for exports from **\< 3.2.0** releases).

## Component versions
| :ballot\_box\_with\_check: | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 | 2.9.0 | 2.8.1 | 2.8.0 | 2.7.0 | 2.6.0 | 2.5.0 | 2.4.0 | 2.3.0 | 2.2.0 | 2.1.0 |
| ------------------------------ | ---------- | ------ | ------ | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | --------- |
| **Process engine** | **2.2.1** | 2.1.2 | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 | 0.4.49 | 0.4.44 | 0.4.42 | 0.4.42 | 0.4.36 | 0.4.29 | 0.4.22 | 0.4.21 | 0.4.18 | 0.4.13 |
| **Admin** | **2.2.2** | 2.1.3 | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 | 0.3.55 | 0.3.47 | 0.3.43 | 0.3.40 | 0.3.36 | 0.3.34 | 0.3.29 | 0.3.23 | 0.3.21 | 0.3.13 |
| **Designer** | **3.21.1** | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 | 2.14.4 | 2.11.2 |
| **@flowx/ui-sdk** | **3.21.1** | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.21.1** | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.21.1** | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 | 0.2.10 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.5 | 0.2.4 |
| **flowx-process-renderer** | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 | 2.14.4 | 2.11.2 |
| **CMS Core** | **1.2.0** | 1.0.3 | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.20 | 0.2.20 | 0.2.18 | 0.2.17 | 0.2.17 |
| **Scheduler Core** | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.24 | 0.0.24 | 0.0.23 | 0.0.23 | 0.0.23 |
| **Notification Plugin** | **2.0.5** | 2.0.3 | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 | 1.0.198 | 1.0.198 | 1.0.197 | 1.0.194 | 1.0.194 | 1.0.191 | 1.0.191 | 1.0.190 | 1.0.190 | 1.0.186-1 |
| **Document Plugin** | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 | 1.0.42 | 1.0.41 | 1.0.38 | 1.0.37 | 1.0.37 | 1.0.35 | 1.0.35 | 1.0.31 | 1.0.31 | 1.0.30 |
| **OCR Plugin** | **1.0.2** | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.0.109 | 0.0.109 | 0.0.109 |
| **License Core** | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.19 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.15 | 0.1.15 | 0.1.13 | 0.1.13 | 0.1.12 |
| **Customer Management Plugin** | 0.2.3 | 0.2.3 | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.20 | 0.1.20 | 0.1.18 | 0.1.18 | 0.1.18 |
| **Task Management Plugin** | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 | 0.0.28 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.22 | 0.0.22 | 0.0.21 | 0.0.21 | 0.0.16 |
| **Data search** | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Audit Core** | **1.0.5** | 1.0.4 | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Reporting** | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **advancing-controller** | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **iOS renderer** | **2.0.7** | 2.0.4 | 2.0.0 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | 2.0.1 | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FlowX 4.0**, the `paperflow-web-components` library will be deprecated. Instead, the new components can be found in `@flowx/ui-toolkit`.
### 3.2.0 Minimum Recommended Versions
| FLOWX.AI Platform Version | Component name | Minimum recommended version (tested versions) |
| ------------------------- | ---------------------------- | --------------------------------------------- |
| 3.2 | Keycloak | 18.0.x |
| 3.2 | Kafka | 3.2.0 |
| 3.2 | PostgreSQL | 14.3.0 |
| 3.2 | MongoDB | 5.0.8 |
| 3.2 | Redis | 6.2.6 |
| 3.2 | Elasticsearch | 7.17 |
| 3.2 | S3 (Min.IO) / minio-operator | 2022-05-26T05-48-41Z / 4.5.4 |
| 3.2 | OracleDB | 19.8.0.0.0 |
| 3.2 | Angular (Web SDK) | 15.0.0 |
FlowX.AI supports any version of the third-party components listed as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
## Additional configuration
### CMS audit log
New environment variable that needs to be configured on CMS microservice:
* `KAFKA_TOPIC_AUDIT_OUT` - the identifier for the Kafka topic used to receive audit logs
[CMS setup guide](../../docs/platform-setup-guides/cms-setup-guide)
### Notifications plugin
New environment variables added to configure the error handler on Notifications plugin - Kafka consumer (default values below):
```
KAFKA_CONSUMER_ERROR_HANDLING_ENABLED: FALSE
KAFKA_CONSUMER_ERROR_HANDLING_RETRIES: 0
KAFKA_CONSUMER_ERROR_HANDLING_RETRY_INTERVAL: 1000
```
More information about the new environment variables:
[Notifications plugin setup guide](../../docs/platform-deep-dive/plugins/plugins-setup-guide/notifications-plugin-setup#error-handling)
### Client and environment
Only users with the following admin role can set/edit the new client and environment feature:
* `ROLE_ADMIN_MANAGE_PLATFORM_ADMIN`
### OCR plugin
Replaced `MINIO_` prefix with `STORAGE_S3_` for storage related environment variables.
New environment variables:
* `STORAGE_S3_ACCESS_KEY`
* `STORAGE_S3_SECRET_KEY`
* `STORAGE_S3_HOST`
* `STORAGE_S3_LOCATION`
* `STORAGE_S3_OCR_SCANS_BUCKET`
* `STORAGE_S3_OCR_SIGNATURE_BUCKET`
* `STORAGE_S3_OCR_SIGNATURE_FILENAME`
The following environment from previous releases must be removed in order to use OCR plugin: `CELERY_BROKER_URL`.
More information available in the below section:
[OCR setup guide](../../docs/platform-deep-dive/plugins/plugins-setup-guide/ocr-plugin-setup)
# v3.2.0 April 2023
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.2.0-april-2023/v3.2.0-april-2023
Drumroll please... 🥁 We are excited to announce **FLOWX.AI 3.2** release 🔥.
So, what are you waiting for? Grab a snack, sit back, and get ready to explore the newest version of **FLOWX.AI**.
## **New features** 🆕
### UI Designer ✍️
New features for the UI Designer:
#### Segmented button
Added a new type of button - **segmented button**. It allows users to pick only one option from a group of options, and you can choose to have between 2 and 5 options in the group. The segmented button is easy to use, and can help make your application easier for people to use.

#### Shadows
The new shadow feature is a visual effect that creates a sense of depth and dimensionality in UI designer elements.
The shadow option can be customized to suit the overall design aesthetic of the interface, with properties for shadow color, opacity, blur and distance from the element. It can be applied to a range of UI elements, including [root elements](../../docs/building-blocks/ui-designer/ui-component-types/root-components), forms, [collections](../../docs/building-blocks/ui-designer/ui-component-types/collection), [buttons](../../docs/building-blocks/ui-designer/ui-component-types/buttons), messages, [images](../../docs/building-blocks/ui-designer/ui-component-types/image) and [file preview](../../docs/building-blocks/ui-designer/ui-component-types/file-preview).

#### Disable button - add disabled condition
A new feature has been added that allows a button to be disabled in cases where custom form validations are applied. The user can set a disabled condition for the button element, and the button will remain disabled until the validation criteria are met.

### Platform
#### Set client and environment
The Designer app now allows users to set the client and environment through the **Platform Status** tab. In cases where these are not configured, a modal will be displayed on the Flowx instance, and the user will be required to enter the necessary information before accessing any other section.

If the user lacks the required authorization, a separate modal will be prompted.

[Additional configuration for client and environment](./deployment-guidelines-v3.2.0#client-and-environment)
### Process designer
#### Floating menu
Added a floating menu with multiple actions, including "Home", "View instance data", "Process definition", and "Info". The menu will be visible during error or loading states, with toast error displayed over it and the menu displayed above during loading states:
* the "View instance data" action opens a process instance view that overlays the rendered interface
* the "Process definition" action opens the process definition in the same tab, displaying the same version that was run
* the "Info" action displays a card with process definition info and instance start and end

### Content Management
#### CMS audit log
Added audit options for the CMS system. It keeps track of changes made to different parts of the CMS, like [Enumerations](../../docs/platform-deep-dive/core-components/core-extensions/content-management/enumerations), [Substitution Tags](../../docs/platform-deep-dive/core-components/core-extensions/content-management/substitution-tags), [Languages](../../docs/platform-deep-dive/core-components/core-extensions/content-management/languages), [Source Systems](../../docs/platform-deep-dive/core-components/core-extensions/content-management/source-systems), and [Media Library](../../docs/platform-deep-dive/core-components/core-extensions/content-management/media-library).
Whether you need to troubleshoot an error or are just interested in keeping a close eye on changes, the audit log is a useful tool for monitoring and debugging

There is also a dedicated audit section for each element mentioned above.

[Additional configuration for CMS audit log](./deployment-guidelines-v3.2.0#cms-audit-log)
## **Bug fixes** 🔧
* **\[WEB\_SDK]** Fixed an issue where custom components were unable to access UI Actions when input keys were not defined
## **Changed** 🛠️
### UI Designer ✍️
#### Improved rendering mechanism
* The UI Designer now has an enhanced rendering mechanism that prevents the page from scrolling up upon reloading, improving the user experience
* Element bounding box in UI Designer view now reflects Spacing and Sizing settings
#### Added new "requiredTrue" validator - SWITCH element
The "requiredTrue" validator for the SWITCH element enforces that the toggle must be switched on to be valid.

### Notifications plugin
* New environment variables added to configure the error handler on Notifications plugin - Kafka consumer
[Additional configuration for Notifications plugin](./deployment-guidelines-v3.2.0#notifications-plugin)
### OCR plugin
* With the new release of ocr-plugin **1.0.x** version, RabbitMQ is no longer needed
* New environment variables
[Additional configuration here](./deployment-guidelines-v3.2.0#ocr-plugin)
### Process designer
* Improvement: process definitions names can only contain letters, numbers and the following special characters \`\[] () . \_ -
## **Known issues** 🙁
### Reporting
* Reporting plugin is not compatible with Oracle DBs.
### UI Designer
* When configuring an [Input UI element](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/input-form-field) with a 'Has clear' (content clear) property, we recommend setting a fixed width value for the element. If the width is set to 'fill', it may cause the UI to break
[Deployment guidelines v3.2](./deployment-guidelines-v3.2.0)
# Deployment guidelines v3.3.0
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.3.0-july-2023/deployment-guidelines-v3.3.0
Do not forget, when upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FLOWX.AI Designer > Platform Status**.
After updating to **3.3.0** FLOWX.AI release, it is not possible to import old process definitions into the new platform release (available for exports from releases **\< 3.3.0**).

## Component versions
| 🧩 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 | 2.9.0 | 2.8.1 | 2.8.0 | 2.7.0 | 2.6.0 | 2.5.0 | 2.4.0 | 2.3.0 | 2.2.0 | 2.1.0 |
| ------------------------------ | ----------- | ------ | ------ | ------ | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | --------- |
| **Process engine** | **3.6.0** | 2.2.1 | 2.1.2 | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 | 0.4.49 | 0.4.44 | 0.4.42 | 0.4.42 | 0.4.36 | 0.4.29 | 0.4.22 | 0.4.21 | 0.4.18 | 0.4.13 |
| **Admin** | **2.5.2** | 2.2.2 | 2.1.3 | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 | 0.3.55 | 0.3.47 | 0.3.43 | 0.3.40 | 0.3.36 | 0.3.34 | 0.3.29 | 0.3.23 | 0.3.21 | 0.3.13 |
| **Designer** | **3.28.13** | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 | 2.14.4 | 2.11.2 |
| **@flowx/ui-sdk** | **3.28.13** | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.28.13** | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.28.13** | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 | 0.2.10 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.5 | 0.2.4 |
| **flowx-process-renderer** | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 | 2.14.4 | 2.11.2 |
| **CMS Core** | **1.3.0** | 1.2.0 | 1.0.3 | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.20 | 0.2.20 | 0.2.18 | 0.2.17 | 0.2.17 |
| **Scheduler Core** | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.24 | 0.0.24 | 0.0.23 | 0.0.23 | 0.0.23 |
| **events-gateway** | **1.0.2** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **Notification Plugin** | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 | 1.0.198 | 1.0.198 | 1.0.197 | 1.0.194 | 1.0.194 | 1.0.191 | 1.0.191 | 1.0.190 | 1.0.190 | 1.0.186-1 |
| **Document Plugin** | **2.0.4** | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 | 1.0.42 | 1.0.41 | 1.0.38 | 1.0.37 | 1.0.37 | 1.0.35 | 1.0.35 | 1.0.31 | 1.0.31 | 1.0.30 |
| **OCR Plugin** | **1.0.8** | 1.0.2 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.0.109 | 0.0.109 | 0.0.109 |
| **License Core** | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.19 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.15 | 0.1.15 | 0.1.13 | 0.1.13 | 0.1.12 |
| **Customer Management Plugin** | **0.2.4** | 0.2.3 | 0.2.3 | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.20 | 0.1.20 | 0.1.18 | 0.1.18 | 0.1.18 |
| **Task Management Plugin** | **2.1.2** | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 | 0.0.28 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.22 | 0.0.22 | 0.0.21 | 0.0.21 | 0.0.16 |
| **Data search** | **0.2.0** | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Audit Core** | **1.0.6** | 1.0.5 | 1.0.4 | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Reporting** | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **advancing-controller** | **0.3.0** | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **iOS renderer** | **2.1.4** | 2.0.7 | 2.0.4 | 2.0.0 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FlowX 4.0**, the `paperflow-web-components` library will be deprecated. Instead, the new components can be found in `@flowx/ui-toolkit`.
### Recommended Versions for FLOWX.AI 3.3.0 ☑️
| FLOWX.AI Platform Version | Component name | Recommended version (tested versions) |
| ------------------------- | ---------------------------- | ------------------------------------- |
| 3.3 | Keycloak | 18.0.x |
| 3.3 | Kafka | 3.2.0 |
| 3.3 | PostgreSQL | 14.3.0 |
| 3.3 | MongoDB | 5.0.8 |
| 3.3 | Redis | 6.2.6 |
| 3.3 | Elasticsearch | 7.17 |
| 3.3 | S3 (Min.IO) / minio-operator | 2022-05-26T05-48-41Z / 4.5.4 |
| 3.3 | OracleDB | 19.8.0.0.0 |
| 3.3 | Angular (Web SDK) | 15.0.0 |
FlowX.AI supports any version of the third-party components listed as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
## Additional configuration
This section describes the additional configuration that is required to use the new features in FlowX.AI.
### Process engine
#### Process Instance Indexing through Kafka transport
Introducing a new Kafka transport strategy for sending details about process instances to be indexed in Elasticsearch. To enable indexing of process instances in Elasticsearch through Kafka, configure the following environment variables:
* `FLOWX_INDEXING_ENABLED`
| Variable Name | Values | Description |
| ------------------------ | ------ | ------------------------------------------------------ |
| FLOWX\_INDEXING\_ENABLED | true | Enables indexing with Elasticsearch for the whole app |
| FLOWX\_INDEXING\_ENABLED | false | Disables indexing with Elasticsearch for the whole app |
* `FLOWX_INDEXING_PROCESSINSTANCE_INDEXING_TYPE`
| Variable Name | Values | Definition |
| ------------------------------------------------ | ----------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| FLOWX\_INDEXING\_PROCESSINSTANCE\_INDEXING\_TYPE | no-indexing | No indexing is performed for process instances |
| FLOWX\_INDEXING\_PROCESSINSTANCE\_INDEXING\_TYPE | http | Process instances are indexed via HTTP (direct connection from process-engine to Elastic Search thorugh HTTP calls) |
| FLOWX\_INDEXING\_PROCESSINSTANCE\_INDEXING\_TYPE | kafka | Process instances are indexed via Kafka (send data to be indexed through a kafka topic - the new strategy for the applied solution) |
For Kafka indexing, the Kafka Connect with Elastic Search Sink Connector must be deployed in the infrastructure.
* `FLOWX_INDEXING_PROCESSINSTANCE_INDEX_NAME`: specify the name of the index used for process instances
| Variable Name | Values | Definition |
| ------------------------------------------------------- | ----------------- | ----------------------------------------------------------------------------------------------- |
| FLOWX\_INDEXING\_PROCESSINSTANCE\_INDEXING\_INDEX\_NAME | process\_instance | The name of the index used for storing process instances. It is also part of the search pattern |
* `FLOWX_INDEXING_PROCESSINSTANCE_SHARDS`: set the number of shards for the index
| Variable Name | Values | Definition |
| ---------------------------------------- | ------ | -------------------------------------------------------------------------- |
| FLOWX\_INDEXING\_PROCESSINSTANCE\_SHARDS | 1 | The number of shards for the Elasticsearch index storing process instances |
* `FLOWX_INDEXING_PROCESSINSTANCE_REPLICAS`: set the number of replicas for the index
| Variable Name | Values | Definition |
| ------------------------------------------ | ------ | ---------------------------------------------------------------------------- |
| FLOWX\_INDEXING\_PROCESSINSTANCE\_REPLICAS | 1 | The number of replicas for the Elasticsearch index storing process instances |
#### Topics related to process event messages
##### Process engine new Kafka topics
| Default parameter (env var) | Default FLOWX.AI value (can be overwritten) |
| --------------------------------- | ------------------------------------------- |
| KAFKA\_TOPIC\_PROCESS\_INDEX\_OUT | ai.flowx.dev.core.index.process.v1 |
For more details please check the following section:
[Process Instance Indexing through Kafka transport](../../docs/platform-setup-guides/flowx-engine-setup-guide/configuring-elasticsearch-indexing)
#### New service account
Added a new service account `flowx-process-engine-sa`. This service account is needed so the use of Start Catch Event node is possible.
[Service accounts](../../docs/platform-setup-guides/access-management/configuring-an-iam-solution#process-engine-service-account)
### Events gateway
Added a new **events-gateway** microservice, which requires the following configuration.
The events-gateway is designed specifically for handling events. Previously, each [**process-engine**](../../docs/terms/flowxai-process-engine) pod had a WebSocket (WS) server, and the front-end (FE) would connect to the process-engine to receive messages.
Now, instead of a server holding the messages, they are stored in Redis. However, the process-engine sends the messages to the events-gateway, which is responsible for sending them to Redis. Users connect to the events-gateway using an HTTP request and wait for Server-Sent Events (SSE) to flow in that request. They keep the request open for as long as they want SSE on a specific instance.
### Events-gateway Kafka topics
New Kafka topics have been added for the events-gateway. These topics are used to send and receive messages between the events-gateway and the process-engine.
| Topic Name | Description | Value |
| ---------------------------------------------- | --------------------------------------------------------- | ---------------------------------------------------- |
| KAFKA\_TOPIC\_EVENTS\_GATEWAY\_OUT\_MESSAGE | Outgoing messages from process-engine to events-gateway | ai.flowx.eventsgateway.engine.commands.message.v1 |
| KAFKA\_TOPIC\_EVENTS\_GATEWAY\_OUT\_DISCONNECT | Disconnect commands from process-engine to events-gateway | ai.flowx.eventsgateway.engine.commands.disconnect.v1 |
| KAFKA\_TOPIC\_EVENTS\_GATEWAY\_OUT\_CONNECT | Connect commands from process-engine to events-gateway | ai.flowx.eventsgateway.engine.commands.connect.v1 |
New Kafka topics that should be added in the events-gateway configuration.
| Topic Name | Description | Value |
| ---------------------------------------------------------------- | ------------------------------------------------------------- | ---------------------------------------------------- |
| KAFKA\_TOPIC\_EVENTS\_GATEWAY\_PROCESS\_INSTANCE\_IN\_MESSAGE | Where events-gateway listens for messages from process-engine | ai.flowx.eventsgateway.engine.commands.message.v1 |
| KAFKA\_TOPIC\_EVENTS\_GATEWAY\_PROCESS\_INSTANCE\_IN\_DISCONNECT | Disconnect commands from events-gateway to process-engine | ai.flowx.eventsgateway.engine.commands.disconnect.v1 |
| KAFKA\_TOPIC\_EVENTS\_GATEWAY\_PROCESS\_INSTANCE\_IN\_CONNECT | Connect commands from events-gateway to process-engine | ai.flowx.eventsgateway.engine.commands.connect.v1 |
[Events gateway](../../docs/platform-deep-dive/core-components/events-gateway)
[Events gateway setup guide](../../docs/platform-setup-guides/events-gateway-setup)
[Process engine topics](../../docs/platform-setup-guides/flowx-engine-setup-guide#configuring-events-gateway)
### SSE
Starting with the 3.3 platform release, the WebSocket protocol has been removed. Therefore, if you are using `socket.io-client`, you will need to make some changes. Here's what you should do:
1. Uninstall `socket.io-client`:
Before proceeding, ensure that you uninstall `socket.io-client` from your project. You can do this using the following command:
```bash theme={"system"}
npm uninstall socket.io-client
```
2. Install `event-source-polyfill@1.0.31`:
To replace the functionality provided by socket.io-client, you will need to use a new package called `event-source-polyfill@1.0.31` (as mentioned in the [**Installing the library**](../../docs/platform-deep-dive/core-components/renderer-sdks/angular-renderer#installing-the-library) section). This package serves as a polyfill for the EventSource API, which enables servers to send events to clients over HTTP. The EventSource API is commonly used for server-sent events (SSE) and real-time web applications.
```bash theme={"system"}
npm install event-source-polyfill@1.0.31
```
### Message events
#### Topics related to message events
New Kafka topics that should be added in the process-engine configuration.
| Default parameter (env var) | Default FLOWX.AI value (can be overwritten) | Definition |
| -------------------------------------------- | ---------------------------------------------------- | ------------------------------------------------------------ |
| KAFKA\_TOPIC\_PROCESS\_EVENT\_MESSAGE | ai.flowx.dev.core.message.event.process.v1 | This topic is used for throwing intermediate event messages. |
| KAFKA\_TOPIC\_PROCESS\_START\_FOR\_EVENT\_IN | ai.flowx.dev.core.trigger.start-for-event.process.v1 | This topic is used to start processes. |
### Bulk updates
New Kafka topics that should be added in the process-engine configuration, related to task management plugin - bulk updates.
| Default parameter (env var) | Default FLOWX.AI value (can be overwritten) | Definition |
| ------------------------------------------- | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| KAFKA\_TOPIC\_PROCESS\_OPERATIONS\_BULK\_IN | ai.flowx.core.trigger.operations.bulk.v1 | On this topic, you can perform operations from the "KAFKA\_TOPIC\_PROCESS\_OPERATIONS\_IN" topic and send them as an array, allowing you to send multiple operations at once. |
#### Example
```json theme={"system"}
{
"operations": [
{
"operationType": "TERMINATE",
"processInstanceUuid": "6ae8274a-2778-4ff9-8fcb-6c84a5eb2bc6",
"taskId": "doesn't matter"
},
{
"operationType": "HOLD",
"processInstanceUuid": "6ae8274a-2778-4ff9-8fcb-6c84a5eb2bc6",
"taskId": "doesn't matter"
}
]
}
```
[Process engine topics](../../docs/platform-setup-guides/flowx-engine-setup-guide#topics-related-to-the-task-management-plugin)
## Migration Steps
To upgrade to FLOWX.AI 3.3.0, follow these steps:
* Make sure you have taken a backup of your current platform and database configurations.
* Verify that your current installed component versions match the versions specified in the release notes.
* Update the FLOWX.AI platform and all related components to the recommended versions.
* Update the necessary configuration files according to the additional configuration requirements.
* Restart the FLOWX.AI platform and related services.
* Verify that the platform is running correctly and all processes are functioning as expected.
* If you encounter any issues or errors during the upgrade process, refer to the troubleshooting section in the release notes or contact FLOWX.AI support for assistance.
## Troubleshooting
If you encounter any issues during the upgrade process or while running the FLOWX.AI platform, refer to the troubleshooting section in the release notes or contact FLOWX.AI support for assistance.
# v3.3.0 July 2023
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.3.0-july-2023/v3.3.0-july-2023
We can't reinvent the wheel... but we can certainly give it a whole new spin! Drumroll, please! 🥁 **FLOWX.AI 3.3** has arrived, bringing a new wave of exciting new features and enhancements.

Buckle up, hold on tight, and prepare for an extraordinary experience! 🚀
## **New features** 🆕
### New nodes: message events
Message events play a crucial role in integrating messaging capabilities within business process modeling. These [**events**](../../docs/terms/events) are specifically crafted to capture the interaction between different participants in a [**process**](../../docs/terms/flowx-process) by referencing messages. By leveraging message events, processes can temporarily halt their execution until the anticipated messages are received, facilitating efficient coordination and communication among [**process instances**](../../docs/terms/flowx-process-instance).

* **Message Throw Intermediate Event** - the events can be triggered at any time while the associated task is being performed
* **Interrupting event** - when the message is received, the user task is finished and the [**token**](../../docs/terms/token) advances in the process flow
* **Non-Interrupting event** - when messages are received, the user task, to which the catching boundary event is attached, is not finished immediately.
* **Message Catch Intermediate Event** - waits for a message to catch before continuing with the process flow
* **Message Catch Start Event** - starts an instance after receiving a message
[Message events](../../docs/building-blocks/node/message-events)
### 📢 Announcement: Transitioning from WebSockets to SSE (Server-Sent Events)
We are replacing WebSockets with SSE (Server-Sent Events) as the preferred technology for real-time communication in our system. SSE offers a lightweight and efficient solution for delivering server-initiated updates to the clients, enhancing the responsiveness and user experience.
With SSE, we can streamline the communication flow by eliminating the need for bidirectional channels. Instead, the server can send events directly to the clients, reducing network overhead and simplifying the implementation. SSE is built on top of the HTTP protocol, making it widely supported and easily integrable into existing systems.
Check the deployment guildelines for more information about the impact on the configs:
[SSE](deployment-guidelines-v3.3.0#sse)
### Events gateway
Added a new [**FLOWX.AI microservice**](../../docs/terms/microservices). The Events Gateway is a central communication service that processes and distributes SSE (Server-sent events) messages from Backend to Frontend. It acts as an intermediary between different system components, handling event processing, message distribution, and event publication. By reading messages from a Kafka topic and publishing events to the frontend renderer, it enables real-time updates in the user interface. Additionally, it integrates with Redis to publish events on a stream for other system components to consume. The Events Gateway ensures efficient event handling and facilitates seamless communication within the system.

[Events gateway](../../docs/platform-deep-dive/core-components/events-gateway)
[Events gateway setup guide](../../docs/platform-setup-guides/events-gateway-setup)
### Process engine
#### NEW: process instance indexing through Kafka transport
Sending data through **Kafka** : Rather than sending data directly from the process engine to ElasticSearch (ES), a new strategy is introduced where the [**process engine**](../../docs/terms/flowxai-process-engine) sends messages to a Kafka topic whenever there is something to be indexed from a [**process instance**](../../docs/terms/flowx-process-instance). [Kafka Connect](https://kafka.apache.org/documentation.html#connect) is configured to read these messages and send them to ElasticSearch for indexing. This approach allows for fire-and-forget communication, eliminating the need for the process engine to wait for indexing requests to complete.
[Process instance indexing](../../docs/platform-setup-guides/flowx-engine-setup-guide/configuring-elasticsearch-indexing)
#### KafkaConnect ElasticSearch sink plugin
A new component, Kafka Connect with configuration, has been added. This component enables Kafka Connect to listen to a specific topic where process instances generate messages and sends them to ElasticSearch indexes. The configuration includes the utilization of a KafkaConnect ElasticSearch sink connector plugin, which is responsible for handling this task. The plugin is configured with a connector.
[Example configuration for applying the solution with Kafka Connect](../../docs/platform-setup-guides/flowx-engine-setup-guide/configuring-elasticsearch-indexing#example-configuration-for-applying-the-solution-with-kafka-connect)
Check the deployment guidelines for version 3.3:
[Kafka transport](./deployment-guidelines-v3.3.0#process-engine)
### UI Designer ✍️
#### Dynamic values
Added the possibility to add dynamic values in various element settings. You can now use process parameters or [**substitution tags**](../../docs/terms/flowx-substitutions-tags) for the following element properties: default value (excluding switch), label, placeholder, helpertext, error message, prefix, and suffix. Additionally, dynamic values are supported for specific elements such as [**Document Preview**](../../docs/building-blocks/ui-designer/ui-component-types/file-preview), [**Card**](../../docs/building-blocks/ui-designer/ui-component-types/root-components/card), [**Form**](../../docs/building-blocks/ui-designer/ui-component-types/form-elements), Message, [**Button**](../../docs/building-blocks/ui-designer/ui-component-types/buttons), [**Upload**](../../docs/building-blocks/ui-designer/ui-component-types/buttons), [**Select**](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/select-form-field), [**Checkbox**](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/checkbox-form-field), [**Radio**](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/radio-form-field), [**Segmented button**](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/segmented-button), Text, Link, Modal, and Step. This enhancement allows for greater flexibility and customization.

#### Computed values
Computed values are dynamically generated or calculated values based on JavaScript expressions instead of static predefined values.
Computed values can be created using the [**UI Designer**](../../docs/terms/flowx-ai-ui-designer) by writing JavaScript expressions that operate on process parameters or other variables within the application. These expressions can perform calculations, transformations, or other operations to generate the desired value at runtime. By enabling computed values, the application provides flexibility and the ability to create dynamic and responsive user interfaces.

[Dynamic & computed values](../../docs/building-blocks/ui-designer/dynamic-and-computed-values)
#### New value slider UI element
Introducing a new slider UI element that allows users to select and adjust numerical values within a specified range. The slider element can be added under a parent form element by dragging and dropping or pasting.

#### Icons
The new Icons feature enhances the visual appeal and customization options for the following UI components: [**Input**](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/input-form-field), [**Select**](../../docs/building-blocks/ui-designer/ui-component-types/form-elements/select-form-field) and [**Button**](../../docs/building-blocks/ui-designer/ui-component-types/buttons).

* Added support for customizing icons in UI elements by uploading and managing SVG files through the [Media Library](../../docs/platform-deep-dive/core-components/core-extensions/content-management/media-library)
* Improved UI Designer integration for easy icon customization.
* Introduced options to set colors for icons in UI Designer
* Enhanced icon management with the ability to mark SVG files as icons in the Media Library

For more information, check the following section:
[Media Library](../../docs/platform-deep-dive/core-components/core-extensions/content-management/media-library#icons)
## **Bug Fixes** 🔧
#### Document Plugin
* Fixed an issue that caused an error when splitting PDF documents without a barcode on the first page.
#### Admin
* Addressed an issue that resulted in the creation of duplicate processes with the same UUID when cloning and renaming a published process. Now, a new UUID is generated for the renamed process, ensuring uniqueness and preventing duplication.
#### Integrations
* Fixed an issue where the received message in the callback action, configured with parameters from integration, was incorrectly saved on the node ID instead of the configured key. The fix ensures that integrations correctly map the received message to the intended key, saving it in the intended location.
#### Task Manager
* Resolved an issue where processes started with the "inherit" option did not connect to the correct namespace when opened from the task manager. Subprocesses now establish the connection using the appropriate contextInstanceUuid from the Child Process, ensuring they connect to the correct namespace and receive the expected updates.
:::caution
Currently the two triggers lacks support for Service Level Agreement (SLA) functionality.
:::
## **Changed** 🛠️
### Task Management - Bulk updates
Now you have the ability to send bulk update requests on [**Kafka**](../../docs/terms/flowx-kafka). You can now perform multiple operations at once.
[Bulk updates](./deployment-guidelines-v3.3.0#bulk-updates)
### Data model
#### Viewing data model references
This update introduces the ability to view attribute usage within the process. You can now easily see where a specific attribute is being used by accessing the "View References" feature. This feature provides a list of process data keys associated with each attribute and displays possible references, such as UI Elements.

Please note that the option to view references is not available for object and array attribute types.
[Data model reference](../../docs/building-blocks/process/process-definition#data-model-reference)
To ensure smooth upgrading to the v3.3 platform release and to automatically link already existing data models, please execute the following command:
```shell theme={"system"}
curl --location --request PATCH '{{baseUrl}}/api/internal/ui-templates/data-model/link' \
--header 'Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXX' \
--data ''
```
Please replace `{{baseUrl}}` with the appropriate base URL for your platform.
Make sure to execute this command with the necessary permissions and valid authorization token to ensure a successful upgrade process: `manage-processes` and `admin`. For more information about the needed roles and scopes, check the [**Configuring access rights for Admin**](../../docs/flowx-designer/designer-setup-guide/configuring-access-rights-for-admin) section.
#### Reporting
* You can now set "Used in reporting" and “Sensitive data” flags for an object or array of objects (all the child attributes will inherit its value - "true" or "false"), without the need to edit each attribute
#### Copy-paste objects
* Copy-paste objects structure under data model

### Platform
#### Set client and environment
To configure the client and environment settings in the platform, you can use the following environment variables:
* `FLOWX_CLIENT_NAME`
* `FLOWX_ENVIRONMENT_NAME`
Both configurations must be set for the admin component to retrieve them. In case the environment variables are not overridden, the administrator can manually configure them in FLOWX Designer. Here's how you can do it:

By setting the appropriate values for these environment variables, you ensure that the platform is correctly configured with the desired client and environment settings.
### Process designer
#### Swimlanes interaction
* We have introduced a new and improved way to interact with process swimlanes by incorporating a contextual menu.
Check out the animation below to see the new swimlanes interaction.

### Other
* The autoarrange function has been removed from [**Process Designer**](../../docs/terms/flowx-process-designer).
## **Known issues** 🙁
* **Slider UI element**: Currently, there is an issue where the value thumb of a slider component does not display the correct value when sourced from process data.
* **Business rules**: Presently, there is an issue where changing the language of a [**business rule**](../../docs/terms/business-rules) does not result in its execution using the new language. Despite updating the language value in the database, the business rule continues to be executed with the original language, leading to unexpected behavior.
* **Process Designer**:
* In certain cases, deleting a boundary node in the process designer and navigating back to the [**process designer**](../../docs/terms/flowx-process-designer) from the [**UI Designer**](../../docs/terms/flowx-ai-ui-designer) does not remove the associated sequence from the boundary event. This issue specifically occurs when the sequence is linked to the deleted boundary node.
* Select Sequence buttons in the nodes UI interface may overlap.
* There is a known issue where users are unable to select the node name with the mouse in the user interface.
* **Plugins**: Reporting plugin is not compatible with Oracle DBs.
[Deployment guidelines v3.3](./deployment-guidelines-v3.3.0)
# null
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.0-september-2023/deployment-guidelines-v3.4.0
Do not forget, when upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FLOWX.AI Designer > Platform Status**.
After updating to **3.4.0** FLOWX.AI release, it is not possible to import old process definitions into the new platform release (available for exports from releases **\< 3.4.0**).

## Component versions
| 🧩 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 | 2.9.0 | 2.8.1 | 2.8.0 | 2.7.0 | 2.6.0 | 2.5.0 | 2.4.0 | 2.3.0 |
| ------------------------------ | ----------- | ------- | ------ | ------ | ------ | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| **process-engine** | **4.2.4** | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 | 0.4.49 | 0.4.44 | 0.4.42 | 0.4.42 | 0.4.36 | 0.4.29 | 0.4.22 | 0.4.21 |
| **admin** | **3.2.3** | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 | 0.3.55 | 0.3.47 | 0.3.43 | 0.3.40 | 0.3.36 | 0.3.34 | 0.3.29 | 0.3.23 |
| **designer** | **3.33.10** | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 |
| **@flowx/ui-sdk** | **3.33.10** | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.33.10** | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.33.10** | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | - | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 | 0.2.10 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 |
| **flowx-process-renderer** | - | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 |
| **cms-core** | **1.3.6** | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.20 | 0.2.20 | 0.2.18 |
| **scheduler-core** | **1.2.0** | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.24 | 0.0.24 | 0.0.23 |
| **events-gateway** | **1.0.6** | 1.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **notification-plugin** | **2.0.5** | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 | 1.0.198 | 1.0.198 | 1.0.197 | 1.0.194 | 1.0.194 | 1.0.191 | 1.0.191 | 1.0.190 |
| **document-plugin** | **2.0.6** | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 | 1.0.42 | 1.0.41 | 1.0.38 | 1.0.37 | 1.0.37 | 1.0.35 | 1.0.35 | 1.0.31 |
| **ocr-plugin** | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.0.109 |
| **license-core** | **1.0.4** | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.19 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.15 | 0.1.15 | 0.1.13 |
| **customer-management-plugin** | **0.2.6** | 0.2.4 | 0.2.3 | 0.2.3 | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.20 | 0.1.20 | 0.1.18 |
| **task-management-plugin** | **3.0.0** | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 | 0.0.28 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.22 | 0.0.22 | 0.0.21 |
| **data-search** | **0.2.3** | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **audit-core** | **2.1.0** | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **reporting-plugin** | **0.1.2** | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **advancing-controller** | **0.3.2** | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **iOS renderer** | **2.3.0** | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | **2.1.4** | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FLOWX.AI 3.0**, the `paperflow-web-components` library will be deprecated (some components still can be found inside this lib). Instead, the new components can be found in `@flowx/ui-toolkit@3.0`.
### Recommended Versions for FLOWX.AI 3.4.0 ☑️
| FLOWX.AI Platform Version | Component name | Recommended version (tested versions) |
| ------------------------- | ----------------- | ------------------------------------- |
| 3.4 | Keycloak | 18.0.x |
| 3.4 | Kafka | 3.2.3 |
| 3.4 | PostgreSQL | 14.3.0 |
| 3.4 | MongoDB | 5.0.8 |
| 3.4 | Redis | 6.2.6 |
| 3.4 | Elasticsearch | 7.17 |
| 3.4 | OracleDB | 19.8.0.0.0 |
| 3.4 | Angular (Web SDK) | 15.0.0 |
FlowX.AI supports any version of the third-party components listed as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
# Additional configuration
This section outlines the supplementary configurations required to leverage the newly introduced features within FLOWX.AI.
## Data Model Update Procedure
When deploying the new version, it's mandatory to migrate the data model index using the following procedure.
Follow the next steps:
1. **Access Kibana**: Start by connecting to Kibana and locate the data model index, which is typically named "process-data-model."
2. **Open Kibana Devtools**: Navigate to Kibana → Devtools. In the Console tab, you should proceed with the following steps.
3. **Check Index Documents**: Copy and paste the following script into the left-hand window, replacing any existing content, and then execute it. This script will retrieve the existing documents in the index to validate that the index name is correct.
```json theme={"system"}
GET process-data-model/_search
{
"query": {
"match_all": {}
}
}
```
4. **Update Documents**: Replace any existing content in the left window with the following script, and then run it. This script updates the documents in the index by adding a new attribute, "processDefinitionVersionId," with the same value as "processDefinitionId."
```json theme={"system"}
POST process-data-model/_update_by_query?wait_for_completion=false
{
"query": {
"match_all": {}
},
"script": {
"source": "ctx._source.processDefinitionVersionId=ctx._source.processDefinitionId",
"lang": "painless"
}
}
```
5. **Verify the Update**: Re-run the script from step 3 to confirm that the new attribute, "processDefinitionVersionId," has been added with the same value as "processDefinitionId."
These steps will ensure a smooth migration of the data model index when deploying the new version.
## Access rights for Fonts
In order to utilize the new fonts feature in the CMS microservice, it's mandatory to configure the following access rights:
| Module | Scope | Role default value | Microservice |
| ------------- | ------ | -------------------- | ------------------ |
| manage-themes | import | ROLE\_THEMES\_IMPORT | Content Management |
| | import | ROLE\_THEMES\_EDIT | Content Management |
| | import | ROLE\_THEMES\_ADMIN | Content Management |
| manage-themes | read | ROLE\_THEMES\_READ | Content Management |
| | read | ROLE\_THEMES\_EDIT | Content Management |
| | read | ROLE\_THEMES\_ADMIN | Content Management |
| | read | ROLE\_THEMES\_IMPORT | Content Management |
| manage-themes | edit | ROLE\_THEMES\_EDIT | Content Management |
| | edit | ROLE\_THEMES\_ADMIN | Content Management |
| manage-themes | admin | ROLE\_THEMES\_ADMIN | Content Management |
## Markdown support
New lib added:
* `marked@^5.0.0` refers to a specific version of the "marked" library or package in the npm ecosystem. "marked" is an open-source JavaScript library used for parsing and rendering Markdown text into HTML.
To install the lib please make sure to run the following command:
`npm install marked@^5.0.0`
## Timer events
Incorporating new Kafka Topics and Consumer Groups.
### Admin
1. **KAFKA\_TOPIC\_PROCESS\_SCHEDULED\_TIMER\_EVENTS\_OUT\_SET**:
* Facilitates the transmission of scheduled message requests from the Admin microservice to the Scheduler.
* Utilize when setting up scheduled messages for precise timing and orchestration.
2. **KAFKA\_TOPIC\_PROCESS\_SCHEDULED\_TIMER\_EVENTS\_OUT\_STOP**:
* Responsible for forwarding requests from the Admin microservice to the Scheduler to halt scheduled messages.
* Utilize to cease previously scheduled messages for streamlined management.
3. **KAFKA\_TOPIC\_PROCESS\_START\_FOR\_EVENT\_IN**:
* Enabling the initiation of process definitions that commence with a timer start event node.
* Aids in the launch of process flows driven by time-based triggers.
### Scheduler
1. **KAFKA\_TOPIC\_PROCESS\_SCHEDULED\_TIMER\_EVENTS\_IN\_SET**:
* Receives scheduled message setting requests from the Admin and Process engine microservices.
* Utilized for setting up precise message scheduling with a focus on timing accuracy.
2. **KAFKA\_TOPIC\_PROCESS\_SCHEDULED\_TIMER\_EVENTS\_IN\_STOP**:
* Handles requests from the Admin and Process engine microservices to terminate scheduled messages.
* Essential for promptly halting scheduled messages according to operational requirements.
3. **KAFKA\_TOPIC\_AUDIT\_OUT**:
* Introduction of audit functionality to the Scheduler microservice through Kafka.
* Enables tracking and management of scheduling activities.
New consumer groups:
```yaml theme={"system"}
kafka:
consumer:
threads: 1
scheduled-timer-events:
threads: 1
group-id: scheduled-timer-events
stop-scheduled-timer-events:
threads: 1
group-id: stop-scheduled-timer-events
```
### Process engine
1. **KAFKA\_TOPIC\_PROCESS\_SCHEDULED\_TIMER\_EVENTS\_OUT\_SET**:
* Sent to the scheduler for setting scheduled messages.
2. **KAFKA\_TOPIC\_PROCESS\_SCHEDULED\_TIMER\_EVENTS\_OUT\_STOP**:
* Sent to the scheduler for stopping scheduled messages.
New consumer groups:
```yaml theme={"system"}
kafka:
consumer:
threads: 1
scheduled-timer-events:
threads: 1
group-id: scheduled-timer-events
stop-scheduled-timer-events:
threads: 1
group-id: stop-scheduled-timer-events
```
### New service account
A new service account has been introduced. This service account is essential for enabling the usage of the Start Timer Event node. Detailed information is available in the following section:
[Service accounts](../../docs/platform-setup-guides/access-management/configuring-an-iam-solution#scheduler-service-account)
## Scheduler: New timer-event-scheduler (Cron)
Introducing a new timer event scheduler designed to manage timer events. This scheduler scans for expired messages every second, processing batches of 100 messages per iteration. For situations with higher message volumes, the scheduler ensures thorough message consumption:
```yaml theme={"system"}
timer-event-scheduler:
batchSize: 100
cronExpression: "*/1 * * * * *" #every 1 seconds
```
## Scheduler: new recovery mechanism
```yaml theme={"system"}
flowx:
timer-calculator:
delay-max-repetitions: 1000000
```
You have a "next execution" set for 10:25, and the cycle step is 10 minutes. If the instance goes down for 2 hours, the next execution time should be 12:25, not 10:35. To calculate this, you add 10 minutes repeatedly to 10:25 until you reach the current time. So, it would be 10:25 + 10 min + 10 min + 10 min, until you reach the current time of 12:25. This ensures that the next execution time is adjusted correctly after the downtime.
* `FLOWX_TIMER_CALCULATOR_DELAY_MAX_REPETITIONS` - This means that, for example, if our cycle step is set to one second and the system experiences a downtime of two weeks, which is equivalent to 1,209,600 seconds, and we have the "max repetitions" set to 1,000,000, it will attempt to calculate the next schedule. However, when it reaches the maximum repetitions, an exception is thrown, making it impossible to calculate the next schedule. As a result, the entry remains locked and needs to be rescheduled. This scenario represents a critical case where the system experiences extended downtime, and the cycle step is very short (e.g., 1 second), leading to the inability to determine the next scheduled event.
# v3.4.0 September 2023
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.0-september-2023/v3.4.0-september-2023
Welcome to the FLOWX.AI 3.4 release! 🚀 This update introduces exciting new features and improvements to enhance your experience with FLOWX.AI. Get ready for an extraordinary journey! 🚀

## **What's New?** 🆕
# Introducing the Enhanced Versioning Module
We are excited to unveil the latest enhancements to our Versioning module, designed to improve your experience and streamline your workflow.

**Watch our video overview** to discover all the new features and improvements:
For more in-depth information and to explore the Versioning module further, please visit our documentation:
[Versioning Module Documentation](/3.x/docs/building-blocks/process/versioning)
Stay updated and take advantage of these exciting updates in our Versioning module!
### Fresh nodes: Timer Events
These nodes enable you to trigger specific actions or events at predefined time intervals, durations, or cycles. With timer event nodes, you can design processes that respond to time-related conditions, ensuring smoother workflow execution and enhanced automation.

Three primary Timer Event node types:
* [**Timer Start Event**](/3.x/docs/building-blocks/node/timer-events/timer-start-event) (interrupting/non-interrupting)
* [**Timer Intermediate Event**](/3.x/docs/building-blocks/node/timer-events/timer-intermediate-event)
* [**Timer Boundary Event**](/3.x/docs/building-blocks/node/timer-events/timer-boundary-event) (interrupting/non-interrupting)
So whether it's reminders, recurring tasks, or tasks with deadlines, these Timer Event nodes are your go-to for keeping things in sync with the clock.
[Timer Events](/3.x/docs/building-blocks/node/timer-events)
### FLOWX.AI Designer
#### Font Management
Font Management allows you to upload and manage multiple font files, which can be later utilized when configuring UI templates using the UI Designer. You can now upload multiple TTF font files, the platform will identify additional data like font family, weight, and style for each file. That can be done using the new menu entry added under **Content Management > Font files**.

[Font Management](../../docs/platform-deep-dive/core-components/core-extensions/content-management/font-files)
### UI Designer
#### Attributed strings for Markdown support
Enhance the design of UI components with the new Markdown support, including features such as bold, italic, strikethrough, and clickable URLs. This feature integrates with the following UI components: text, [switch](/3.x/docs/building-blocks/ui-designer/ui-component-types/form-elements/switch-form-field), and [message indicators](/3.x/docs/building-blocks/ui-designer/ui-component-types/indicators), ensuring a consistent and polished rendering experience.

Supported tags in the current iteration: bold, italic, bold italic, strikethrough and URLs.
#### Example:
* **Bold**
```markdown theme={"system"}
**Bold**
```
* *italic*
```markdown theme={"system"}
*italic*
```
* ***bold italic***
```markdown theme={"system"}
***bold italic***
```
* strikethrough
```markdown theme={"system"}
~~strikethrough~~
```
* URL
```markdown theme={"system"}
[URL](https://url.net)
```
Let's take the following Markdown text example:
```markdown theme={"system"}
Be among the *first* to receive updates about our **exciting new products** and releases. Subscribe [here](flowx.ai/newsletter) to stay in the loop! Do not ~~miss~~ it!
```
When running the process, it will be displayed like this:

## **Bug Fixes** 🔧
* Addressed a bug where the boundary sequence incorrectly moved to the parent node after copy-paste.
* Resolved an issue where the "Select Sequence" buttons within the node UI interface could overlap, ensuring a better user experience.
## **Changed** 🛠️
### Process Designer
#### Keyboard commands
* To edit a selected node label, press "R," which puts the label in edit mode. After editing, press "Enter" to save the new name.
* To copy selected nodes, use "CMD/Ctrl + C," and to paste them into a selected swimlane, use "CMD/Ctrl + V."
* To delete selected node(s), press "Backspace."
#### Data model
* Revamped Object-Level Settings with Enhanced Attribute Flags.

### Other Bits
* Bid farewell to the autoarrange function in the [**Process Designer**](../../docs/terms/flowx-process-designer).
## **Gremlins to Watch Out For** 🙁
* **Slider UI element**: Our slider component can be a bit mysterious at times. Currently, it enjoys a game of hide-and-seek with the correct value when sourced from process data.
* **Document preview UI element**: Our document preview component has a unique sense of style. It prefers to take up only a portion of the screen, even when told to "fill" the entire width. It's a rebel with a cause.
* **Business rules**: Our [**business rule**](../../docs/terms/business-rules) have a language barrier, but they're working on it. Changing the language of a business rule doesn't always lead to using the new language for execution. It's like they have a favorite phrase they won't let go of.
* **Process Designer**: Deleting a boundary node in the process designer and coming back from the UI Designer doesn't always clean up the associated sequence from the boundary event. It's like they left a party and forgot their hat.
* **Timer Events**:
* Our timer events can sometimes be a bit shy and not show up on the canvas when added after creating a new process version or branch. They need a little nudge to make their appearance after refreshing the page.
* Mandatory Fields Error Messages: Our system has a sense of humor when it comes to mandatory fields. It forgets to deliver the error messages when these fields are left empty. It's a bit too laid-back.
* Timer Expression Validators: Our timer expressions can be a bit wild and free-spirited because they don't always follow the rules. We haven't implemented their validators yet, so they do as they please.
* Timer Events on Read-Only Process Versions: Our timer events are a bit of a rebel when it comes to read-only process versions. They refuse to disable their fields, as if they have a mind of their own.
* **Versioning**:
* Our versioning system can be a bit finicky at times. It might throw a server error when merging branches or refuse to ignore the Flowx UUID key, causing conflicts. And sometimes, the branching graph prefers to play hide-and-seek during import/export. But hey, we're working on it!
* Swimlane Allocation UI: Even after a process definition is deleted, you might catch a glimpse of the UI for swimlane allocation. It's like a ghost from the past that refuses to fade away.
## **Additional information**
For deployment guidelines, refer to:
[Deployment guidelines v3.4.0](./deployment-guidelines-v3.4.0)
# Deployment guidelines v3.4.1
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.1-september-2023/deployment-guidelines-v3.4.1
Do not forget, when upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FLOWX.AI Designer > Platform Status**.
After updating to **3.4.1** FLOWX.AI release, it is not possible to import old process definitions into the new platform release (available for exports from releases **\< 3.4.1**).

## Component versions
| 🧩 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 | 2.9.0 | 2.8.1 | 2.8.0 | 2.7.0 | 2.6.0 | 2.5.0 | 2.4.0 | 2.3.0 | 2.2.0 |
| ------------------------------ | ---------- | ------ | ------- | ------ | ------ | ------ | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| **process-engine** | **4.3.1** | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 | 0.4.49 | 0.4.44 | 0.4.42 | 0.4.42 | 0.4.36 | 0.4.29 | 0.4.22 | 0.4.21 | 0.4.18 |
| **admin** | **3.3.7** | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 | 0.3.55 | 0.3.47 | 0.3.43 | 0.3.40 | 0.3.36 | 0.3.34 | 0.3.29 | 0.3.23 | 0.3.21 |
| **designer** | **3.35.6** | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 | 2.14.4 |
| **@flowx/ui-sdk** | **3.35.6** | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.35.6** | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.35.6** | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | **3.35.6** | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 | 0.2.10 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.5 |
| **flowx-process-renderer** | - | - | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 | 2.14.4 |
| **cms-core** | **1.3.9** | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.20 | 0.2.20 | 0.2.18 | 0.2.17 |
| **scheduler-core** | **1.2.4** | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.24 | 0.0.24 | 0.0.23 | 0.0.23 |
| **events-gateway** | **1.1.0** | 1.0.6 | 1.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **notification-plugin** | **2.0.8** | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 | 1.0.198 | 1.0.198 | 1.0.197 | 1.0.194 | 1.0.194 | 1.0.191 | 1.0.191 | 1.0.190 | 1.0.190 |
| **document-plugin** | **2.0.8** | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 | 1.0.42 | 1.0.41 | 1.0.38 | 1.0.37 | 1.0.37 | 1.0.35 | 1.0.35 | 1.0.31 | 1.0.31 |
| **ocr-plugin** | **1.0.12** | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.0.109 | 0.0.109 |
| **license-core** | **1.0.7** | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.19 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.15 | 0.1.15 | 0.1.13 | 0.1.13 |
| **customer-management-plugin** | **0.2.8** | 0.2.6 | 0.2.4 | 0.2.3 | 0.2.3 | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.20 | 0.1.20 | 0.1.18 | 0.1.18 |
| **task-management-plugin** | **3.0.3** | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 | 0.0.28 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.22 | 0.0.22 | 0.0.21 | 0.0.21 |
| **data-search** | **0.2.6** | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **audit-core** | **2.1.3** | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **reporting-plugin** | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **advancing-controller** | **0.3.5** | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **iOS renderer** | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FLOWX.AI 4.0**, the `paperflow-web-components` library will be deprecated. Instead, the new components can be found in `@flowx/ui-toolkit`.
### Recommended Versions for FLOWX.AI 3.4.1 ☑️
| FLOWX.AI Platform Version | Component name | Recommended version (tested versions) |
| ------------------------- | ----------------- | ------------------------------------- |
| 3.4.1 | Keycloak | 18.0.x |
| 3.4.1 | Kafka | 3.2.3 |
| 3.4.1 | PostgreSQL | 14.3.0 |
| 3.4.1 | MongoDB | 5.0.8 |
| 3.4.1 | Redis | 6.2.6 |
| 3.4.1 | Elasticsearch | 7.17 |
| 3.4.1 | OracleDB | 19.8.0.0.0 |
| 3.4.1 | Angular (Web SDK) | 15.0.0 |
FlowX.AI supports any version of the third-party components listed as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
# Additional configuration
This section outlines the supplementary configurations required to leverage the newly introduced features within FLOWX.AI (for a smooth transition please check first what's new in [3.4.0](../v3.4.0-september-2023/v3.4.0-september-2023.md)).
## Scheduler configuration
```yaml theme={"system"}
scheduler:
thread-count: 30 # Configure the number of threads to be used for sending expired messages.
callbacks-thread-count: 60 # Configure the number of threads for handling Kafka responses, whether the message was successfully sent or not
cronExpression: "*/10 * * * * *" #every 10 seconds
retry: # new retry mechanism
max-attempts: 3
seconds: 1
thread-count: 3
cronExpression: "*/10 * * * * *" #every 10 seconds
cleanup:
cronExpression: "*/25 * * * * *" #every 25 seconds
```
### Explanation
* `SCHEDULER_THREAD_COUNT` - Used to configure the number of threads to be used for sending expired.
* `CALLBACKS_THREAD_COUNT` - Used to configure the number of threads for handling Kafka responses, whether the message was successfully sent or not.
### New retry mechanism
* `SCHEDULER_RETRY_THREAD_COUNT` - Specify the number of threads to use for resending messages that need to be retried.
* `SCHEDULER_RETRY_MAX_ATTEMPTS` - This configuration parameter sets the number of retry attempts. For instance, if it's set to 3, it means that the system will make a maximum of three retry attempts for message resending.
* `SCHEDULER_RETRY_SECONDS` - This configuration parameter defines the time interval, in seconds, for retry attempts. For example, when set to 1, it indicates that the system will retry the operation after a one-second delay.
[Scheduler setup guide](../../docs/platform-setup-guides/scheduler-setup-guide)
## Revised Cache Key Organization
To ensure a smooth transition for the **3.4.1** release, it is crucial to make use of the clear cache endpoint with the following request body:
**Request:**
```http theme={"system"}
POST /api/internal/cache/clear
```
This endpoint is designed to purge Redis caches selectively. It will exclusively delete caches that are specified in the admin microservice properties under the property key: "application.redis.clearable-caches".
Request body:
```json theme={"system"}
{
"cacheNames": [
"events",
"admin",
"allowedSwimlanes",
"initiatedProcessFromStartEvent",
"flowx:core"
]
}
```
Please take note that after upgrading to the new system version, you should refrain from including the flowx:core cache in the request body when invoking the clear cache endpoint to avoid unintended consequences.
# v3.4.1 September 2023
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.1-september-2023/v3.4.1-september-2023
Welcome to the FLOWX.AI v3.4.1 patch release! In this update, we've fine-tuned your FLOWX.AI experience with fixes and enhancements. While it may not be a major version update, it's packed with valuable improvements.
## **What's new**
### Scheduler Configuration
* We've introduced a new configuration for the Scheduler microservice. Learn more in our [**deployment guidelines**](./deployment-guidelines-v3.4.1.md#scheduler-configuration).
## **Bug Fixes** 🔧
### Timer Events
* **Fixed Timer Events Shyness**
* We've given our timer events a little nudge, and they will now reliably appear on the canvas after refreshing the page.
* **Resolved Mandatory Fields Error Messages**
* Our system has become more serious about mandatory fields and will now consistently display error messages when required fields are empty.
* **Improved Timer Expression Validators**
* We've implemented validators for timer expressions, ensuring they follow the rules as expected.
* **Fixed Timer Events in Read-Only Process Versions**
* Timer events will now behave appropriately and disable their fields in read-only process versions.
### Versioning
* **Enhanced Versioning System**
* We've made significant improvements to the versioning system to resolve these issues. Branch merging and UUID handling have been optimized, and the branching graph now consistently appears during import/export operations.
### Swimlane allocation
* **Removed Lingering UI After Process Definition Deletion**
* We've cleared away this lingering UI, so you won't encounter remnants of deleted process definitions in the swimlane allocation interface anymore.
### Revised Cache Key Organization
* Check the deployment guidelines for more information:
[Revised Cache Key Organization](deployment-guidelines-v3.4.1#revised-cache-key-organization)
### Other Bits
* Bid farewell to the autoarrange function in the **Process Designer**.
## **Gremlins to Watch Out For** 🙁
Keep an eye out for these quirks:
* **Slider UI element**: Our slider component can be a bit mysterious at times. Currently, it enjoys a game of hide-and-seek with the correct value when sourced from process data.
* **Document preview UI element**: Our document preview component has a unique sense of style. It prefers to take up only a portion of the screen, even when told to "fill" the entire width. It's a rebel with a cause.
* **Business rules**: Our business rule have a language barrier, but they're working on it. Changing the language of a business rule doesn't always lead to using the new language for execution. It's like they have a favorite phrase they won't let go of.
* **Process Designer**: Deleting a boundary node in the process designer and coming back from the UI Designer doesn't always clean up the associated sequence from the boundary event. It's like they left a party and forgot their hat.
## **Additional information**
For deployment guidelines, refer to:
[Deployment guidelines v3.4.1](./deployment-guidelines-v3.4.1)
# Deployment guidelines v3.4.2
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.2-october-2023/deployment-guidelines-v3.4.2
Do not forget, when upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FLOWX.AI Designer > Platform Status**.
After updating to **3.4.2** FLOWX.AI release, it is not possible to import old process definitions into the new platform release (available for exports from releases **\< 3.4.2**).

## Component versions
| 🧩 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 | 2.9.0 | 2.8.1 | 2.8.0 | 2.7.0 | 2.6.0 | 2.5.0 | 2.4.0 | 2.3.0 |
| ------------------------------ | ---------- | ------ | ------ | ------- | ------ | ------ | ------ | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| **process-engine** | **4.3.2** | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 | 0.4.49 | 0.4.44 | 0.4.42 | 0.4.42 | 0.4.36 | 0.4.29 | 0.4.22 | 0.4.21 |
| **admin** | **3.3.10** | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 | 0.3.55 | 0.3.47 | 0.3.43 | 0.3.40 | 0.3.36 | 0.3.34 | 0.3.29 | 0.3.23 |
| **designer** | **3.35.9** | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 |
| **@flowx/ui-sdk** | **3.35.9** | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.35.9** | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.35.9** | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | **3.35.9** | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 | 0.2.10 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 | 2.15.2 |
| **cms-core** | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.20 | 0.2.20 | 0.2.18 |
| **scheduler-core** | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.24 | 0.0.24 | 0.0.23 |
| **events-gateway** | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **notification-plugin** | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 | 1.0.198 | 1.0.198 | 1.0.197 | 1.0.194 | 1.0.194 | 1.0.191 | 1.0.191 | 1.0.190 |
| **document-plugin** | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 | 1.0.42 | 1.0.41 | 1.0.38 | 1.0.37 | 1.0.37 | 1.0.35 | 1.0.35 | 1.0.31 |
| **ocr-plugin** | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.0.109 |
| **license-core** | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.19 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.15 | 0.1.15 | 0.1.13 |
| **customer-management-plugin** | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.4 | 0.2.3 | 0.2.3 | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.20 | 0.1.20 | 0.1.18 |
| **task-management-plugin** | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 | 0.0.28 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.22 | 0.0.22 | 0.0.21 |
| **data-search** | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **audit-core** | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **reporting-plugin** | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **advancing-controller** | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **iOS renderer** | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FlowX 4.0**, the `paperflow-web-components` library will be deprecated. Instead, the new components can be found in `@flowx/ui-toolkit`.
### Recommended Versions for FLOWX.AI 3.4.2 ☑️
| FLOWX.AI Platform Version | Component name | Recommended version (tested versions) |
| ------------------------- | ----------------- | ------------------------------------- |
| 3.4.2 | Keycloak | 18.0.x |
| 3.4.2 | Kafka | 3.2.3 |
| 3.4.2 | PostgreSQL | 14.3.0 |
| 3.4.2 | MongoDB | 5.0.8 |
| 3.4.2 | Redis | 6.2.6 |
| 3.4.2 | Elasticsearch | 7.17 |
| 3.4.2 | OracleDB | 19.8.0.0.0 |
| 3.4.2 | Angular (Web SDK) | 15.0.0 |
FlowX.AI supports any version of the third-party components listed as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
# Additional configuration
## Designer values configuration
New environment variable
* `LEGACY_HTTP_VERSION`: false (default value) - Set this to `true` only for HTTP versions \< 2 in order for SSE to work properly. Can be omitted otherwise.
# v3.4.2 October 2023
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.2-october-2023/v3.4.2-october-2023
Welcome to the FLOWX.AI v3.4.2 patch release! This update brings several enhancements and fixes to improve your FLOWX.AI experience. While it may not be a major version update, it's packed with valuable improvements.
## **What's new**
### Web Renderer - Enhanced SSE Connection Handling
* Introducing the `LEGACY_HTTP_VERSION` variable: When set to `true`, it will automatically disconnect the Server-Sent Events (SSE) tab when it becomes inactive, and then seamlessly reconnect and retrieve the status when it becomes active. By default, `LEGACY_HTTP_VERSION` is set to `false`, meaning there will be no SSE disconnection when switching tabs, ensuring a smoother user experience.
Set `LEGACY_HTTP_VERSION` to `true` only for HTTP versions \< 2 to ensure proper SSE functionality. It can be omitted for other cases.
## **Bug Fixes** 🔧
* Addressed various bugs from previous versions to enhance stability and reliability.
### Other Bits
* We've bid farewell to the autoarrange function in the [**Process Designer**](../../docs/terms/flowx-process-designer).
## **Gremlins to Watch Out For** 🙁
Keep an eye out for these quirks:
* **Slider UI element**: Our slider component can be a bit mysterious at times. Currently, it enjoys a game of hide-and-seek with the correct value when sourced from process data.
* **Document preview UI element**: Our document preview component has a unique sense of style. It prefers to take up only a portion of the screen, even when told to "fill" the entire width. It's a rebel with a cause.
* **Business rules**: Our business rule have a language barrier, but they're working on it. Changing the language of a business rule doesn't always lead to using the new language for execution. It's like they have a favorite phrase they won't let go of.
* **Process Designer**: Deleting a boundary node in the process designer and coming back from the UI Designer doesn't always clean up the associated sequence from the boundary event. It's like they left a party and forgot their hat.
* **Datepicker Date Transformation**: Our Datepicker seems to possess a hidden talent. It mysteriously transforms random text into the current date when used with validators in UI Designer.
* **Text Element Issue**: Our text element tends to vanish when set to "0" or "-". Expected it to show up, but it's playing hide-and-seek instead!
## **Additional information**
For deployment guidelines, refer to:
[Deployment guidelines v3.4.2](./deployment-guidelines-v3.4.2)
# Deployment guidelines v3.4.3
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.3-october-2023/deployment-guidelines-v3.4.3
Do not forget, when upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FLOWX.AI Designer > Platform Status**.
After updating to **3.4.3** FlowX release, it is not possible to import old process definitions into the new platform release (available for exports from releases **\< 3.4.3**).

## Component versions
| 🧩 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 | 2.9.0 | 2.8.1 | 2.8.0 | 2.7.0 | 2.6.0 | 2.5.0 | 2.4.0 |
| ------------------------------ | ----------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| **process-engine** | **4.3.5** | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 | 0.4.49 | 0.4.44 | 0.4.42 | 0.4.42 | 0.4.36 | 0.4.29 | 0.4.22 |
| **admin** | **3.3.19** | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 | 0.3.55 | 0.3.47 | 0.3.43 | 0.3.40 | 0.3.36 | 0.3.34 | 0.3.29 |
| **designer** | **3.35.18** | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 |
| **@flowx/ui-sdk** | **3.35.18** | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.35.18** | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.35.18** | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | **3.35.18** | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 | 0.2.10 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 | 2.17.4 |
| **cms-core** | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.20 | 0.2.20 |
| **scheduler-core** | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.24 | 0.0.24 |
| **events-gateway** | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **notification-plugin** | **2.0.9** | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 | 1.0.198 | 1.0.198 | 1.0.197 | 1.0.194 | 1.0.194 | 1.0.191 | 1.0.191 |
| **document-plugin** | **2.0.10** | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 | 1.0.42 | 1.0.41 | 1.0.38 | 1.0.37 | 1.0.37 | 1.0.35 | 1.0.35 |
| **ocr-plugin** | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 |
| **license-core** | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.19 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.15 | 0.1.15 |
| **customer-management-plugin** | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.4 | 0.2.3 | 0.2.3 | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.20 | 0.1.20 |
| **task-management-plugin** | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 | 0.0.28 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.22 | 0.0.22 |
| **data-search** | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **audit-core** | **2.2.0** | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **reporting-plugin** | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **advancing-controller** | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **iOS renderer** | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FlowX 4.0**, the `paperflow-web-components` library will be deprecated. Instead, the new components can be found in `@flowx/ui-toolkit`.
### Recommended Versions for FLOWX.AI 3.4.3 ☑️
| FLOWX.AI Platform Version | Component name | Recommended version (tested versions) |
| ------------------------- | ----------------- | ------------------------------------- |
| 3.4.3 | Keycloak | 18.0.x |
| 3.4.3 | Kafka | 3.2.3 |
| 3.4.3 | PostgreSQL | 14.3.0 |
| 3.4.3 | MongoDB | 5.0.8 |
| 3.4.3 | Redis | 6.2.6 |
| 3.4.3 | Elasticsearch | 7.17 |
| 3.4.3 | OracleDB | 19.8.0.0.0 |
| 3.4.3 | Angular (Web SDK) | 15.0.0 |
FlowX.AI supports any version of the third-party components listed as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
# v3.4.3 October 2023
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.3-october-2023/v3.4.3-october-2023
In FLOWX.AI version 3.4.3, we've addressed several bugs to improve the stability and reliability of the platform. Here are the key bug fixes in this release.
## **Bug Fixes** 🔧
### Notification and Document plugins
* Fixed limited entries problem in Document plugin and Notification plugin, previously restricted to 20 entries.
* Resolved the issue causing the Document plugin to restart when starting with lag in Kafka topics.
### Web SDK
* Addressed CSS class assignment for `` issue, ensuring correct class assignment.
* Fixed a UI issue where adding a left margin to COLLECTION\_PROTOTYPE caused it to extend beyond the parent card.
* Corrected a bug in certain UI elements where selecting a 2nd level child value didn't clear when the parent value was updated.
* Resolved rendering issues for '0' and '-' values in text elements.
### Designer and Versioning
* Fixed the Designer issue where options in certain UI elements weren't displayed in dropdowns after previous selections.
* Resolved the Import Published Version Selection issue during process import, now displaying only available versions.
### Admin
* Fixed an issue that previously prevented the creation of new versions for processes with swimlane names containing empty spaces.
## **Other Bits**
* We've bid farewell to the autoarrange function in the [**Process Designer**](../../docs/terms/flowx-process-designer).
## **Gremlins to Watch Out For** 🙁
Keep an eye out for these quirks:
* **Document preview UI element**: Our document preview component has a unique sense of style. It prefers to take up only a portion of the screen, even when told to "fill" the entire width. It's a rebel with a cause.
* **Business rules**: Our business rule have a language barrier, but they're working on it. Changing the language of a business rule doesn't always lead to using the new language for execution. It's like they have a favorite phrase they won't let go of.
* **Process Designer**: Deleting a boundary node in the process designer and coming back from the UI Designer doesn't always clean up the associated sequence from the boundary event. It's like they left a party and forgot their hat.
* **Datepicker Date Transformation**: Our Datepicker seems to possess a hidden talent. It mysteriously transforms random text into the current date when used with validators in UI Designer.
## **Additional information**
For deployment guidelines, refer to:
[Deployment guidelines v3.4.3](./deployment-guidelines-v3.4.3)
# Deployment guidelines v3.4.4
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.4-november-2023/deployment-guidelines-v3.4.4
Do not forget, when upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FLOWX.AI Designer > Platform Status**.
After updating to **3.4.4** FLOWX.AI release, it is not possible to import old process definitions into the new platform release (available for exports from releases **\< 3.4.4**).

## Component versions
| 🧩 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 | 2.9.0 | 2.8.1 | 2.8.0 | 2.7.0 | 2.6.0 | 2.5.0 |
| ------------------------------ | ------------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| **process-engine** | **4.3.5-2v1** | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 | 0.4.49 | 0.4.44 | 0.4.42 | 0.4.42 | 0.4.36 | 0.4.29 |
| **admin** | **3.3.19-1** | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 | 0.3.55 | 0.3.47 | 0.3.43 | 0.3.40 | 0.3.36 | 0.3.34 |
| **designer** | **3.35.18-1** | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 |
| **@flowx/ui-sdk** | **3.35.18-1** | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.35.18-1** | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.35.18-1** | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | **3.35.18-1** | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 | 0.2.10 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 | 2.18.2 |
| **cms-core** | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.20 |
| **scheduler-core** | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.24 |
| **events-gateway** | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **notification-plugin** | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 | 1.0.198 | 1.0.198 | 1.0.197 | 1.0.194 | 1.0.194 | 1.0.191 |
| **document-plugin** | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 | 1.0.42 | 1.0.41 | 1.0.38 | 1.0.37 | 1.0.37 | 1.0.35 |
| **ocr-plugin** | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 |
| **license-core** | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.19 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.15 |
| **customer-management-plugin** | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.4 | 0.2.3 | 0.2.3 | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.20 |
| **task-management-plugin** | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 | 0.0.28 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.22 |
| **data-search** | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **audit-core** | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **reporting-plugin** | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **advancing-controller** | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **iOS renderer** | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FlowX 4.0**, the `paperflow-web-components` library will be deprecated. Instead, the new components can be found in `@flowx/ui-toolkit`.
### Recommended Versions for FLOWX.AI 3.4.4 ☑️
| FLOWX.AI Platform Version | Component name | Recommended version (tested versions) |
| ------------------------- | ----------------- | ------------------------------------- |
| 3.4.4 | Keycloak | 18.0.x |
| 3.4.4 | Kafka | 3.2.3 |
| 3.4.4 | PostgreSQL | 14.3.0 |
| 3.4.4 | MongoDB | 5.0.8 |
| 3.4.4 | Redis | 6.2.6 |
| 3.4.4 | Elasticsearch | 7.17 |
| 3.4.4 | OracleDB | 19.8.0.0.0 |
| 3.4.4 | Angular (Web SDK) | 15.0.0 |
FlowX.AI supports any version of the third-party components listed as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
# v3.4.4 November 2023
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.4-november-2023/v3.4.4-november-2023
In version 3.4.4 of FLOWX.AI, we have addressed some issues to improve the stability and reliability of the platform. Here are the key bug fixes in this release:
## **Bug Fixes** 🔧
### FLOWX.AI Engine 🚂
* Fixed an issue where sending an extra key when using [**bulk operations**](../../docs/platform-setup-guides/flowx-engine-setup-guide#topics-related-to-the-task-management-plugin) was not working as expected. Now you can attach extra keys to the header and they will be copied to the response. See the example below:

### Web SDK
* Fixed a small performance issue
## **Other Bits**
* We've bid farewell to the autoarrange function in the [**Process Designer**](../../docs/terms/flowx-process-designer).
## **Gremlins to Watch Out For** 🙁
Keep an eye out for these quirks:
* **Document preview UI element**: Our document preview component has a unique sense of style. It prefers to take up only a portion of the screen, even when told to "fill" the entire width. It's a rebel with a cause.
* **Business rules**: Our business rule have a language barrier, but they're working on it. Changing the language of a business rule doesn't always lead to using the new language for execution. It's like they have a favorite phrase they won't let go of.
* **Process Designer**: Deleting a boundary node in the process designer and coming back from the UI Designer doesn't always clean up the associated sequence from the boundary event. It's like they left a party and forgot their hat.
* **Datepicker Date Transformation**: Our Datepicker seems to possess a hidden talent. It mysteriously transforms random text into the current date when used with validators in UI Designer.
## **Additional information**
For deployment guidelines, refer to:
[Deployment guidelines v3.4.4](./deployment-guidelines-v3.4.4)
# Deployment guidelines v3.4.5
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.5-november-2023/deployment-guidelines-v3.4.5
Do not forget, when upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FLOWX.AI Designer > Platform Status**.
After updating to **3.4.5** FLOWX.AI release, it is not possible to import old process definitions into the new platform release (available for exports from releases **\< 3.4.5**).

## Component versions
| 🧩 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 | 2.9.0 | 2.8.1 | 2.8.0 | 2.7.0 | 2.6.0 |
| ------------------------------ | ------------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| **process-engine** | **4.3.5-2v2** | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 | 0.4.49 | 0.4.44 | 0.4.42 | 0.4.42 | 0.4.36 |
| **admin** | **3.3.19-3** | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 | 0.3.55 | 0.3.47 | 0.3.43 | 0.3.40 | 0.3.36 |
| **designer** | **3.35.18-2** | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 |
| **@flowx/ui-sdk** | **3.35.18-2** | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.35.18-2** | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.35.18-2** | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | **3.35.18-2** | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 | 0.2.10 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 | 2.19.2 |
| **cms-core** | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 |
| **scheduler-core** | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 |
| **events-gateway** | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **notification-plugin** | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 | 1.0.198 | 1.0.198 | 1.0.197 | 1.0.194 | 1.0.194 |
| **document-plugin** | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 | 1.0.42 | 1.0.41 | 1.0.38 | 1.0.37 | 1.0.37 |
| **ocr-plugin** | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 |
| **license-core** | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.19 | 0.1.18 | 0.1.18 | 0.1.18 | 0.1.18 |
| **customer-management-plugin** | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.4 | 0.2.3 | 0.2.3 | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 |
| **task-management-plugin** | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 | 0.0.28 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 |
| **data-search** | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **audit-core** | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **reporting-plugin** | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **advancing-controller** | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **iOS renderer** | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FlowX 4.0**, the `paperflow-web-components` library will be deprecated. Instead, the new components can be found in `@flowx/ui-toolkit`.
### Recommended Versions for FLOWX.AI 3.4.5 ☑️
| FLOWX.AI Platform Version | Component name | Recommended version (tested versions) |
| ------------------------- | ----------------- | ------------------------------------- |
| 3.4.5 | Keycloak | 18.0.x |
| 3.4.5 | Kafka | 3.2.3 |
| 3.4.5 | PostgreSQL | 14.3.0 |
| 3.4.5 | MongoDB | 5.0.8 |
| 3.4.5 | Redis | 6.2.6 |
| 3.4.5 | Elasticsearch | 7.17 |
| 3.4.5 | OracleDB | 19.8.0.0.0 |
| 3.4.5 | Angular (Web SDK) | 15.0.0 |
FlowX.AI supports any version of the third-party components listed as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
# v3.4.5 November 2023
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.5-november-2023/v3.4.5-november-2023
In version 3.4.5 of FLOWX.AI, we have addressed some issues to improve the stability and reliability of the platform. Here are the key bug fixes in this release:
## **Changed** 🛠️
### Process Versioning
* **Delete process definition** - After deleting or renaming a process definition, you can now add a new one with the same name, whether manually or through import, without any limitations or constraints.
## **Bug Fixes** 🔧
### Versioning
* Our version control got tangled in a game of interdimensional hopscotch, leaving branches stranded without their past travel tickets. We've straightened out the interdimensional portals now, ensuring that branches maintain their historical travel logs. No more lost branches in the space-time continuum!
### Web SDK
* **UI Designer** - We trained our containers in the art of origami, hoping they'd master the art of rearranging themselves gracefully. Unfortunately, they got carried away with their newfound skill and refused to listen when asked to reorder themselves properly. **We've had a serious talk with them, and now they promise to behave! You can copy, paste, and rearrange containers without them folding into chaos.**
## **Other Bits**
* We've bid farewell to the autoarrange function in the [**Process Designer**](../../docs/terms/flowx-process-designer).
## **Gremlins to Watch Out For** 🙁
Keep an eye out for these quirks:
* **Document preview UI element**: Our document preview component has a unique sense of style. It prefers to take up only a portion of the screen, even when told to "fill" the entire width. It's a rebel with a cause.
* **Business rules**: Our business rule have a language barrier, but they're working on it. Changing the language of a business rule doesn't always lead to using the new language for execution. It's like they have a favorite phrase they won't let go of.
* **Process Designer**: Deleting a boundary node in the process designer and coming back from the UI Designer doesn't always clean up the associated sequence from the boundary event. It's like they left a party and forgot their hat.
* **Datepicker Date Transformation**: Our Datepicker seems to possess a hidden talent. It mysteriously transforms random text into the current date when used with validators in UI Designer.
## **Additional information**
For deployment guidelines, refer to:
[Deployment guidelines v3.4.5](./deployment-guidelines-v3.4.5)
# Deployment guidelines v3.4.6
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.6-december-2023/deployment-guidelines-v3.4.6
Do not forget, when upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FLOWX.AI Designer > Platform Status**.
After updating to **3.4.6** FLOWX.AI release, it is not possible to import old process definitions into the new platform release (available for exports from releases **\< 3.4.6**).

## Component versions
| 🧩 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 | 2.9.0 | 2.8.1 | 2.8.0 | 2.7.0 |
| ------------------------------ | ------------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ | -------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| **process-engine** | **4.3.5-2v6** | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 | 0.4.49 | 0.4.44 | 0.4.42 | 0.4.42 |
| **admin** | **3.3.19-4** | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 | 0.3.55 | 0.3.47 | 0.3.43 | 0.3.40 |
| **designer** | **3.35.18-3** | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 |
| **@flowx/ui-sdk** | **3.35.18-3** | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.35.18-3** | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.35.18-3** | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | **3.35.18-3** | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 | 0.2.10 | 0.2.6 | 0.2.6 | 0.2.6 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 | 2.33.0 | 2.28.1 | 2.24.2 | 2.23.0 |
| **cms-core** | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 | 0.2.23 | 0.2.23 | 0.2.23 | 0.2.23 |
| **scheduler-core** | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 | 0.0.27 | 0.0.27 | 0.0.27 | 0.0.27 |
| **events-gateway** | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - | - | - | - | - | - | - | - | - | - |
| **notification-plugin** | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 | 1.0.198 | 1.0.198 | 1.0.197 | 1.0.194 |
| **document-plugin** | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 | 1.0.42 | 1.0.41 | 1.0.38 | 1.0.37 |
| **ocr-plugin** | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 | 0.1.5 |
| **license-core** | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.19 | 0.1.18 | 0.1.18 | 0.1.18 |
| **customer-management-plugin** | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.4 | 0.2.3 | 0.2.3 | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 | 0.1.22 | 0.1.22 | 0.1.22 | 0.1.22 |
| **task-management-plugin** | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 | 0.0.28 | 0.0.28 | 0.0.27 | 0.0.27 |
| **data-search** | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a |
| **audit-core** | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **reporting-plugin** | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **advancing-controller** | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **iOS renderer** | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FlowX v4.0**, the `paperflow-web-components` library will be deprecated. Instead, the new components can be found in `@flowx/ui-toolkit`.
### Recommended Versions for FLOWX.AI 3.4.6 ☑️
| FLOWX.AI Platform Version | Component name | Recommended version (tested versions) |
| ------------------------- | ----------------- | ------------------------------------- |
| 3.4.6 | Keycloak | 18.0.x |
| 3.4.6 | Kafka | 3.2.3 |
| 3.4.6 | PostgreSQL | 14.3.0 |
| 3.4.6 | MongoDB | 5.0.8 |
| 3.4.6 | Redis | 6.2.6 |
| 3.4.6 | Elasticsearch | 7.17 |
| 3.4.6 | OracleDB | 19.8.0.0.0 |
| 3.4.6 | Angular (Web SDK) | 15.0.0 |
FlowX.AI supports any version of the third-party components listed as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
# v3.4.6 December 2023
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.6-december-2023/v3.4.6-december-2023
In version 3.4.6 of FLOWX.AI, we have addressed some issues to improve the stability and reliability of the platform. Here are the key bug fixes in this release:
## **Bug Fixes** 🔧
### Process Designer
* Cured a case of the "Start-Subprocess Stumper": now configuring existing start subprocess actions is a breeze! No more invisible barriers.
### Process Engine
* Liberated process versioning on Oracle from its migration woes! No more version control drama, it's all harmonious now.
* Put an end to the confusion: JavaScript arrays will no longer masquerade as Java maps. They've embraced their true identities.
* Our token instance ID DB index on Oracle has been reincarnated! It’s back and better than ever, ready to keep track of those elusive tokens.
### Versioning
* Put an end to the process definition merge branch mayhem! No more tangled branches, just clean, pristine definitions merging like old friends at a reunion.
## **Other Bits**
* We've bid farewell to the autoarrange function in the [**Process Designer**](../../docs/terms/flowx-process-designer).
## **Gremlins to Watch Out For** 🙁
Keep an eye out for these quirks:
* **Document preview UI element**: Our document preview component has a unique sense of style. It prefers to take up only a portion of the screen, even when told to "fill" the entire width. It's a rebel with a cause.
* **Business rules**: Our business rule have a language barrier, but they're working on it. Changing the language of a business rule doesn't always lead to using the new language for execution. It's like they have a favorite phrase they won't let go of.
* **Process Designer**: Deleting a boundary node in the process designer and coming back from the UI Designer doesn't always clean up the associated sequence from the boundary event. It's like they left a party and forgot their hat.
* **Datepicker Date Transformation**: Our Datepicker seems to possess a hidden talent. It mysteriously transforms random text into the current date when used with validators in UI Designer.
## **Additional information**
For deployment guidelines, refer to:
[Deployment guidelines v3.4.6](./deployment-guidelines-v3.4.6)
# Deployment guidelines v3.4.7
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.7-january-2024/deployment-guidelines-v3.4.7
Do not forget, when upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FLOWX.AI Designer > Platform Status**.
After upgrading to **3.4.7** FlowX.AI release, it is not possible to import old process definitions into the new platform release (exported from releases **\< 3.4.7**).

## Component versions
| 🧩 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 |
| ------------------------------ | -------------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ | -------- | ------- | ------- | ------- | ------- |
| **process-engine** | **4.3.5-2v11** | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 |
| **admin** | **3.3.19-6** | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 |
| **designer** | **3.35.18-5** | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 |
| **@flowx/ui-sdk** | **3.35.18-5** | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.35.18-5** | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.35.18-5** | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | **3.35.18-5** | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 |
| **cms-core** | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 |
| **scheduler-core** | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 |
| **events-gateway** | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - | - | - | - | - | - |
| **notification-plugin** | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 |
| **document-plugin** | **2.0.10-1** | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 |
| **ocr-plugin** | **1.0.15** | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 |
| **license-core** | **1.1.0** | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 |
| **customer-management-plugin** | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.4 | 0.2.3 | 0.2.3 | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 |
| **task-management-plugin** | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 |
| **data-search** | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a |
| **audit-core** | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a |
| **reporting-plugin** | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a |
| **advancing-controller** | **0.3.5-1** | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a |
| **iOS renderer** | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a |
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FlowX v4.0**, the `paperflow-web-components` library will be deprecated. Instead, the new components can be found in `@flowx/ui-toolkit`.
### Third-party recommended component versions
| FLOWX.AI Platform Version | Component name | Recommended versions (tested versions) |
| ------------------------- | ----------------- | -------------------------------------- |
| 3.4.7 | Keycloak | 18.x |
| 3.4.7 | Kafka | 3.2.3 |
| 3.4.7 | PostgreSQL | 14.3.0 |
| 3.4.7 | MongoDB | 5.0.8 |
| 3.4.7 | Redis | 6.2.6 |
| 3.4.7 | Elasticsearch | 7.17 |
| 3.4.7 | OracleDB | 19.8.0.0.0 |
| 3.4.7 | Angular (Web SDK) | 15.0.0 |
FlowX.AI supports any listed version of the prerequisite third-party components in the table above.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
## Additional Configuration
### Process Engine
Introducing a new environment variable designed to facilitate the coordinated or independent expiration of subprocesses within a parent process.
| Environment Variable | Default Value | Explanation |
| ----------------------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------- |
| `FLOWX_PROCESS_EXPIRE_SUBPROCESSES` | true | When set to true, expiration of a parent process triggers simultaneous expiration of all associated subprocesses |
For further details, refer to the documentation [**here**](../../3.x/setup-guides/flowx-engine-setup-guide/engine-setup#managing-subprocesses-expiration).
### Documents Plugin
The DPI value for the PDF to JPEG conversion can now be configured via the `FLOWX_CONVERT_DPI` environment variable.
| Environment Variable | Default Value | Explanation |
| -------------------- | ------------- | ---------------------------------------------------------------------------------------------------------- |
| `FLOWX_CONVERT_DPI` | 150 | Sets the DPI (dots per inch) for PDF to JPEG conversion. Higher values result in higher resolution images. |
For further details, refer to the documentation [**here**](../../3.x/setup-guides/plugins-setup-guide/documents-plugin-setup#conversion).
### OCR Plugin
The following environment variables were introduced to control the acceptable aspect ratio range for recognizing signed documents in OCR processes. Here's a brief description of each:
| Environment Variable | Definition | Default Value |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------- |
| `OCR_SIGNATURE_MAX_RATIO` | This variable sets the maximum acceptable aspect ratio for a signed scanned document (the OCR plugin will recognize a signature only if the document ratio is greater than or equal to the specified minimum ratio) | `1.43` |
| `OCR_SIGNATURE_MIN_RATIO` | This variable sets the minimum acceptable aspect ratio for a signed scanned document (in this context, the OCR plugin will consider a detected signature only if the document aspect ratio is less than or equal to the specified maximum ratio) | `1.39` |
The plugin has been tested with aspect ratio values between 1.38 and 1.43. However, caution is advised when using untested values outside this range, as they may potentially disrupt the functionality. Adjust these parameters at your own risk and consider potential consequences, as untested values might lead to plugin instability or undesired behavior.
For further details, refer to the documentation [**here**](../../3.x/setup-guides/plugins-setup-guide/ocr-plugin-setup#control-aspect-ratio).
# v3.4.7 January 2024
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.7-january-2024/v3.4.7-january-2024
Welcome to the FLOWX.AI v3.4.7 patch release! This update brings several enhancements and fixes to improve your FLOWX.AI experience. While it may not be a major version update, it's packed with valuable improvements.
## **What's new**
### Process Engine 🚂
#### 🆕 **Default Data Transmission to Frontend (Improvement)**
In version 3.4.7 of the FLOWX.AI Platform, we're introducing a practical improvement related to sending data to the frontend. This enhancement aims to simplify the process of displaying process data in the frontend UI, reducing the time and effort required for configuration.
###### Background
Previously, the Configurator required explicit mention of objects to be sent to the frontend for displaying data in User Task UI. This often included configuring keys for various UI elements. To make this process more straightforward, we've implemented a default mechanism that automatically sends all keys configured as sources for UI elements to the frontend.
###### Changes and Benefits
To streamline the configuration process, we've made the following updates in the UI Configuration:
* **Label Change**: We've updated the label in the configuration UI under "Message" to "Custom UI Payload" for clarity.
* **Runtime Behavior (Default Data Transmission)**: During runtime, the Backend (BE) will automatically send to the frontend all data available as process variables with matching keys. This includes default keys and objects specified in the "Message" option of the root element for User Tasks.
* **Default Keys Sent to Frontend**: For various UI elements, predefined keys will be sent to the frontend by default.
#### 🆕 **Managing Subprocesses Expiration**
We introduced a new mechanism for precise control over subprocesses expiration.
Additional Configuration needed! Check the [**deployment guidelines**](deployment-guidelines-v3.4.7#process-engine).
### Documents Plugin 📄
🆕 **PDF to JPEG Conversion Improvement**
We have enhanced the PDF to JPEG conversion functionality. This improvement allows users to configure the DPI (dots per inch) value for converting PDFs to JPEG files, resulting in higher resolution images.
Additional Configuration needed! Check the [**deployment guidelines**](deployment-guidelines-v3.4.7#additional-configuration).
### OCR Plugin 👁️
🆕 **Control Aspect Ratio**
Introduced a mechanism to fine-tune the OCR by defining a range of acceptable aspect ratios for particular documents. Adjusting these ratios of the documents can help tailor the OCR plugin to different types of documents.
Additional Configuration needed! Check the [**deployment guidelines**](deployment-guidelines-v3.4.7#ocr-plugin).
### License Core
* Improved licensing core for a refined experience, ensuring improved functionality and ease of use.
## **Bug Fixes** 🔧
### Process Engine 🚂
#### Bug Fix: Subprocess Party Time 🎉
So, to make sure the subprocesses don't miss the farewell fireworks when the parent process expires, we've equipped them with a "Subprocess Farewell Dance Routine"! Now, when the parent process decides it's time to go, the subprocesses won't be hanging around like party crashers - they'll join the exit dance and wrap things up properly.
#### Bug Fix: Subprocess Timeout Tango - Interrupted Edition 💃🕰️
In the grand dance of subprocesses, we stumbled upon a partner who wasn't quite following the choreography. The bug report stated that subprocesses were not gracefully bowing out after an interrupting timer event. Now, when the timer says it's time to leave, the subprocesses won't be sticking around for an encore!
### Advancing Controller
#### Bug Fix: Parallel Advancing Ballet - Failure Recovery 🩰🐞
To ensure our parallel advancing ballet doesn't lose its rhythm, we've introduced the "Failure Recovery Pirouette." Now, when an advancing event faces failure, the partitions won't be left wondering if the music stopped—they'll gracefully exit the stage, and inactive partitions will automatically join the backstage crew, making room for the next act.
Thank you for being part of the FLOWX.AI Platform community, where even bugs are fixed with a twirl and a leap! 😄🩰🎭
## **Gremlins to Watch Out For** 🙁
Keep an eye out for these quirks:
* **Document preview UI element**: Our document preview component has a unique sense of style. It prefers to take up only a portion of the screen, even when told to "fill" the entire width. It's a rebel with a cause.
* **Business rules**: Our business rule have a language barrier, but they're working on it. Changing the language of a business rule doesn't always lead to using the new language for execution. It's like they have a favorite phrase they won't let go of.
* **Process Designer**: Deleting a boundary node in the process designer and coming back from the UI Designer doesn't always clean up the associated sequence from the boundary event. It's like they left a party and forgot their hat.
* **Datepicker Date Transformation**: Our Datepicker seems to possess a hidden talent. It mysteriously transforms random text into the current date when used with validators in UI Designer.
## **Additional information**
For deployment guidelines, refer to:
# Deployment guidelines v3.4.8
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.8-june-2024/deployment-guidelines-v3.4.8
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FLOWX.AI Designer > Platform Status**.
After updgrading to **3.4.8** FlowX.AI release, it is not possible to import old process definitions into the new platform release (exported from releases **\< 3.4.8**).

## Component versions
| 🧩 | 3.4.8 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 | 2.13.0 | 2.12.0 | 2.11.0 | 2.10.0 |
| ------------------------------ | -------------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ | -------- | ------- | ------- | ------- | ------- |
| **process-engine** | **4.3.5-2v14** | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | 0.4.104 | 0.4.95 | 0.4.90 | 0.4.83 | 0.4.60 |
| **admin** | **3.3.19-8** | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 | 0.3.119 | 0.3.103 | 0.3.92 | 0.3.81 | 0.3.60 |
| **designer** | **3.35.18-7** | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 |
| **@flowx/ui-sdk** | **3.35.18-7** | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-toolkit** | **3.35.18-7** | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a |
| **@flowx/ui-theme** | **3.35.18-7** | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a | n/a | n/a | n/a | n/a |
| **paperflow-web-components** | **3.35.18-7** | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 | 2.63.6 | 2.60.7 | 0.2.10 | 0.2.10 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | - | - | - | - | 2.78.4-1 | 2.63.6 | 2.60.7 | 2.48.9 | 2.39.2 |
| **cms-core** | **2.0.3** | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 | 0.2.38 | 0.2.36 | 0.2.33 | 0.2.30 | 0.2.25 |
| **scheduler-core** | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 | 0.0.34 | 0.0.34 | 0.0.33 | 0.0.28 |
| **events-gateway** | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - | - | - | - | - | - |
| **notification-plugin** | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 | 1.0.206 | 1.0.206 | 1.0.206 | 1.0.205 | 1.0.200 |
| **document-plugin** | **2.0.10-4** | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 | 1.0.53 | 1.0.53 | 1.0.52 | 1.0.47 |
| **ocr-plugin** | 1.0.15 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.33 | 0.1.5 | 0.1.5 | 0.1.5 |
| **license-core** | **1.2.1** | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 |
| **customer-management-plugin** | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.4 | 0.2.3 | 0.2.3 | 0.2.1 | 0.1.28 | 0.1.28 | 0.1.28 | 0.1.27 | 0.1.23 |
| **task-management-plugin** | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 | 0.0.42 | 0.0.40 | 0.0.37 | 0.0.29 |
| **data-search** | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 | 0.0.8 | 0.0.6 | n/a | n/a |
| **audit-core** | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 | 0.0.8 | 0.0.5 | n/a | n/a | n/a |
| **reporting-plugin** | **0.1.5** | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 | n/a | n/a | n/a | n/a |
| **advancing-controller** | 0.3.5-1 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 | n/a | n/a | n/a | n/a |
| **iOS renderer** | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 | n/a | n/a | n/a | n/a | n/a |
| **Android renderer** | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | n/a | n/a | n/a | n/a | n/a |
With the release of **FLOWX.AI 3.0**, there have been some changes that you need to be aware when upgrading to the latest version:
* The `flowx-process-renderer` has been migrated to `@flowx\ui-sdk`.
* As of **FlowX v4.0**, the `paperflow-web-components` library will be deprecated. Instead, the new components can be found in `@flowx/ui-toolkit`.
### Third-party recommended component versions
| FLOWX.AI Platform Version | Component name | Recommended versions (tested versions) |
| ------------------------- | ----------------- | -------------------------------------- |
| 3.4.8 | Keycloak | 18.x |
| 3.4.8 | Kafka | 3.2.3 |
| 3.4.8 | PostgreSQL | 14.3.0 |
| 3.4.8 | MongoDB | 5.0.8 |
| 3.4.8 | Redis | 6.2.6 |
| 3.4.8 | Elasticsearch | 7.17 |
| 3.4.8 | OracleDB | 19.8.0.0.0 |
| 3.4.8 | Angular (Web SDK) | 15.0.0 |
FlowX.AI supports any listed version of the prerequisite third-party components in the table above.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FLOWX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
## Additional Configuration
Before upgrading to v3.4.8 version we recommend to execute the initial data partitioning setup manually. This is needed no matter if you enable partitioning or not.
Therefore, when starting the new version of the process-engine, we recommend manually executing the setup SQL commands from Liquibase, as they may take more time. After setup, all existing information will go into the initial partition.
If partitioning is enabled, the initial partition will continue to be used until a new `partition_id` is generated according to the partitioning interval (DAY, WEEK, MONTH). Future partitions will be created automatically.
If partitioning is not enabled, all data will continue to be stored in this initial partition.
### Process instance data archiving
#### FlowX.AI configuration
New settings (new environment variables) have been added for process instance data partitioning and archiving. Check the following documentation sections for more details:
# v3.4.8 June 2024
Source: https://docs.flowx.ai/release-notes/v3.x.x/v3.4.8-june-2024/v3.4.8-june-2024
Welcome to the FlowX.AI v3.4.8 patch release! This update brings several enhancements and fixes to improve your FlowX.AI experience. While it may not be a major version update, it's packed with valuable improvements.
## What's new? 🆕
### FlowX.AI Engine: Process Instance Data Archiving
Database compatibility: Oracle DBs.
We are introducing a new system for archiving data related to old process instances. This enables the implementation of data retention policies, with more predictable storage usage and costs.
Some operations involving process instance data can be snappier, given the lower amount of data in the system and new structure. Archiving relies on partitioning data based on the process instance start time. Each partition is associated with a time period (day, week, month), and retention is defined by the number of periods maintained in the system.
Archived data remains in new tables in the database, optionally compressed, and is no longer accessible in FlowX. These tables can be compressed, copied, moved, archived, or deleted without affecting other processes in FlowX.
For more details about process instance partitioning and archiving, including configuration of the feature, see:
### Documents Plugin
Introducing configurable temporary file deletion strategy. Explore configuration details in the section below:
## Bug Fixes 🛠️
We've also squashed pesky bugs to ensure a smoother and more reliable experience across the board:
### FlowX.AI Engine
* **Token stuck in END Parallel Gateway node 🚧**: We've cleared the traffic jam where tokens were stuck at the END parallel gateway node. Now, your processes will flow like a river, smooth and unstoppable!
* **Process Continuation Issue**: Fixed an issue where processes started in version 2.14 couldn't time travel to version 3.4.x. Trying to advance these processes caused errors or made them vanish into the void. We've patched the timeline by updating the start swimlane ID in the database, so your processes can now journey safely to the future!
### FlowX.AI Admin
* **Process Version Memory Loss**: Fixed a bug where some process version params (like application ID, reporting usage, task manager usage, indexing keys, and application URL) mysteriously disappeared from old process definitions when importing a new version. We've given these params a memory boost, so they stick around like they should!
### FlowX.AI CMS
* **Lost in Translation**: Fixed an issue where languages were feeling a bit `null` and `void` in newly created environments. Instead of partying with an empty list like they should, they were sitting around with null values, causing chaos when trying to add new languages. Now, languages get the memo right away and initialize themselves properly.
* **Chill Media Library Search**: Updated the Media Library search so it no longer cares about upper or lower case. Now, whether you type in CAPS or whisper softly in lowercase, it'll find what you're looking for. No more sensitive searches, just chill browsing in the library!
## Additional information
For deployment guidelines, refer to:
# Deployment guidelines v4.0
Source: https://docs.flowx.ai/release-notes/v4.x/v4.0.0-april-2024/deployment-guidelines-v4.0.0
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FLOWX.AI Designer > Platform Status**.
After upgrading to **4.0** FLOWX.AI release, it is not possible to import old process definitions into the new platform release (exported from releases **\< 4.0**).

## Component versions
As of **FlowX.AI** next release (v4.1.0), the `paperflow-web-components` library will be deprecated, removing the dependencies. Instead, the new components can be found in `@flowx/ui-toolkit`.
| Component | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.14.0 |
| ---------------------------- | ---------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ | -------- |
| **process-engine** | **5.10.3** | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 | 0.4.104 |
| **admin** | **4.6.10** | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 | 0.3.119 |
| **designer** | **4.0.1** | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 |
| **@flowx/ui-sdk** | **4.0.1** | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a |
| **@flowx/ui-toolkit** | **4.0.1** | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a |
| **@flowx/ui-theme** | **4.0.1** | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | n/a |
| **paperflow-web-components** | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 | 2.78.4-1 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | - | - | - | - | 2.78.4-1 |
| **cms-core** | **2.2.5** | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 | 0.2.38 |
| **scheduler-core** | **2.1.4** | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.34 |
| **events-gateway** | **2.0.4** | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - | - |
| **notification-plugin** | **3.0.6** | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 | 1.0.206 |
| **document-plugin** | **3.0.6** | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 | 1.0.53 |
| **ocr-plugin** | **1.0.17** | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 | 0.1.33 |
| **license-core** | **2.0.5** | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 | 0.1.28 |
| **task-management-plugin** | **4.0.5** | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 | 0.0.42 |
| **data-search** | **1.0.6** | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 | 0.0.8 |
| **audit-core** | **3.1.4** | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 | 0.0.8 |
| **reporting-plugin** | **0.1.5** | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 | 0.0.39 |
| **advancing-controller** | **1.1.4** | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 | 0.0.6 |
| **iOS renderer** | **3.0.0** | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 | n/a |
| **Android renderer** | **3.0.0** | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 | n/a |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.0 | Keycloak | 22.x |
| 4.0 | Kafka | 3.2.x |
| 4.0 | PostgreSQL | 16.2.x |
| 4.0 | MongoDB | 7.0.x |
| 4.0 | Redis | 7.2.x |
| 4.0 | Elasticsearch | 7.17.x |
| 4.0 | Oracle Database | 19.8.0.0.0 |
| 4.0 | Angular (Web SDK) | 16.3.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company’s specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
# Deployment changes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.0.0-april-2024/migrating-from-v3.4.x/migrating-from-v3.4.x
This document outlines the additional configuration changes required for deployment in version 4.0
### Revised cache key organization
To ensure a smooth transition to the 4.0 release, it's crucial to clear the cache before upgrading to v4.0. Use the following endpoint and request body for cache clearing:
Ensure that this operation is carried out by a user with an admin role.
##### Endpoint:
`POST {{baseUrlAdmin}}/api/internal/cache/clear`
##### Body:
```json theme={"system"}
{
"cacheNames": [
"flowx:core:cache"
]
}
```
This endpoint is designed to purge Redis caches selectively. It will exclusively delete caches that are specified in the admin microservice properties under the property key: "application.redis.clearable-caches".
### Access rights for Theme Management
To utilize the new theme management feature, make sure the following access rights are configured for the CMS microservice:
| Module | Scope | Role default value | Microservice |
| ------------- | ------ | -------------------- | ------------------ |
| manage-themes | import | ROLE\_THEMES\_IMPORT | Content Management |
| | import | ROLE\_THEMES\_EDIT | Content Management |
| | import | ROLE\_THEMES\_ADMIN | Content Management |
| manage-themes | read | ROLE\_THEMES\_READ | Content Management |
| | read | ROLE\_THEMES\_EDIT | Content Management |
| | read | ROLE\_THEMES\_ADMIN | Content Management |
| | read | ROLE\_THEMES\_IMPORT | Content Management |
| manage-themes | edit | ROLE\_THEMES\_EDIT | Content Management |
| | edit | ROLE\_THEMES\_ADMIN | Content Management |
| manage-themes | admin | ROLE\_THEMES\_ADMIN | Content Management |
Learn more
### Logging
To streamline logging and enhance readability, you can now disable health endpoint calls cluttering the logs of various deployed FlowX microservices using the following environment variables:
* `LOGGING_LEVEL_WEB: INFO` (default)
* `LOGGING_LEVEL_ORG_SPRINGFRAMEWORK_WEB: INFO` (default)
If logs lack detail, consider setting the value to ‘DEBUG’.
# Process configuration
Source: https://docs.flowx.ai/release-notes/v4.x/v4.0.0-april-2024/migrating-from-v3.4.x/process-configuration
This guide outlines changes in process and UI configuration from v3.4.x to 4.0 version.
In the latest version, there have been updates and adjustments to process and UI configurations to improve performance and usability. Below are the key changes and steps to migrate your configurations:
## Business Rules
* `output.put` method is required to generate structured output data when using input to validate or filter incoming data based on certain conditions (commonly used to retrieve information needed for processing)
MVEL Syntax Change: In MVEL 2.5.2.Final, the direct property assignment syntax (input.property = value) is no longer supported. Instead, you must use the output.put method (output.put("property", value)) to generate structured output data.
* This represents a fundamental change in how MVEL scripts interact with data
* The input object should be treated as read-only for accessing incoming data\*
* The output object with its put method must be used for storing any results or modified values
* `processInstanceID` and `processInstanceUUID` - This release introduces enhancements aimed at isolating process instance related values from business/configured parameters. Key changes include the removal of `processInstanceId`, `parentProcessInstanceId`, and `parentProcessInstanceUuid` from paramValues zone on process instance, relocating them to a distinct location within process instance data - to a new object called “instanceMetadata”.
### Business rules - new object "instanceMetadata"
Introducing a new object named "instanceMetadata". This object will serve as a container for process instance related values, allowing you to access relevant attributes in your scripts more effectively. Key specifications include making certain variables/parameters read-only, controlled by FlowX, and facilitating attribute access through the `instanceMetadata` object rather than directly calling attributes.
Configurators will utilize `instanceMetadata` to access attributes instead of directly calling them as in version 3.4.x. For example, `input.processInstanceId` will be accessed through `instanceMetadata.processInstanceId`.
Review and update any affected business rules accordingly.
#### Example of business rule (with Python)
This example is made just to demonstrate the use of the new `instanceMetadata.get` object.
```python theme={"system"}
test_string = "There are 2 apples for 4 persons"
# using List comprehension + isdigit() +split()
# getting numbers from string
res = [int(i) for i in test_string.split() if i.isdigit()]
output.put("app", {"phyton": str(res), "key3": "Value updated"});
key = input.get("app").get("key1")
id3 = instanceMetadata.get("processInstanceId")
uuid3 = instanceMetadata.get("processInstanceUuid")
output.put("id3", id3);
output.put("uuid3", uuid3);
```
## UI configuration
There are some changes that were brought together with the Theme Management feature to the UI components in **4.0** release that might impact your previous UI configuration.
### Root components
* **Card Element**: Previously (in **v3.4.x**) could have set a **Card style** property: **border** or be **raised**.
| Card 4.0 | Card 3.0 |
| :------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------: |
|  |  |
| | |
Now, for processes migrated from **v3.4.x** to achieve the previous styling (with "raised prop" or "border") you can either set up from Themes or by using **Theme Overrides** for **Card** element in **UI Designer**:
Depending on the number of Card elements present in your migrated processes, it's essential to devise a strategic approach. If a significant portion of the cards feature "border" styling, you can configure this setting within Themes Management and will be cascading through all of them. For the remaining cards, manual intervention is required to apply the "raised" effect by **overriding** their styles using **Theme Overrides**.

Read more about **Theme management** feature:
### Buttons
All **primary** and **secondary** buttons, in 4.x they transformed to **fill** buttons. If there were secondary buttons, once moved to "fill", they will appear similar to primary ones. You should perform an override in the UI Designer to make them look like secondary buttons as they did initially.

| Version | Primary | Secondary | Ghost | Text | Fill | New States: Pressed, Hover, Disabled |
| ------- | :-----: | :-------: | :---: | :--: | :--: | :----------------------------------: |
| 3.4.x | ✓ | ✓ | ✓ | ✓ | | |
| 4.0.x | | | ✓ | ✓ | ✓ | ✓ |
By following this migration guide, you can seamlessly transition to the Theming 4.0 feature, enhancing your project's design process and ensuring consistency across platforms and branches.
### Icons - no color property
Now, all icon color settings have a "No Color" option, which allows the icon (SVG) to be rendered with its original color settings.
If you are utilizing SVG icons for UI components (such as a left icon on an input element) and you desire to ensure that the color remains consistent regardless of the theme settings, it is imperative to override all states associated with the "Left icon," as demonstrated in the example below:

## Layout
In the context of the Theme Management feature, you can now apply the previously configured paddings directly from the previosuly used theme JSONs within the theme settings. Review the paddings you had set up previously and apply them in the Themes section.
**Themes → Global Settings → Styles**
### Components spacing
If you set it in **Theme → Global Settings**, it will cascade to all the following components:
* Input/ Selection
* Buttons
* Radio/Checkbox
* Message
* Segmentted Button
* Stepper
* Tabs

If you want to override the padding set in **Global Settings** for the above components, navigate to **Components → Your Component** and set your desired padding.
After editing the padding for a component, you can also reset the values and they will be set back to the values you added in **Global settings**.
### Layout elements
To set the padding for layout elements( **Cards** and **Forms**), access:
**Themes → Components → Layout Elements**
# Renderer SDKs
Source: https://docs.flowx.ai/release-notes/v4.x/v4.0.0-april-2024/migrating-from-v3.4.x/renderers
This guide assists in migrating from FlowX v3.4.x to v4.0.
## Web SDK migration guide
### Theming changes
All old configurations linked with the previous theming setup (versions prior to 4.0) must be removed from your SDK deployment:
1. Review Usage: Identify where you have applied theming v1 configurations in your project.
#### 3.4.x example:
```yaml theme={"system"}
...
themePaths: {
components: 'assets/theme/theme_components.json',
tokens: 'assets/theme/theme_tokens.json',
...
},
```
2. Update to Theming 4.0: Revise your theming configurations to use the latest theming v2 approach. Refer to our documentation or migration resources for guidance on transitioning to the new theming.
Learn more
### Authorization token
* **AuthToken Management**: The ui-sdk no longer relies on the authToken being stored in LOCAL\_STORAGE. Instead, the 'access\_token' is now passed as an input to the `` component through a private variable.
**Breaking change**: This update is mandatory for proper functionality of SSE (Server-Sent Events).
By adopting this approach, clients gain the flexibility to implement the most secure token management strategy tailored to their specific security needs. Moreover, shifting the responsibility to the container application for updating the 'access\_token' input ensures that any changes or refreshes to the authToken are securely managed within the application's domain. This proactive approach effectively mitigates potential security vulnerabilities associated with token management, offering a robust and adaptable solution.
Learn more
***
## iOS SDK migration guide
### Integration changes
The module name has changed from `FlowX` to `FlowXRenderer`.
Any files importing the SDK should be updated with the new module name.
```
//replace this
import FlowX
//with this
import FlowXRenderer
```
### Initialization config changes
A new configuration parameter, named `enginePath` was added to `FXConfig`. It represents the URL path component to the process engine.
```swift theme={"system"}
FXConfig.sharedInstance.configure { (config) in
config.baseURL = myBaseURL
config.enginePath = "engine"
config.imageBaseURL = myImageBaseURL
config.language = "en"
config.logLevel = .verbose
}
```
### Theming changes
The theming setup mechanism was updated.
Learn more
### Custom components
* The type of `data` property of custom components has changed from `[String: Any]` to `Any`.
* As a consequence, type checking, casting and extracting the needed data must be part of the implementation details of the custom component.
Learn more
### Start process updates
* The API for starting a process has changed.
* There are now 3 methods available.
Learn more
### Continue process updates
* The API for resuming an existing process has changed.
* There are now 3 methods available.
Learn more
***
## Android SDK migration guide
### Initialization config changes
A new configuration parameter, named `enginePath` was added for identifying the FlowX Process Engine microservice.
When the SDK initialization happens through the `FlowxSdkApi.getInstance().init(...)` method, the argument has to be set inside the `config: SdkConfig` parameter value:
```kotlin theme={"system"}
FlowxSdkApi.getInstance().init(
...
config = SdkConfig(
baseUrl = "URL to FlowX backend",
imageBaseUrl = "URL to FlowX CMS Media Library",
enginePath = "some_path",
language = "en",
validators = mapOf("exact_25_in_length" to { it.length == 25 }),
),
...
)
```
### Authentication changes
The authentication mechanism has changed, so instead of passing the `String` value for the access token, a `FlowxSdkApi.Companion.AccessTokenProvider` must be used instead.
This provider is defined as a functional interface returning the actual value of the access token:
```kotlin theme={"system"}
fun interface AccessTokenProvider {
fun get(): String
}
```
Related changes:
1. The provider can be passed if the business logic allows it when calling the `FlowxSdkApi.getInstance().init(...)`.
As a consequence, the new signature for the `FlowxSdkApi.getInstance().init(...)` is:
```kotlin theme={"system"}
fun init(
context: Context,
config: SdkConfig,
accessTokenProvider: AccessTokenProvider? = null,
customComponentsProvider: CustomComponentsProvider? = null,
)
```
2. The `FlowxSdkApi.getInstance().startProcess(...)` `accessToken` parameter was dropped. It is not needed anymore, as the authentication will rely solely on the `AccessTokenProvider`.
The new signature of this method is:
```kotlin theme={"system"}
fun startProcess(
processName: String,
params: JSONObject = JSONObject(),
isModal: Boolean = false,
closeModalFunc: ((processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
3. The `FlowxSdkApi.getInstance().continueProcess(...)` `accessToken` parameter was dropped. It is not needed anymore, as the authentication will rely solely on the `AccessTokenProvider`.
The new signature of this method is:
```kotlin theme={"system"}
fun continueProcess(
processUuid: String,
isModal: Boolean = false,
closeModalFunc: ((processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
4. The calls of the `FlowxSdkApi.getInstance().updateAccessToken("some_access_token")` method must be replaced by calls of the `FlowxSdkApi.getInstance().setAccessTokenProvider(accessTokenProvider = { "some_access_token" })`.
Whenever the access token changes based on your own authentication logic, it must be updated in the renderer by calling the `setAccessTokenProvider` method again.
Learn more
### Theming changes
The theming mechanism was replaced by a new approach, which enforces loading a theme before starting or resuming a process.
Related changes:
1. The `ai.flowx.android.sdk.process.model.SdkConfig` theming related parameters (i.e. `themeTokensJsonFileAssetsPath` and `themeComponentsJsonFileAssetsPath`) were dropped.
Because of that, when configuring the library through the `FlowxSdkApi.getInstance().init(...)` method, the `config` parameter will look like this:
```kotlin theme={"system"}
FlowxSdkApi.getInstance().init(
...
config = SdkConfig(
baseUrl = "URL to FlowX backend",
imageBaseUrl = "URL to FlowX CMS Media Library",
enginePath = "some_path",
language = "en",
validators = mapOf("exact_25_in_length" to { it.length == 25 }),
),
...
)
```
2. For styling the UI components displayed when rendering a process while authenticated, the `FlowxSdkApi.getInstance().setupTheme(...)` method must be called before starting or resuming any process:
```kotlin theme={"system"}
suspend fun setupTheme(
themeUuid: String,
fallbackThemeJsonFileAssetsPath: String? = null,
@MainThread onCompletion: () -> Unit
)
```
This will fetch a priorly defined theme in the FlowX Designer, cache it and then load its properties.
A process should be started or resumed only after the `onCompletion` closure is called, signaling the completion of setting up the theme.
Learn more
### Custom components changes
1. All `import ai.flowx.android.sdk.component.*` directives must be changed to `import ai.flowx.android.sdk.ui.components.*`
2. The type of the `data` parameter passed to a custom component through the `populateUi(data: JSONObject)` method, both for `@Composable` and for classical `View` system approaches, changed to `Any?`.
Therefore, the new signature of the method is `populateUi(data: Any?)`.
As a consequence, type checking, casting and extracting the needed data must be part of the implementation details of the custom component.
The value for the `data` parameter received in the `populateUi(data: Any?)` could be:
* `Boolean`
* `String`
* `java.lang.Number`
* `org.json.JSONObject`
* `org.json.JSONArray`
Learn more
# UI components - change log
Source: https://docs.flowx.ai/release-notes/v4.x/v4.0.0-april-2024/ui-components-changelog
This log outlines the changes in component styles and props from version 3.4.x to version 4.0.
## **General - for all components**
* All components now support token overrides for color, typography, and shadow settings defined in the theme.
* Styling options are now available for different platforms: web, iOS, and Android.

* Hide expressions can be set platform-specific.
* All icon color settings offer a 'No Color' option to retain the original SVG colors.

### **TAB BAR**
* New navigation area component. The Tab Bar is a component in user interfaces, facilitating navigation and content organization allowing configuration for parallel zones (using multiple user tasks within the same tab) and for multiple tabs (users can access multiple tabs within the tab bar)

Learn more
### **TAB**
* New navigation area component. Tabs are clickable navigation elements within the Tab Bar that allow users to switch between different sections or functionalities within an application.

Learn more
### **ZONE**
* New navigation area component for web. A container-like element grouping specific navigation areas or user tasks, used for oganizing content (ideally used for processes with headers and footers).
Learn more
### **CONTAINER**
* Introduced `position` property for setting sticky containers:

* Position ***Static***: The container remains fixed and does not scroll along with the page content.
* Position ***Sticky***: When the sticky property is enabled, the container maintains its position even during scrolling.
Learn more
* Web supports top, left, bottom, and right sticky positioning.
* iOS and Android support top and bottom sticky positioning within user tasks.
* Added `scrollable` property for iOS and Android root containers, allowing control over scroll behavior (defaults to true).
* Added `screen title` property for iOS and Android root containers, defining the navigation bar title.
### **CARD**
* Removed `card type` (raised or bordered) property. See more, [**here**](./migrating-from-v3.4.x/process-configuration#root-components).
* Added `scrollable` property for iOS and Android root containers, controlling scroll behavior (defaults to true).
* Added `screen title` property for iOS and Android root containers.

### **BUTTON**
* Replaced `primary` and `secondary` types with `fill`. See more, [**here**](./migrating-from-v3.4.x/process-configuration#buttons).
* State-specific properties can now be set for **label**, **icon**, **background** and **border** colors:
* **Web**: Default, hover, pressed and disabled states.
* **Android**: Default and disabled states.
* **iOS**: Default state.
### **TEXT**
* Added `link color` property for markdown link color.
### **FILE UPLOAD**
* State-specific properties can now be set for **label**, **icon**, **background** and **border** colors:
* **web**: Default, hover, pressed and disabled states.
* **Android**: Default and disabled states.
* **iOS**: Default state.
### **MESSAGE**
* New `link color` property for markdown link color.
### **FILE PREVIEW**
* New style properties for document icon and action icon colors.
* Introduced `auto` height type on iOS and Android when scrollable is set to false on the root container/card (when you want the file preview to fill the entire available space vertically).
* New source type: Media Library.
### **ALL FORM ELEMENTS**
* Added style properties for info label, error label, helper label and helper tooltip.
### **INPUT**
* State-specific properties can now be set for **border**, **background**, **text**, **right icon**, **left icon**, **prefix/suffix** and **placeholder** colors:
* **web**: Empty, active, filled, disabled, error and hover states.
* **Android**: Empty, active, filled, disabled and error states.
* **iOS**: Empty, active, filled, disabled and error states.

### **TEXTAREA**
* State-specific properties can now be set for **border**, **background**, **text** and **placeholder** colors:
* **web**: Empty, active, filled, disabled, error and hover states.
* **Android**: Empty, active, filled, disabled and error states.
* **iOS**: Empty, active, filled, disabled and error states.
### **SELECT**
* State-specific properties can now be set for **border**, **background**, **text**, **right icon**, **left icon** and **placeholder** colors:
* **web**: Empty, active, filled, disabled, error and hover states.
* **Android**: Empty, active, filled, disabled and error states.
* **iOS**: Empty, active, filled, disabled and error states.
### **DATEPICKER**
* State-specific properties can now be set for **border**, **background**, **text**, **right icon**, **left icon** and **placeholder** colors:
* **web**: Empty, active, filled, disabled, error and hover states.
* **Android**: Empty, active, filled, disabled and error states.
* **iOS**: Empty, active, filled, disabled and error states.
### **RADIO, CHECKBOX**
* State-specific properties can now be set for **border**, **background**, **text** and **icon** colors:
* **web**: Unselected, selected, disabled unselected, disabled selected, hover unselected and hover selected states
* **Android**: Unselected, selected, disabled unselected and disabled selected states
* **iOS**: Unselected, selected, disabled unselected and disabled selected states
### **SWITCH**
* State-specific properties can now be set for **border**, **background** and **knob** colors:
* **web**: Unselected, selected, disabled unselected and disabled selected states.
* **Android**: Unselected, selected, disabled unselected and disabled selected states.
* **iOS**: Only **background** color on selected state.
### **SEGMENTED BUTTON**
* State-specific properties can now be set for **border**, **background** and **text** colors:
* **web**: Unselected, selected, disabled unselected, disabled selected, hover unselected and hover selected states.
* **Android**: Unselected, selected, disabled unselected and disabled selected states.
* **iOS**: Only **background** and **text** color on unselected and selected states.
### **SLIDER**
* State-specific properties can now be set for **limits**, **value**, **filled**, **empty** and **knob** colors:
* **web**: Default and disabled states.
* **Android**: Default and disabled states.
* **iOS**: Default and disabled states. Disabled only with **limits** and **value**.
# FlowX.AI 4.0.0 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.0.0-april-2024/v4.0.0-april-2024
🎉 Welcome to the much-anticipated FlowX.AI 4.0 release! 🚀 Get ready to experience a whole new level of innovation and efficiency with FlowX.AI 4.0.
**Release Date:** 18th April 2024
In this exhilarating update, we've added a bunch of cool stuff. From a **new theming feature** to a complete overhaul of **navigation**, killing the **milestones nodes** (we know you hated them), brace yourself for a transformative journey through the latest features and enhancements...and also a surprise for you, awaiting at the [**bottom of the page**](#coming-soon)!
## Bonus: meme of the day
Start with a laugh, because it will be a lot to read!
Let's dive in and explore the exhilarating additions:
## **What's New?** 🆕
### Theme Management
The new **Theme Management** feature enhances our design process by establishing a unified visual language across various platforms.

This approach simplifies development by enabling the establishment of a foundational **theme**, which can then be customized to accommodate specific platform requirements.

Ultimately, this streamlines the development process, saving significant time and effort.
* **Design Tokens**: Represent the single source of truth for the theme, storing visual elements of the design system.
* **Color Palette, Shadows, Typography Tokens**: Configure these tokens based on your company's brand guidelines. They ensure reusability and consistency.

* **Platform-specific Settings**: Configure settings for each platform (web, iOS, Android) based on the global settings you've defined.
* **Styles and Utilities**: General settings applying to all components (styles) and labels, errors, and helper text settings (utilities).

**Component-level Configuration**: Customize the style of each component type.

#### Universal Styling
Introduced the option for platform-specific theming customization for components across Web, iOS, and Android.

More information about Theming:
### Navigation areas (removed Milestones nodes)


In this release, we've bid farewell to **Milestone Nodes**, ushering in a fresh and improved approach to organizing the user interface. Say hello to a sleeker and more efficient system with the introduction of [**Navigation areas**](../../4.0/docs/building-blocks/process/navigation-areas).
For process definitions originating from releases earlier than **4.0**, Milestone nodes will evolve into [**Zones**](../../4.0/docs/building-blocks/process/navigation-areas#zone) during migration, offering enhanced navigation capabilities.

### New navigation UI elements
* Tab Bar & Tabs
* Zones
* Parent Process Area

#### Navigation areas per platform
### UI Designer (enhancements)
* New enhanced UI designer, offering flexibility and control over your application's look and feel across all platforms.
* Added the possibility to customize the **navigation areas** through the **UI Designer**
#### UI Designer - universal configuration and styling
Introduced the option for platform-specific configuration and styling for components across Web, iOS, and Android.


The new navigation panel in the UI Designer allows you to manage navigation configurations efficiently across different platforms, ensuring consistency and clarity in your interface design.

### New node - Embedded subprocess
Introducing Embedded Subprocesses! Enhance your process management with the new embedd subprocess functionality and the new **Start Embedded Subprocess** node.
Seamlessly integrate self-contained subprocesses within parent processes for enhanced functionality and encapsulated operations. The Start Embedded Subprocess node enables the initiation of subprocesses within a parent process, offering a range of features and options for enhanced functionality.

### New nodes - Error Events
We are excited to introduce support for a new type of node in BPMN 2.0, specifically Error Events: Error Intermediate boundary event, which expand the capabilities of process modeling and error handling within your BPMN diagrams.

These Error Event nodes enhance the BPMN standard and offer improved control over error management.
### Nodes Redesign: Redefining Connectivity
Experience a redesigned interface for smoother interaction with **nodes** and **Process Designer**.

### Favorites Tab
Keep track of your favorite process definitions and streamline process development with the all-new **Favorites tab**, ensuring effortless collaboration among teams.
## **Changes** 🔧
For clients upgrading from an older release (v3.x), we recommend consulting our [**Migrating from v3.x**](./migrating-from-v3.4.x/) guide for comprehensive migration instructions.
Here's a summary of the changes introduced in version 4.0 after upgrading from v3.4.x for all microservices:
* **AuthToken Management**: The ui-sdk no longer relies on the authToken being stored in LOCAL\_STORAGE. Read more, [**here**](/4.0/sdks/angular-renderer#authorization).
* The **Subprocess Run** node is now called **Call activity** node.
* The **Start subprocess** action is now available only on [User Task](../building-blocks/node/user-task-node) nodes. For any other node types, you should use the [Call Activity node](../building-blocks/node/call-subprocess-tasks/call-activity-node) instead.
* Business Rules: Enhancements for structured data management and improved attribute access via `instanceMetadata` new object. Read more, [**here**](./migrating-from-v3.4.x/process-configuration#business-rules).
* **Timer event scheduler**: Significant optimizations have been implemented in the timer event scheduler, resulting in improved efficiency and responsiveness.
* **UI Designer** updates and improvements.
* UI components style and props changes - consult the [**UI components change log**](./ui-components-changelog) for more information.
* Revised cache key organization. Read more [**here**](./migrating-from-v3.4.x/migrating-from-v3.4.x#revised-cache-key-organization).
* New environment variables to prevent log flooding. Read more, [**here**](./migrating-from-v3.4.x/migrating-from-v3.4.x#logging).
* Java 17 integration: Integrated Java 17 (all backend services - base image: `eclipse-temurin - 17.0.10_7-jre-jammy`) as default buildpack.
Do not to forget to consult the [**migration guide**](./migrating-from-v3.4.x/) for more information.
### Admin - health monitoring
Improved health monitoring:
* Enabled role-based acccess control and added annotations to enable platform health by default.
* Established default annotations for platform health status.
* Adjusted liveness and readiness probes for improved reliability and responsiveness.
* Updated Prometheus scraping configuration for metric collection.
## **Bug Fixes** 🛠️
We've also squashed pesky bugs to ensure a smoother and more reliable experience across the board.
### Scheduler
* Tokens now leave the timer node promptly, no longer lingering like last-minute shoppers before closing time!
* Subprocesses can now rest easy knowing they won't trigger "Timer expression is not valid" errors when setting process expiry time in months—our code's time management just got a promotion!
### UI Designer
* Switch element label now obeys orders to move to the end—no more rebellious labels sticking to the start!
### Process Designer
* Small laptops users rejoice! Now you can scroll to see all subprocesses and audit logs without losing the last line—no more screen envy for external monitors!
* Start Subprocess Action now consistently saves selected version inputs and allows for multiple edits without page refreshes—no more need for extra clicks or browser gymnastics!
* Nodes now stay within swimlane borders when moved, preventing them from wandering off like lost sheep—no more unexpected node relocations disrupting your process layouts!
### FlowX Engine
* MVEL parser now (with the latest MVEL version update: 2.5.2) happily accepts arrays/lists after objects, eliminating JSON file frustrations and improving developer workflow—no more cryptic error messages ruining your day!
* `output.put` method is required to generate structured output data when using input to validate or filter incoming data based on certain conditions (commonly used to retrieve information needed for processing)
The direct property assignment syntax (input.property = value) is no longer supported. Instead, you must use the output.put method (output.put("property", value)) to generate structured output data.
* This represents a fundamental change in how MVEL scripts interact with data
* The input object should be treated as read-only for accessing incoming data
* The output object with its put method must be used for storing any results or modified values
* Python Business Rules now reliably execute during runtime, ensuring consistent behavior between test and live modes—no more mysterious token standstills!
### Web SDK
* You can now seamlessly execute actions in processes with radio buttons and validators, even after page reloads—eliminating the frustration of encountering unresponsive buttons.
* Also you can now successfully execute UI Actions on image components without encountering "undefined token uuid" errors—no more frustrations with unresponsive image interactions!
* Custom validators now retain their specified async execution type upon saving, ensuring consistency and reliability in process validation—no more frustrating switches back to sync execution!
* Forget playing favorites in the WEB\_SDK! Now you can save data from both form elements and UI action custom body simultaneously. Say goodbye to tough decisions—saving data just got a whole lot easier and funnier!
### FlowX Admin
* Fixed issues with Persistent Database (PDB) API and service account auto-mount.
* Disabled auto service links in containers (all SVC/PORT variables).
## Other
Our docs also received an upgrade...a new home...and a new AI search function! But we know that you like to read so do not be that lazy! 🔥
## Coming soon
Hey there, tired of drowning in "virtual paperwork"? Fear not! We've got you covered. Who said machines can't handle finances? 🤖💰
Coming soon: **FlowX AI Agents**. Want to find out more? Contact us about how we can make your journey smoother than ever before! 🚀
Get in contact
## Gremlins to Watch Out For
Keep an eye out for these quirks:
* Versioning: Merging branches without importing the latest committed version may result in a surprise merge conflict party. We're on it!
* UI Designer: When relocating UI elements between parents, the elements' order doesn't always get the memo, causing a mix-up in the family tree. We're untangling this knot!
## Resources
For deployment guidelines and a seamless transition to version 4.0:
# Deployment guidelines v4.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.0-may-2024/deployment-guidelines-v4.1.0
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
After upgrading to the 4.1 FlowX.AI release, you can import old process definitions into the new platform only if they are from version 4.0.
It is not possible to import old process definitions from versions earlier than v4.0.

As of **FlowX.AI** release v4.1.0, the `paperflow-web-components` is deprecated, removing the dependencies. Instead, the new components can be found in `@flowx/ui-toolkit`.
## Component versions
| Component | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------------------- | ---------- | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **6.0.3** | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **5.0.9** | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **4.17.1** | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | **4.17.1** | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | **4.17.1** | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | **4.17.1** | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **paperflow-web-components** | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **cms-core** | **3.0.1** | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **3.0.0** | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **3.0.0** | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **4.0.1** | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **4.0.0** | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | **3.0.0** | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | **5.0.2** | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **2.0.3** | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **4.0.3** | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | **0.1.6** | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | **2.0.0** | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **iOS renderer** | **3.0.7** | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **3.0.4** | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.1 | Keycloak | 22.x |
| 4.1 | Kafka | 3.2.x |
| 4.1 | PostgreSQL | 16.2.x |
| 4.1 | MongoDB | 7.0.x |
| 4.1 | Redis | 7.2.x |
| 4.1 | Elasticsearch | 7.17.x |
| 4.1 | Oracle Database | 19.8.0.0.0 |
| 4.1 | Angular (Web SDK) | 16.3.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
A FlowX release and its patch versions (such as 4.1.x) will *all* have the same the *Recommended Versions* for the third-party components.
# Migrating from previous versions to v4.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.0-may-2024/migrating-from-v3.4.x-to-v4.1
If you are upgrading from a v3.4.x version, first check the following **migration guide** (to capture all the changes introduced in v4.0):
If you are upgrading from v4.0 version, check the following migration guide:
## Migrating from v4.0 to v4.1
### Revised cache key organization
To ensure a smooth transition to the 4.1 release, it's essential to utilize the following clear cache endpoint and body:
##### Endpoint
`POST {{baseUrlAdmin}}/api/internal/cache/clear`
##### Body:
```json theme={"system"}
{
"cacheNames": [
"flowx:core:cache"
]
}
```
### Misconfigurations
To enable and to compute warnings for already existing processes from previous versions, use the following endpoint to retrieve and compute all warnings:
Please note that it may take some time for all misconfigurations in older processes to become available on the platform after calling this endpoint.
#### FlowX.AI Admin
```json theme={"system"}
{{baseUrlAdmin}}/api/process-versions/compute
```
For more details:
### Spring Boot upgrade
The following configuration changes are required after upgrading your Spring Boot application to version 3.2.x. Below is a detailed explanation of each section in the context of this upgrade:
Note that this setup is backwards compatible, it does not affect the configuration from v3.4.x. The configuration files will still work until v4.5 release.
The old environment variables (v3.4.x) will be removed in the v.4.5 FlowX.AI release.
Configuration properties updates:
#### Redis configuration
Where Redis is used (FlowX CMS, FlowX Admin, Documents plugin, events, Notifications plugin, FlowX Engine, Task Management plugin):
##### Old configuration
* `SPRING_DATA_HOST`
* `SPRING_DATA_PORT`
* `SPRING_DATA_PASSWORD`
##### New configuration
* `SPRING_DATA_REDIS_HOST`
* `SPRING_DATA_REDIS_PORT`
* `SPRING_DATA_REDIS_PASSWORD`
#### Management configuration
For all services managing metrics, especially exporting metrics to Prometheus:
##### Old configuration
* `MANAGEMENT_METRICS_EXPORT_PROMETHEUS_ENABLED`
##### New configuration
* `MANAGEMENT_PROMETHEUS_METRICS_EXPORT_ENABLED`: This variable enables or disables Prometheus metrics export dynamically based on the environment.
More details, [here](../../4.0/setup-guides/flowx-engine-setup-guide/engine-setup#configuring-application-management)
#### Authentication
For all services except the advancing-controller.
##### New configuration
Currently not required to be set as they take values from old configs.
* `SPRING_SECURITY_OAUTH2_RESOURCE_SERVER_OPAQUE_TOKEN_INTROSPECTION_URI`
* `SPRING_SECURITY_OAUTH2_RESOURCE_SERVER_OPAQUE_TOKEN_CLIENT_ID`
* `SPRING_SECURITY_OAUTH2_RESOURCE_SERVER_OPAQUE_TOKEN_CLIENT_SECRET`
##### Existing configuration
* `SECURITY_OAUTH2_BASE_SERVER_URL`
* `SECURITY_OAUTH2_REALM`
* `SECURITY_OAUTH2_CLIENT_CLIENT_ID`
* `SECURITY_OUATH2_CLIENT_CLIENT_SECRET`
#### Elasticsearch configuration
This outlines the Elasticsearch configuration for the following microservices: FlowX Admin, FlowX Engine, Data Search, and Audit Core.
##### Existing configuration
* `SPRING_ELASTICSEARCH_REST_URIS`: This environment variable is used by the microservices listed above. This variable needs to be set to the appropriate value for each environment.
Example:
```yaml theme={"system"}
# only the value changes for the next config:
spring:
elasticsearch:
rest:
uris: localhost:9200 #no more protocol/schema anymore
```
If you do not upgrade to the new configuration, make sure that in the actual configuration you will remove the protocol/schema, it is no longer needed: for example, instead of `http://localhost:9200` you will have `localhost:9200` as value.
##### New configuration
* `SPRING_ELASTICSEARCH_REST_PROTOCOL`: Default value is `https`; should be overridden if connection to Elasticsearch needs to be done over `http`.
Example:
```yaml theme={"system"}
# New configuration with default value:
spring:
elasticsearch:
rest:
protocol: https / http # default value is https - should be overriden if connection to elastic needs to be done on http.
```
#### License core configuration
For the License core microservice you need to configure two different data sources: one for the engine database and one for the license database.
##### Old Engine database source
* `ENGINE_DATASOURCE_URL`
* `ENGINE_DATASOURCE_JDBC_URL`
* `ENGINE_DATASOURCE_USERNAME`
* `ENGINE_DATASOURCE_PASSWORD`
##### New Engine database source
* `SPRING_DATASOURCE_ENGINE_URL: ${spring.datasource.jdbc-url}`: Pointing to old config for backwards compatibility.
* `SPRING_DATASOURCE_ENGINE_JDBC_URL: ${spring.datasource.jdbc-url}`: Pointing to old config for backwards compatibility
* `SPRING_DATASOURCE_ENGINE_USERNAME: ${spring.datasource.username}`: Pointing to old config for backwards compatibility
* `SPRING_DATASOURCE_ENGINE_PASSWORD: ${spring.datasource.password}`: Pointing to old config for backwards compatibility
##### Old License database source
* `SPRING_DATASOURCE_URL`
* `SPRING_DATASOURCE_JDBC_URL`
* `SPRING_DATASOURCE_USERNAME`
* `SPRING_DATASOURCE_PASSWORD`
##### New License database source
* `SPRING_DATASOURCE_LICENSE_URL: ${spring.datasource.jdbc-url}`: Pointing to old config for backwards compatibility.
* `SPRING_DATASOURCE_LICENSE_JDBC_URL: ${spring.datasource.jdbc-url}`: Pointing to old config for backwards compatibility.
* `SPRING_DATASOURCE_LICENSE_USERNAME: ${engine.datasource.username:postgres}`: Pointing to old config for backwards compatibility.
* `SPRING_DATASOURCE_LICENSE_PASSWORD: ${engine.datasource.password:wrongpwd}`: Pointing to old config for backwards compatibility.
#### Customer management plugin
##### New configuration
* `ELASTICSEARCH_PROTOCOL`: Possible values are `https` / `http`; default value is `https` - should be overridden if connection to Elasticsearch needs to be done over `http`.
### Open Telemetry
The FlowX.AI platform uses a mix of both auto instrumentation with Java agent and manual instrumentation using the Open Telemetry API.
Enabling Open Telemetry is optional.
For more information about how to leverage Open Telemetry with FlowX, check the following section:
**Additional configuration needed**! For more information about Open Telemetry deployment/configuration, check the following section:
For more information about microservices Open Telemetry default properties, check the following section:
# Components change log v4.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.0-may-2024/ui-components-changelog
This log outlines the changes in component styles and props from v4.0 to v4.1.
## Navigation areas
### Stepper
* Implemented fixed height settings on the Web (for sticky sections use case).
### Tab bar
* Added Sizing options: Tabs Gap & Component Gap properties.

### Page
* Added fixed height settings on the Web (for sticky sections use case)

### Modal
* Added fixed height settings on the Web (for sticky sections use case).

### Zone
* Incorporated fixed height settings on the Web (for sticky sections use case).

## UI components
### Container
* Integrated fixed height settings on the Web for better management of sticky sections.

### Card
* Enabled fixed height settings on the Web for sticky sections.

### Form
* Implemented fixed height settings on the Web for improved usability.

### File preview
* Introducing a new source type: Media Library. Check the following section for more details:

### Collection
* Added fixed height settings on the Web for smoother handling.

Note that for all components, the overflow property is set to scroll when the height is fixed.
The "overflow" property in CSS controls how content that exceeds the dimensions of a container is handled. It's particularly useful when the content inside a container is larger than the container itself.

# FlowX.AI 4.1.0 Release Notes (LTS)
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.0-may-2024/v4.1.0-may-2024
🎉 Welcome to the FlowX.AI 4.1.0 release!
**Release Date:** 30th May 2024
This release is a **Long-Term Support (LTS)** version, ensuring extended support and stability.
In this release, we've added some cool new features and enhancements to our already mind-blowing v4.0! Let's dive in and explore:
## **What's New?** 🆕
### Misconfigurations
The Misconfigurations Warnings feature introduces a proactive alert system that ensures alignment between process configurations and selected platforms.
With dynamic platform-specific settings, users receive alerts that guide them toward optimal configurations for navigation and UI design. These alerts, integrated into the frontend interface, empower users to make informed decisions, thereby enhancing the process configuration.

An additional step is required to compute and enable misconfigurations in existing processes from older releases:
#### Generate for available platforms only
You can control which platforms you want to make available configurations for navigation areas, UI Designer or to enable/disable misconfigurations. Options include: web only, mobile, and omnichannel.

### Navigation areas - navigation inside zones and pages
We're enhancing navigation within zones and pages to enable a step-by-step or wizard-style experience.
In the Navigation Panel, a new option will be available exclusively for the web platform. Users can choose between "Single Page Form," which displays all tasks in the same zone (in parallel), and "Wizard," presenting tasks one at a time with custom navigation buttons.

Check the following section for more information:
### Static document management via CMS
Decoupled static document management from the Document Plugin, enabling independent management of documents such as terms and conditions, rules and regulations, and brochures.

The changes involve enhancing the platform's capabilities for managing static documents, particularly **PDFs**, within the **Media Library**. This includes enabling the upload of PDF files, updating information text to reflect PDF format specifications.

PDF documents uploaded to the Media Library must adhere to a maximum file size limit of 10 MB. If you need to increase this limit for larger files, please refer to the following [**configuration options**](../../4.1.x/setup-guides/cms-setup#configuring-the-maximum-size-of-the-files).
Please note that raising the file size limit may increase vulnerability to potential attacks. Consider carefully before making this change.
With the introduction of the Media Library's static document management feature, the previous method of utilizing paths within the **Process Data** for **File Preview** component to display static documents will be phased out.
You can still use it if you have scenarios in which you need to [**generate templates from HTML**](../../4.1.x/docs/platform-deep-dive/plugins/custom-plugins/documents-plugin/generating-from-html-templates) and then display them in a file preview.
### Dismiss navigation on secondary token end
When a navigation sequence is initiated by a secondary token triggered by a boundary event, it will automatically be dismissed when the token reaches the stop process event. This feature ensures that informative modals are closed without requiring extra configurations.

### Theme Management
We've introduced preview options for more UI components. Now, you can review changes in the theming configurations before finalizing them.

### UI Designer
We've added new properties, settings and styles across different UI components for an enhanced experience. Check the UI components - change log for the full list of improvements:
### Tracing - open telemetry
In our 4.1 release, we're thrilled to introduce tracing with Open Telemetry with additional FlowX custom span attributes, offering enhanced visibility and insights into application behavior. With its capabilities, users can pinpoint issues and optimize performance.
Consequently, we are phasing out Jaeger tracing to focus on the advanced features and broader support of Open Telemetry, ensuring a smooth transition.
For traces visualization, use tools like Grafana to filter and search spans based on custom attributes like `fx.processInstanceUuid`, `fx.nodeName`, `fx.actionName`, and others. This helps in pinpointing specific operations or issues within a trace.
Check the following section for more information and for more scenarios:
**Additional configuration needed**! If you want to enable/configure Open Telemetry, check the following section:
For more information about the default Open Telemetry properties of FlowX.AI microservices, please refer to the following section:
### Spring Boot upgrade (for BE Java services)
In the 4.1 release, we upgraded Spring Boot from version 2.5.4 to 3.2.x for all Java libraries and services. This update delivers significant performance enhancements and includes important bug fixes, thereby offering enhanced stability and functionality.
## **Changes** 🔧
* **Process Designer**: The "Start Subprocess" functionality on Service Task nodes has been discontinued.
* **UI Designer**: Introduced `data test id` within the `Settings > Generic` tab across all UI components, facilitating seamless identification and interaction with UI elements during automated testing.
## **Bug Fixes** 🛠️
We've also squashed pesky bugs to ensure a smoother and more reliable experience across the board.
* **Process Designer**: The error hiccups with embedded subprocesses and their error events have been smoothed out! No more getting stuck in a loop; now, you'll gracefully proceed to the embedded subprocess as expected.
* **Process Designer**: The versioning hiccup causing merge conflicts when trying to merge a branch with a main branch that wasn't imported into the environment has been fixed!
* **UI Designer**: The slider UI element's identity crisis has been resolved. No longer will it confuse its maximum value with its minimum counterpart.
* **UI Designer**: Concatenation glitch in text elements, where values from the collection prototype play hide and seek, has been patched up! No more disappearing acts - they'll be displayed side by side as intended.
* **UI Designer**: The glitch preventing the assignment of actions in button UI Actions with blank spaces in their names has been smoothed out!
## Gremlins to Watch Out For
Keep an eye out for these quirks:
* **UI Designer**: When relocating UI elements between parents, the elements' order doesn't always get the memo, causing a mix-up in the family tree. We're untangling this knot!
## Resources
For deployment guidelines and a seamless transition to version 4.1:
# Deployment guidelines v4.1.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.1-june-2024/deployment-guidelines-v4.1.1
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
After upgrading to the 4.1.1 FlowX.AI release, you can import old process definitions into the new platform only if they are from versions 4.0/4.1.0.
It is not possible to import old process definitions from versions earlier than v4.0.

As of **FlowX.AI** release v4.1.0, the `paperflow-web-components` is deprecated, removing the dependencies. Instead, the new components can be found in `@flowx/ui-toolkit`.
## Component versions
| Component | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------------------- | --------- | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **6.1.2** | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **5.1.3** | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **paperflow-web-components** | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **cms-core** | **3.0.2** | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **3.0.1** | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **3.0.2** | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **4.0.3** | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **4.0.2** | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | **3.0.2** | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | **5.0.4** | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **2.0.4** | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **4.0.4** | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | **2.0.2** | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **iOS renderer** | 3.0.16 | 3.0.7 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 3.0.21 | 3.0.4 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.1.1 | Keycloak | 22.x |
| 4.1.1 | Kafka | 3.2.x |
| 4.1.1 | PostgreSQL | 16.2.x |
| 4.1.1 | MongoDB | 7.0.x |
| 4.1.1 | Redis | 7.2.x |
| 4.1.1 | Elasticsearch | 7.17.x |
| 4.1.1 | Oracle Database | 19.8.0.0.0 |
| 4.1.1 | Angular (Web SDK) | 16.3.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
A FlowX release and its patch versions (such as 4.1.x) will *all* have the same the *Recommended Versions* for the third-party components.
### Process instance data archiving
#### FlowX.AI configuration
New settings (new environment variables) have been added for process instance data partitioning and archiving. Check the following documentation sections for more details:
# Migrating from previous versions to v4.1.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.1-june-2024/migrating-from-previous-to-v4.1.1
If you are upgrading from a v3.4.x version, first check the following **migration guide** (to capture all the changes introduced in v4.0):
If you are upgrading from v4.0 to v4.1.1, do not forget to check the migration guides for the previous versions:
If you are upgrading from v4.1 to v4.1.1, check the following migration guide:
## Migrating from v4.1 to v4.1.1
Before upgrading to v4.1.1, we recommend executing the initial data partitioning DB migrations manually. We recommend this no matter if you enable partitioning or not, as these DB migrations could take a lot of time.
After executing manually the SQL commands from Liquibase, all existing process instance related information will go into the initial partition.
If partitioning is enabled, the initial partition will continue to be used until a new partition is generated according to the partitioning interval (DAY, WEEK, MONTH). Future partitions will be created automatically.
If partitioning is not enabled, all data will continue to be stored in this initial partition.
[Partitioning docs](../../4.1.x/setup-guides/flowx-engine-setup-guide/process-instance-data-archiving)
# FlowX.AI 4.1.1 Release Notes (LTS)
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.1-june-2024/v4.1.1-june-2024
**Release Date:** 17th June 2024
This is a patch version part of the the long-term support for version 4.1.
Welcome to FlowX.AI 4.1.1 release. Let's dive in and explore:
## **What's New?** 🆕
### FlowX.AI Engine: Process Instance Data Archiving
Database Compatibility: Oracle and Postgres.
We are introducing a new system for archiving data related to old process instances. This enables the implementation of data retention policies, with more predictable storage usage and costs.
Some operations involving process instance data can be snappier, given the lower amount of data in the system and new structure. Archiving relies on partitioning data based on the process instance start time. Each partition is associated with a time period (day, week, month), and retention is defined by the number of periods maintained in the system.
Archived data remains in new tables in the database, optionally compressed, and is no longer accessible in FlowX. These tables can be compressed, copied, moved, archived, or deleted without affecting other processes in FlowX.
For more details about process instance partitioning and archiving, including configuration of the feature, see:
## **Changes** 🔧
### Task Manager: base URL configuration
We have enhanced the Task Manager plugin by adding the ability to update the baseUrl for tasks. If the `task.baseUrl` is specified in the process parameters, it will now be sent to the Task Manager to update the tasks accordingly.
Example of a Business Rule:
```java theme={"system"}
output.put("task", {"baseUrl": "https://your_base_url"});
```
This update streamlines the configuration process, ensuring that task URLs are dynamically updated and properly managed within the Task Manager.
## Gremlins to Watch Out For
Keep an eye out for these quirks:
* **UI Designer**: When relocating UI elements between parents, the elements' order doesn't always get the memo, causing a mix-up in the family tree. We're untangling this knot!
## Resources
For deployment guidelines and a seamless transition to version 4.1.1:
# Deployment guidelines v4.1.2
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.2-june-2024/deployment-guidelines-v4.1.2
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
After upgrading to the 4.1.2 FlowX.AI release, you can import old process definitions into the new platform only if they are from versions 4.1.0 & 4.1.1.
It is not possible to import old process definitions from versions earlier than v4.1.0.

As of **FlowX.AI** release v4.1.0, the `paperflow-web-components` is deprecated, removing the dependencies. Instead, the new components can be found in `@flowx/ui-toolkit`.
## Component versions
| Component | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------------------- | ------------ | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **6.1.3** | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **5.1.4** | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **4.17.1-2** | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | **4.17.1-2** | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | **4.17.1-2** | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | **4.17.1-2** | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **paperflow-web-components** | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **cms-core** | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **iOS renderer** | 3.0.16 | 3.0.16 | 3.0.7 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 3.0.21 | 3.0.21 | 3.0.4 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.1.2 | Keycloak | 22.x |
| 4.1.2 | Kafka | 3.2.x |
| 4.1.2 | PostgreSQL | 16.2.x |
| 4.1.2 | MongoDB | 7.0.x |
| 4.1.2 | Redis | 7.2.x |
| 4.1.2 | Elasticsearch | 7.17.x |
| 4.1.2 | Oracle Database | 19.8.0.0.0 |
| 4.1.2 | Angular (Web SDK) | 16.3.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
A FlowX.AI release and its patch versions (such as 4.1.x) will *all* have the same the *Recommended Versions* for the third-party components.
# Migrating from previous versions to v4.1.2
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.2-june-2024/migrating-from-previous-to-v4.1.2
If you're upgrading from a v3.4.x version, make sure to first review the migration guide for v4.0 to capture all the significant changes:
If you are upgrading from v4.0 to v4.1.2, do not forget to check the migration guides for the previous versions:
# FlowX.AI 4.1.2 Release Notes (LTS)
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.2-june-2024/v4.1.2-june-2024
**Release Date:** 8th June 2024
This is a patch version part of the the long-term support for version 4.1.
Welcome to FLowX.AI 4.1.2 release. Let’s dive in and explore:
## Enhancements ✨
### Web Renderer
* Improved PDF viewer locale setting based on renderer language configuration. Now, the PDF viewer menu will display localized content according to the chosen language setting, enhancing user experience.
## Bug fixes 🛠️
### FlowX.AI Engine
* **Fixed the Server-Sent Events (SSE) message issue** where they were playing hide-and-seek in the console. The problem stemmed from swimlanes lacking proper permissions and an overly strict event filter. After granting correct permissions and adjusting the filter, SSE messages are now reliably displayed.
* **Export Process/Copy & Paste**: Addressed an issue where soft-deleted UI actions were erroneously included in `GET /data` responses. Now, during export or copy-paste operations, only active UI actions are included, ensuring deleted actions remain hidden as intended.
## Gremlins to watch out for
Keep an eye out for these quirks:
* **UI Designer**: When relocating UI elements between parents, the elements' order doesn't always get the memo, causing a mix-up in the family tree. We're untangling this knot!
## Resources
For deployment guidelines and a seamless transition to version 4.1.2:
# Deployment guidelines v4.1.3
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.3-august-2024/deployment-guidelines-v4.1.3
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
After upgrading to the 4.1.3 FlowX.AI release, you can import old process definitions into the new platform only from version 4.1.2.
It is not possible to import old process definitions from versions earlier than v4.1.2.

As of **FlowX.AI** release v4.1.0, the `paperflow-web-components` is deprecated, removing the dependencies. Instead, the new components can be found in `@flowx/ui-toolkit`.
## Component versions
| Component | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------------------- | ------------ | -------- | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **6.1.4** | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **5.1.5** | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **4.17.1-3** | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | **4.17.1-3** | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | **4.17.1-3** | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | **4.17.1-3** | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **paperflow-web-components** | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **cms-core** | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **iOS renderer** | 3.0.16 | 3.0.16 | 3.0.16 | 3.0.7 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 3.0.21 | 3.0.21 | 3.0.21 | 3.0.4 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.1.3 | Keycloak | 22.x |
| 4.1.3 | Kafka | 3.2.x |
| 4.1.3 | PostgreSQL | 16.2.x |
| 4.1.3 | MongoDB | 7.0.x |
| 4.1.3 | Redis | 7.2.x |
| 4.1.3 | Elasticsearch | 7.17.x |
| 4.1.3 | Oracle Database | 19.8.0.0.0 |
| 4.1.3 | Angular (Web SDK) | 16.3.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
A FlowX.AI release and its patch versions (such as 4.1.x) will *all* have the same the *Recommended Versions* for the third-party components.
# Migrating from previous versions to v4.1.3
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.3-august-2024/migrating-from-previous-to-v4.1.3
If you're upgrading from a v3.4.x version, make sure to first review the migration guide for v4.0 to capture all the significant changes:
If you're moving from v4.0 to v4.1.3, don’t forget to check the relevant migration guides for each version to ensure nothing is missed:
If you’re upgrading from v4.1.1 or v4.1.2 to v4.1.3, simply review the release notes and deployment guidelines for any notable changes:
# FlowX.AI 4.1.3 Release Notes (LTS)
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.3-august-2024/v4.1.3-august-2024
**Release Date:** 12th August 2024
This is a patch version part of the the long-term support for version 4.1.
Welcome to FLowX.AI 4.1.3 release. Let’s dive in and explore:
## Bug fixes 🛠️
### Process Designer
* **Copy/Paste Nodes**: Got a little too click-happy with those keyboard shortcuts in the Process Designer? You might have noticed multiple requests flooding in when you just wanted one. We’ve had a chat with the system, and it’s agreed to calm down. Now, one copy-paste equals one request. As it should be. ✂️📋
* **Stuck Nodes and Stubborn Swimlanes**: Tried to move a node or resize a swimlane after pasting and found everything frozen? The Process Designer had a little too much coffee. We’ve calmed it down, so now you can move and resize as you please. No more stuck nodes or swimlane stand-offs!
### FlowX.AI Engine
* **Business Rule Precision**: Occasionally, you might have encountered inconsistent outcomes when running the same business rule twice. This was due to a rare concurrency issue during rule compilation. We've addressed this by ensuring that, if an issue arises, the rule is recompiled rather than executing with an error. Now, your business rules run smoothly and consistently, just like you'd expect. 🎰🎯
## Gremlins to watch out for 👀
Keep an eye out for these quirks:
* **UI Designer**: When relocating UI elements between parents, the elements' order doesn't always get the memo, causing a mix-up in the family tree. We're untangling this knot!
## Resources 📚
Need more details for a seamless upgrade to v4.1.3? We've got you covered:
# Deployment guidelines v4.1.4
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.4-september-2024/deployment-guidelines-v4.1.4
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
After upgrading to the 4.1.4 FlowX.AI release, you can import old process definitions into the new platform only from versions 4.1.2 & 4.1.3.
It is not possible to import old process definitions from versions earlier than v4.1.2.

As of **FlowX.AI** release v4.1.0, the `paperflow-web-components` is deprecated, removing the dependencies. Instead, the new components can be found in `@flowx/ui-toolkit`.
## Component versions
| Component | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------------------- | ------------ | -------- | -------- | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **6.1.6** | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **5.1.6** | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **4.17.1-5** | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | **4.17.1-5** | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | **4.17.1-5** | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | **4.17.1-5** | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **paperflow-web-components** | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **cms-core** | **3.0.3** | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **3.0.2** | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **3.0.3** | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **4.0.4** | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **4.0.3** | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | **5.0.5** | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **2.0.5** | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **4.0.5** | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | **2.0.3** | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **iOS renderer** | 3.0.16 | 3.0.16 | 3.0.16 | 3.0.16 | 3.0.7 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 3.0.21 | 3.0.21 | 3.0.21 | 3.0.21 | 3.0.4 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.1.4 | Keycloak | 22.x |
| 4.1.4 | Kafka | 3.2.x |
| 4.1.4 | PostgreSQL | 16.2.x |
| 4.1.4 | MongoDB | 7.0.x |
| 4.1.4 | Redis | 7.2.x |
| 4.1.4 | Elasticsearch | 7.17.x |
| 4.1.4 | Oracle Database | 19.8.0.0.0 |
| 4.1.4 | Angular (Web SDK) | 16.3.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
A FlowX.AI release and its patch versions (such as 4.1.x) will *all* have the same the *Recommended Versions* for the third-party components.
# Migrating from previous versions to v4.1.4
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.4-september-2024/migrating-from-previous-to-v4.1.4
If you're upgrading from a v3.4.x version, make sure to first review the migration guide for v4.0 to capture all the significant changes:
If you're moving from v4.0 to v4.1.3, don’t forget to check the relevant migration guides for each version to ensure nothing is missed:
If you’re upgrading from v4.1.1, v4.1.2 or v4.1.3 to v.4.1.4, simply review the release notes and deployment guidelines for any notable changes:
# FlowX.AI 4.1.4 Release Notes (LTS)
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.4-september-2024/v4.1.4-september-2024
**Release Date:** 6th September 2024
This release is part of the long-term support (LTS) for version 4.1. While it’s a minor patch, we’ve focused on enhancing your security and overall experience with important fixes and updates.
## Fixes 🛠️
We kicked out a few troublemaking vulnerabilities to keep things running smoothly and securely for you! 🤺
## What's new? 🚀
Added support for [**EntraID**](https://www.microsoft.com/en-us/security/business/identity-access/microsoft-entra-id), improving integration options and expanding authentication capabilities.
## Resources 📚
Need help upgrading to version 4.1.4? We've got everything you need for a smooth transition:
# Deployment guidelines v4.1.5
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.5-september-2024/deployment-guidelines-v4.1.5
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
After upgrading to the 4.1.5 FlowX.AI release, you can import old process definitions into the new platform only from versions 4.1.2, 4.1.3 & 4.1.4.
It is not possible to import old process definitions from versions earlier than v4.1.2.

As of **FlowX.AI** release v4.1.0, the `paperflow-web-components` is deprecated, removing the dependencies. Instead, the new components can be found in `@flowx/ui-toolkit`.
## Component versions
| Component | 4.1.5 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------------------- | ------------ | -------- | -------- | -------- | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **6.1.7** | 6.1.6 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **5.1.7** | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **4.17.1-6** | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | **4.17.1-6** | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | **4.17.1-6** | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | **4.17.1-6** | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **paperflow-web-components** | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **flowx-process-renderer** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **cms-core** | 3.0.3 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | 3.0.2 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | 3.0.3 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | 4.0.4 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | 4.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | 5.0.5 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | 2.0.5 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | 4.0.5 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | 2.0.3 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **iOS renderer** | 3.0.16 | 3.0.16 | 3.0.16 | 3.0.16 | 3.0.16 | 3.0.7 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 3.0.21 | 3.0.21 | 3.0.21 | 3.0.21 | 3.0.21 | 3.0.4 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.1.5 | Keycloak | 22.x |
| 4.1.5 | Kafka | 3.2.x |
| 4.1.5 | PostgreSQL | 16.2.x |
| 4.1.5 | MongoDB | 7.0.x |
| 4.1.5 | Redis | 7.2.x |
| 4.1.5 | Elasticsearch | 7.17.x |
| 4.1.5 | Oracle Database | 19.8.0.0.0 |
| 4.1.5 | Angular (Web SDK) | 16.3.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
A FlowX.AI release and its patch versions (such as 4.1.x) will *all* have the same the *Recommended Versions* for the third-party components.
# Migrating from previous versions to v4.1.5
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.5-september-2024/migrating-from-previous-to-v4.1.5
If you're upgrading from a v3.4.x version, make sure to first review the migration guide for v4.0 to capture all the significant changes:
If you're moving from v4.0 to v4.1.3, don’t forget to check the relevant migration guides for each version to ensure nothing is missed:
If you’re upgrading from > v4.1.0 to v4.1.5 simply review the release notes and deployment guidelines for any notable changes:
# FlowX.AI 4.1.5 Release Notes (LTS)
Source: https://docs.flowx.ai/release-notes/v4.x/v4.1.x/v4.1.5-september-2024/v4.1.5-september-2024
**Release Date:** 23rd September 2024
This release is part of the long-term support (LTS) for version 4.1. While it’s a minor patch, we’ve focused on enhancing your security and overall experience with important fixes and updates.
## Fixes 🛠️
* **UI templates - generic properties**: UI templates with generic properties (e.g., labels) were being overridden by platform-specific settings upon process start, causing unexpected changes. This override issue has been resolved—generic properties will now stay as configured.
* **Undo/redo (Windows)**: We’ve reminded the **Ctrl** key that it’s not the “Undo!” button, and it now behaves like a respectable key should. You can once again Copy, Paste, and Select All without your inputs mysteriously disappearing and reappearing.
## Resources 📚
Need help upgrading to version 4.1.5? We've got everything you need for a smooth transition:
# Deployment guidelines v4.2.0
Source: https://docs.flowx.ai/release-notes/v4.x/v4.2.x/v4.2.0-june-2024/deployment-guidelines-v4.2.0
Do not forget, when upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
It is not possible to import old process definitions from versions earlier than v4.2.0.

## Component versions
| Component | 4.2.0 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ------------------------------ | ----- | ------ | ------ | ------ | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **paperflow-web-components** | | - | - | - | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **flowx-process-renderer** | | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **cms-core** | | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **customer-management-plugin** | | 2.0.3 | 2.0.2 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.4 | 0.2.3 | 0.2.3 | 0.2.1 |
| **task-management-plugin** | | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **iOS renderer** | | 3.0.7 | 3.0.7 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | | 3.0.4 | 3.0.4 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Recommended versions for FlowX.AI 4.2.0
| FLOWX.AI Platform Version | Component name | Recommended version (tested versions) |
| ------------------------- | ----------------- | ------------------------------------- |
| 4.2.0 | Keycloak | 22.0.x |
| 4.2.0 | Kafka | 3.2.3 |
| 4.2.0 | PostgreSQL | 16.2.0 |
| 4.2.0 | MongoDB | 7.0.6 |
| 4.2.0 | Redis | 7.2.4 |
| 4.2.0 | Elasticsearch | 7.17 |
| 4.2.0 | OracleDB | 19.8.0.0.0 |
| 4.2.0 | Angular (Web SDK) | 17.0.0 |
FlowX.AI supports any version of the listed third-party components as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FlowX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
# FlowX.AI 4.2.0 Release
Source: https://docs.flowx.ai/release-notes/v4.x/v4.2.x/v4.2.0-june-2024/v4.2.0-june-2024
We are excited to announce the release FlowX.AI 4.2 🔥, featuring new and improved features that will elevate your workflow experience.
Let's dive in and explore:
## **What's New?** 🆕
### FlowX.AI UI Designer
We are thrilled to introduce the new and improved **UI Designer Navigator**, a major update designed to streamline your UI design process.
The UI layer panel has been redesigned for a more intuitive experience, making it easier to manage and navigate through your design elements.
Dragging and dropping components in the preview is now smoother and more precise, allowing for faster and easier creation of UIs.
You can now change the root component from a form group to a container or vice versa, offering greater flexibility when copying nodes or resolving configuration problems.
It is now simpler to identify where you are placing a component within the hierarchy, thanks to the enhanced drag/reorder functionality in the right panel.

### FlowX.AI Engine
#### Autocomputed data to send
In previous platform versions, when creating your UI screens and working with data, you had to ensure that all the data stored in your process keys was saved in the process instance. This required adding an extra parameter called "Data to send" to the "Save Data" node action.
| Older versions | v4.2 |
| :-------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------: |
|  |  |
| | |
Now, with the autocompute feature, this step is no longer necessary, as the data is automatically saved and sent on your process instance.
You no longer need to add "Save Data" node actions, but make sure to include "Forms to Validate" on the UI Actions. This helps ensure that data is submitted correctly and automatically activates any added validators where they exist.

However, you still have the option to customize which keys are included or excluded as needed.

### Scripting UX improvements
We're excited to announce significant improvements to our scripting UX. These enhancements focus on upgrading the code editors and introducing an advanced autocomplete feature. Configurators, both experienced and novice, will benefit from better visual feedback, support for interpolation syntax, and integrated help and examples.
The updates aim to streamline the configuration process, reduce errors, and make testing and troubleshooting more efficient.
#### Autocomplete based on data model
Introducing autocomplete for attributes, tailored to the data model attributes for enhanced configuration efficiency:
| Section | Autocomplete field(s)/editors | Type |
| ------------------------------------------------------------------ | -------------------------------------------------- | ---------------------------- |
| Node config > Action -> Start subprocess | Copy from current state Exclude from current state | Field w/out interpolation |
| Node config > Data stream topics | Key name | Field w/out interpolation |
| Node config > Action > Kafka send action | Message Header | JSON editor w/ interpolation |
| Action > Business Rule | Business rule | Code editor |
| Node config > Action > Kafka send action > From integration | All integration fields | Input w/ interpolation |
| Throw message node > Node config | Correlation Key | Field |
| Throw message node > Node config | Send data | Editor - JSON |
| Start message node > Node config | Process key | Field w/out interpolation |
| Exclusive gateway > Gateway decision | Expression | Code editor |
| UI designer > Form & form elements | Disable expression | JS editor |
| UI designer > Input, text area (?), slider (min & max), text, link | Computed values | JS editor |
| UI designer > UI components | Hide expression | JS editor |
| Catch message node (boundary) > Node config | Process Key Correlation key | Field w/out interpolation |
#### New test business rule editor

#### New hide/disabled expressions editor

## **Changes** 🔧
* **WEB SDK**: Angular update (v17).
## Additional information
For deployment guidelines, refer to:
# Deployment guidelines v4.2.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.2.x/v4.2.1-july-2024/deployment-guidelines-v4.2.1
Do not forget, when upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
It is not possible to import old process definitions from versions earlier than v4.2.0.

## Component versions
| Component | 4.2.0 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ------------------------------ | ----- | ------ | ------ | ------ | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **paperflow-web-components** | | - | - | - | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **flowx-process-renderer** | | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **cms-core** | | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **customer-management-plugin** | | 2.0.3 | 2.0.2 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.4 | 0.2.3 | 0.2.3 | 0.2.1 |
| **task-management-plugin** | | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **iOS renderer** | | 3.0.7 | 3.0.7 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | | 3.0.4 | 3.0.4 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
### Recommended versions for FlowX.AI 4.2.0
| FLOWX.AI Platform Version | Component name | Recommended version (tested versions) |
| ------------------------- | ----------------- | ------------------------------------- |
| 4.2.1 | Keycloak | 22.0.x |
| 4.2.1 | Kafka | 3.2.3 |
| 4.2.1 | PostgreSQL | 16.2.0 |
| 4.2.1 | MongoDB | 7.0.6 |
| 4.2.1 | Redis | 7.2.4 |
| 4.2.1 | Elasticsearch | 7.17 |
| 4.2.1 | OracleDB | 19.8.0.0.0 |
| 4.2.1 | Angular (Web SDK) | 17.0.0 |
FlowX.AI supports any version of the listed third-party components as prerequisites.
For optimal performance and reliability, our internal QA process validates new releases using specific versions as indicated in the provided table.
While exploring alternative versions that suit your company's specific requirements, we recommend referring to the compatibility matrix for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
Compatibility Matrix:
* FlowX.AI Platform: Recommended and tested versions
* Third-Party Components: Supported versions based on specific requirements and client preferences
# FlowX.AI 4.2.1 Release
Source: https://docs.flowx.ai/release-notes/v4.x/v4.2.x/v4.2.1-july-2024/v4.2.1-july-2024
We are excited to announce the release FlowX.AI 4.2.1 🔥, featuring new and improved features that will elevate your workflow experience.
Let's dive in and explore:
## **What's New?** 🆕
### Web Renderer
Changes were made to the icons module configuration to allow the addition of a custom icon dictionary.
#### Old configuration
The previous configuration imported the FlxIconModule with an extra icon set directly in the imports array.
```typescript theme={"system"}
@NgModule({
declarations: [...],
imports: [
FlxIconModule.withExtraIconSet(EXTRA_ICON_SET)
]
)
```
#### New configuration
The new configuration separates the extra icon set from the imports array and places it in the providers array. This change allows for extending the existing icon set with a custom icon dictionary while still keeping the `FlxIconModule` in the imports array to use the `flx-icon` component.
```typescript theme={"system"}
@NgModule({
declarations: [...],
imports: [
FlxIconModule // keep the module in order to be able to use the flx-icon component
],
providers: [
provideExtraIconSet(EXTRA_ICON_SET) // extend the existing icon set with a custom icon dictionary
]
)
```
### FlowX.AI Engine - Scripting UX improvements
**Input Fields**: Support interpolation as valid syntax in code editors.
Autocomplete feature added to:
* **Node Configurations**:
* Start subprocess actions: copy or exclude from the current state.
* Key names for the data stream topics.
* Process keys for Start message nodes.
* Process keys and correlation keys for Catch message nodes (boundary).
* Timer interrupting/non interrupting definition/function (x).
* Output and collection keys in Call activity nodes.
* **Node actions**:
* Append params to parent process: destination states specified when appending parameters to parent processes.
* **UI Designer**:
* Process data keys for file previews and image source locations.
* Collection sources and prototype identifier keys.
* Input keys for custom components.
* **Process Settings**: Indexing keys used for the Task Management plugin.
These updates aim to streamline the scripting user experience and enhance overall functionality.
### FlowX.AI UI Designer
* Improved UI Designer Navigator for better usability.
## Bug Fixes 🛠️
### FlowX.AI Engine
* Fixed duplicate key error. This issue was caused by conflicting keys in processes with start embedded subprocesses nodes and throw/catch message events. The key management logic was updated to ensure unique keys, resolving the error.
* Fixed an issue where executing a business rule with the same input sometimes caused the process engine to return an error. Implemented null checks in the business rule script, regular cache clearing, and enhanced error logging for improved debugging.
## Additional information
For deployment guidelines, refer to:
# Deployment guidelines v4.5.0
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.0-october-2024/deployment-guidelines-v4.5.0
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
It is not possible to import old process definitions from versions earlier than v4.5.0

## Component versions
| Component | 4.5.0 | 4.1.5 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------------------- | ---------- | -------- | -------- | -------- | -------- | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **7.3.5** | 6.1.7 | 6.1.6 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **6.1.11** | 5.1.7 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.9.8** | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | **5.9.8** | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | **5.9.8** | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | **5.9.8** | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.9.8** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.9.8** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.9.8** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.9.8** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.9.8** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **4.1.6** | 3.0.3 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | **4.0.4** | 3.0.2 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | **4.0.4** | 3.0.3 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **5.0.4** | 4.0.4 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **5.0.4** | 4.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | **4.1.3** | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | **6.0.1** | 5.0.5 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | **3.1.2** | 2.0.5 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | **5.0.3** | 4.0.5 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | **0.1.12** | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | **3.0.3** | 2.0.3 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **1.3.9** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **application-manager** | **1.3.7** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **data-sync** | **1.3.5** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **iOS renderer** | **4.0.2** | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | **4.0.0** | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
Note: The same container image and Helm chart are used for both **Application Manager** and **Runtime Manager**.
## AI Agents
| Component | 4.5.0 | 4.1.5 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | --------- | ----- | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.0.0** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.0.0** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.0.0** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.0.0** | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.5.0 | Keycloak | 22.x |
| 4.5.0 | Kafka | 3.2.x |
| 4.5.0 | PostgreSQL | 16.2.x |
| 4.5.0 | MongoDB | 7.0.x |
| 4.5.0 | Redis | 7.2.x |
| 4.5.0 | Elasticsearch | 7.17.x |
| 4.5.0 | OracleDB | 19.23.0.0.0 |
| 4.5.0 | Angular (Web SDK) | 17.x |
| 4.5.0 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
## New microservices - setup guides
## New access rights and roles
## Updated access rights and roles
Added new roles for **manage-views**.
# Deployment changes for v4.5.0
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.0-october-2024/migrating-from-v4.1.x-to-v4.5.0/migrating-from-v4.1.x
This document outlines the configuration and infrastructure changes introduced from v4.1.x to v4.5.0 for deploying the FlowX.AI platform.
## CMS Setup
### MongoDB configuration
In version 4.5.0, the CMS setup includes a more comprehensive MongoDB configuration, especially for runtime data handling:
* **Runtime MongoDB Instance**: A dedicated MongoDB instance for managing runtime data.
* **New Environment Variables**:
* `RUNTIME_DB_USERNAME`: Username for runtime MongoDB access.
* `SPRING_DATA_MONGODB_RUNTIME_URI`: Connection URI for the runtime MongoDB instance.
* `SPRING_DATA_MONGODB_STORAGE`: Specifies storage type for Azure environments (`mongodb` or `cosmosdb`). Default is `mongodb`.
* **Transaction Settings for Mongock Library**:
* `MONGOCK_TRANSACTIONENABLED`: Controls MongoDB transaction support with Mongock, defaulting to `false` due to compatibility concerns with MongoDB 5.
### Private storage configuration
Private CMS to securely store uploaded documents and AI-generated documents, ensuring they are accessible only via authenticated endpoints. This CMS will support AI services and workflows while maintaining strict access controls.
Private CMS ensures secure file storage by keeping documents hidden from the Media Library and accessible only through authenticated endpoints with access token permissions. Files can be retrieved using tags (e.g., ai\_document, ref:UUID\_doc) and are excluded from application builds as they aren't needed at runtime.
* `APPLICATION_FILE_STORAGE_S3_PRIVATE_SERVER_URL`: This environment variable specifies the URL of the S3 server used for private file storage.
* `APPLICATION_FILE_STORAGE_S3_PRIVATE_BUCKET_NAME`: This environment variable specifies the name of the S3 bucket dedicated to private file storage.
* `APPLICATION_FILE_STORAGE_S3_PRIVATE_CREATE_BUCKET`: This environment variable indicates whether the private S3 bucket should be created if it does not already exist. It can be set to true or false.
* `APPLICATION_FILE_STORAGE_S3_PRIVATE_ACCESS_KEY`: This environment variable holds the access key used to authenticate to the S3 server for private file storage.
* `APPLICATION_FILE_STORAGE_S3_PRIVATE_SECRET_KEY`: This environment variable holds the secret key used to authenticate to the S3 server for private file storage.
***
## Admin setup
### MongoDB configuration
Version 4.5.0 introduces a new MongoDB setup in the Admin service for managing data model information:
* **New MongoDB Data Model Configuration**:
* **Environment Variables**:
* `SPRING_DATA_MONGODB_URI`: URI for connecting to the MongoDB data model instance.
* `DB_USERNAME`: Set to `data-model` for data model access.
* `SPRING_DATA_MONGODB_STORAGE`: Specifies storage type for Azure environments (`mongodb` or `cosmosdb`).
***
## Engine setup
### MongoDB configuration
The Engine configuration now includes additional setup for a runtime MongoDB instance to manage runtime builds:
* **Runtime MongoDB for Engine**:
* **New Environment Variables**:
* `SPRING_DATA_MONGODB_RUNTIME_URI`: URI for connecting to the runtime MongoDB.
* `DB_USERNAME`: Set to `app-runtime` for runtime data access.
# Configuration and migration guide
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.0-october-2024/migrating-from-v4.1.x-to-v4.5.0/process-configuration
This guide outlines changes in process and UI configuration from v4.1.x to 4.5.1 version.
## Applications
The **Applications** feature in FlowX AI v4.5.0 is a new structure that organizes all dependencies and resources required for a project into a single deployable view. This enhancement simplifies configuration, deployment, and maintenance by layering applications on top of processes, offering a centralized workspace that encapsulates everything needed for project execution.

Several key configuration changes impact how resources and dependencies are managed, deployed, and maintained. This guide provides a breakdown of the configuration changes, automatic migration processes, and manual steps required to ensure a smooth transition.

***
### Consolidated resource management
* **Change**: All resources that were previously managed individually within processes are now grouped within Applications. This includes content management elements, integrations, themes, task configurations, and permissions.
* **Impact**: Resources like **enumerations**, **substitution tags**, and **generic parameters** are now managed within Applications, allowing centralized configuration and version control.
* **Migration**: All process-related resources will be migrated automatically into a **default application**, ensuring continuity of functionality in the new framework. After migration, you should verify that all critical resources are correctly configured within this default application.
### Enhanced version control and dependency management
* **Impact**: Applications support **dependency management** through **Libraries** and enforce version-controlled resources. Setting up an application now requires careful dependency management and versioning to prevent unintended updates.
* **Benefit**: Allows for modular, reusable resources and stable deployments across applications, reducing resource duplication and enhancing project compatibility.
### Migration checklist
To ensure a smooth transition, complete the following steps:
1. **Verify Process Migration**: Confirm that all existing process definitions have been correctly migrated into the default application.
2. **Set Configuration Parameter Overrides**: Post-deployment, adjust environment-specific Configuration Parameters in the default application.
3. **Update Task Views**: Replace the global "All Tasks" feature with application-specific Views in each application.
4. **Transfer Processes and Dependencies Manually**: If moving a process from the default application to another application, manually transfer associated resources and re-check dependencies.
***
## Generic parameters migration
* **Overview**: In version 4.5.0, global generic parameters (from versions prior to 4.5.0) have been migrated to application-level as Configuration Parameters, consolidating parameter management within specific applications for improved organization and control.

* **Migration**: All generic parameters will be automatically migrated to Configuration Parameters section under a default application.
* **Business Rules Unaffected**: There is no impact on existing business rules; they will continue to function as before without requiring updates.
* **Process Export Considerations**: If you export a process from one application to another, ensure that you also transfer the associated configuration parameters. This step is crucial to maintain process functionality and consistency across applications.
* **Important Note**: Only values of generic parameters associated with the specific environment, or where `env = null` (displayed as "all" in the interface in versions prior to 4.5.0), will be migrated. You must ensure that you have correctly set the values for generic parameters, paying attention to environment values (which are case-sensitive), and export these generic parameters before migration to avoid any potential data loss.

* **Post-Deployment Step**: After the first deployment to an upper environment, you will need to create configuration parameter overrides with the specific values required for that environment. This ensures that all environment-specific configurations are accurately maintained and applied across different deployment stages.
To set configuration parameter overrides, navigate to **Your App -> Runtime -> Configuration Parameters Overrides**.

***
## Task management
* "All Tasks" as a View: The global "All Tasks" feature is no longer standalone and will now function as a View in an application.
**v4.5.0:**

**v4.1.x:**

***
## General
Before starting the migration, complete the following steps:
1. **Merge All Feature Branches**: Ensure all feature branches for processes are merged into the latest version on the main branch.
2. **Remove Unnecessary Resources**: Delete any test processes or resources that are no longer needed.
3. **Export Generic Parameters**: Export generic parameters as a backup to ensure they migrate accurately to application-specific Configuration Parameters.
### Migration steps
During migration, resources will be transferred into a single **default application** with one committed version.
* **Process Definitions**: Only the last committed process version on the main branch will migrate. If no committed version exists, the latest WIP version will be used.
* **Enumerations, Substitution Tags, and Task Manager**: These resources will be migrated to the default application.
* **Generic Parameters**: Migrated as **Configuration Parameters** within the default application, covering only values where `env = null` or that match the platform’s environment setting.
* **Languages**: Language settings (available languages and default) will be moved to application settings. Languages remain globally available.
### Resources excluded from migration
Some resources will remain globally available or are deprecated:
* **Themes**
* **Fonts**
* **Global Media Library** (for media used in themes)
* **Source Systems**
* **Notifications and Document Templates**
* **Out of Office (Task Manager)**
* **Integration Management** (not included in v4.5)
* **Content Models** (deprecated)
***
## Datepicker Migration
In version 4.5, significant updates have been introduced to the **Datepicker** component to ensure compatibility with ISO 8601 date formats and enhanced handling of date attributes within the **Data Model**. This migration affects both newly created and existing processes.
### Key changes
1. **Introduction of Date Types**:
* **Standard Date**: Stores and displays date values in ISO 8601 format, respecting the application's locale and timezone settings.
* **Legacy Date**: Retains previous formatting to ensure compatibility with existing business rules and processes.
2. **Properties Updates**:
* The **Datepicker** now supports dependent properties such as `minDate`, `maxDate`, and `defaultValue`. These properties:
* Follow the formatting rules of the selected date type (Standard or Legacy).
* Ensure that dynamic date values pulled from the **Data Model** are displayed correctly.
3. **Backward Compatibility**:
* **Existing Processes**: All migrated processes with legacy Datepicker components will default to `Legacy Date` type. This preserves the original formatting and ensures no disruption in business rules or workflows.
* **New Processes**: Newly created processes will default to `Standard Date` type, saving values in ISO 8601 format.
***
### Migration process
1. **Legacy Datepickers**:
* Automatically flagged during migration.
* Continue to work with existing business rules.
* Require manual review for future updates to transition to the **Standard Date** format.
2. **Business Rules Updates**:
* Legacy Datepickers may require manual adjustments if associated business rules reference hardcoded date formats.
* Ensure that any dynamic dates used in business rules are compatible with the ISO 8601 standard.
3. **Standard Datepickers**:
* All new Datepicker components save date values directly in ISO 8601 format.
* Fully compatible with updated **Data Model** attributes, allowing seamless integration with external systems, adaptors, and reporting plugins.
### Considerations
* **Default Values**:
* For **Standard Datepickers**, the `defaultValue` must be in ISO 8601 format.
* Dynamic defaults can also be set using **Data Model** attributes or process data.
* **Data Model Integration**:
* All external and internal date attributes, including those used by adaptors or business rules, must be explicitly defined in the **Data Model**.
* **UI Designer Overrides**:
* Overrides can be applied to display dates differently for specific UI elements, ensuring flexibility for localized formatting.
### Recommendations for transition
* **Existing Processes**:
* Leave Datepicker components in `Legacy` mode unless business rules and workflows are updated to support ISO 8601.
* **New Processes**:
* Use `Standard Date` to ensure future compatibility and alignment with ISO 8601 formatting.
* **Documentation**:
* Review and update all timer expressions, adaptors, and external data feeds to use ISO 8601 format for consistency.
***
## Post-migration recommendations
For complex projects with multiple use cases, **do not use the default application for ongoing development or production builds**. Instead:
1. **Create Branches within the Default Application**: Organize and streamline resources by creating branches. This enables a lightweight build focused on production.
2. **Split the Default Application into Smaller Applications**: Use the import/export feature to separate the default application into individual applications by use case.
* **Note**: When importing processes into a new application, resource references may need to be manually reconfigured.
***
# Renderer SDKs
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.0-october-2024/migrating-from-v4.1.x-to-v4.5.0/renderers
This guide assists in migrating from FlowX v4.1.x to v4.5.0.
## Android SDK migration guide
### Initialization config changes
A new configuration parameter, named `locale` was added in order to improve formatting the dates, numbers and currencies.
When the SDK initialization happens through the `FlowxSdkApi.getInstance().init(...)` method, the argument has to be set inside the `config: SdkConfig` parameter value:
```kotlin theme={"system"}
FlowxSdkApi.getInstance().init(
...
config = SdkConfig(
baseUrl = "URL to FlowX backend",
imageBaseUrl = "URL to FlowX CMS Media Library",
enginePath = "some_path",
language = "en",
locale = Locale.getDefault(), // e.g. Locale("en", "US"), Locale("fr", "CA")
validators = mapOf("exact_25_in_length" to { it.length == 25 }),
enableLog = false,
),
...
)
```
### Changes when starting a Flowx process
Two new parameters were added:
| Name | Description | Type | Requirement |
| ----------------- | -------------------------------------------------------------------------------------- | --------------- | -------------------------------- |
| `applicationUuid` | The uuid string of the application containing the process to be started | `String` | Mandatory |
| `onProcessEnded` | Callback function where you can do additional processing when the started process ends | `(() -> Unit)?` | Optional. It defaults to `null`. |
```kotlin theme={"system"}
fun startProcess(
applicationUuid: String,
processName: String,
params: JSONObject = JSONObject(),
isModal: Boolean = false,
onProcessEnded: (() -> Unit)? = null,
closeModalFunc: ((processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
### Changes when resuming a Flowx process
One new parameter was added:
| Name | Description | Type | Requirement |
| ---------------- | ---------------------------------------------------------------------------------------- | --------------- | -------------------------------- |
| `onProcessEnded` | Callback function where you can do additional processing when the continued process ends | `(() -> Unit)?` | Optional. It defaults to `null`. |
```kotlin theme={"system"}
fun continueProcess(
processUuid: String,
isModal: Boolean = false,
onProcessEnded: (() -> Unit)? = null,
closeModalFunc: ((processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
### Public API changes
The `changeLanguage` method has been updated and renamed to `changeLocaleSettings`, in order to accommodate the newly added `locale` config parameter:
```kotlin theme={"system"}
fun changeLocaleSettings(locale: Locale, language: String)
```
### Library dependencies updates
* **[Kotlin](https://kotlinlang.org/)**: 1.9.22 **↗** **1.9.24**
* **[Compose BOM](https://developer.android.com/jetpack/compose/bom/bom-mapping)**: 2024.02.00 **↗** **2024.06.00**
* **[Compose Compiler](https://developer.android.com/jetpack/androidx/releases/compose-compiler)**: 1.5.9 **↗** **1.5.14**
* **[Gson](https://github.com/google/gson)**: 2.10.1 **↗** **2.11.0**
***
## iOS SDK migration guide
### Initialization config changes
A new configuration parameter, named `locale` was added in order to improve formatting the dates, numbers and currencies.
The locale needs to be set on the `FXConfig.sharedInstance.configure` method
```swift theme={"system"}
FXConfig.sharedInstance.configure { (config) in
config.locale = "en-US"
...
}
```
### Changes when starting a process
Two new parameters were added on the 3 available start process methods:
| Name | Description | Type | Requirement |
| ----------------- | -------------------------------------------------------------------------------------- | --------------- | ------------------------------- |
| `applicationUuid` | The uuid string of the application containing the process to be started | `String` | Mandatory |
| `onProcessEnded` | Callback function where you can do additional processing when the started process ends | `(() -> Void)?` | Optional. It defaults to `nil`. |
```swift theme={"system"}
func startProcess(applicationUuid: String,
name: String,
params: [String : Any]?,
isModal: Bool = false,
showLoader: Bool = false,
completion: ((UIViewController?) -> Void)?,
onProcessEnded: (() -> Void)? = nil)
```
### Changes when resuming a Flowx process
One new parameter was added on the 3 available continue process methods:
| Name | Description | Type | Requirement |
| ---------------- | -------------------------------------------------------------------------------------- | --------------- | ------------------------------- |
| `onProcessEnded` | Callback function where you can do additional processing when the started process ends | `(() -> Void)?` | Optional. It defaults to `nil`. |
```swift theme={"system"}
func continueExistingProcess(uuid: String,
name: String,
isModal: Bool = false,
completion: ((UIViewController?) -> Void)? = nil,
onProcessEnded: (() -> Void)? = nil)
```
### Public API changes
The `changeLanguage` method has been updated and renamed to `changeLocaleSettings`, in order to accommodate the newly added `locale` config parameter:
```swift theme={"system"}
func changeLocaleSettings(locale: String?, language: String?)
```
***
## Angular SDK migration guide
### Renderer SDK component usage
In the Angular SDK, the `` component has two new parameters have been introduced: appInfo and locale. These additions help support localization and application-specific configurations.
* **appInfo**: Object containing an appId key, which identifies the application.
* **locale**: Provides region-specific settings for localization.
Add the definitions for these properties in the class file of the component that uses the process renderer component:
```typescript theme={"system"}
appInfo = { appId: 'your-app-id' },
locale = 'en-US',
```
Use these parameters in the template as inputs for the `` component:
```html theme={"system"}
```
### Icon module update
The `withExtraIconSet` method has been replaced with `provideExtraIconSet`, which should now be used in the providers array.
```typescript theme={"system"}
@NgModule({
imports: [
IconModule, // Import the IconModule
],
providers: [
// Use provideExtraIconSet to add your custom icon set
provideExtraIconSet({
customIcon1: 'path/to/custom-icon1.svg',
customIcon2: 'path/to/custom-icon2.svg',
// Add more icons as needed
})
]
})
export class AppModule {}
```
### Additional libraries
The following npm packages are now essential for handling date and input formatting:
```npm theme={"system"}
npm i date-fns inputmask
```
* date-fns
* inputmask
# FlowX.AI 4.5.0 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.0-october-2024/v4.5.0-october-2024
Welcome to the FlowX.AI 4.5.0 release! 🚀 This update is packed with groundbreaking features, enhancements, and fixes to supercharge your workflow and provide a seamless development experience.
**Release Date:** 31st October 2024
Get ready because this update is big—really big. We’re taking the scenic route to explore all the exciting new features and improvements that you won’t want to miss, so get ready. There’s a lot to explore here (and yes, that pun is courtesy of our AI, since even our technical writer was stumped on how to market this one).
Before diving in, here is a bonus meme:

***
## **Highlights**
### What's new? 🆕
1. **Applications**: Manage projects with version control and streamlined deployment.
2. **Integration Designer**: Simplify REST API integrations with drag-and-drop tools.
3. **AI Agents**: Leverage LLM-agnostic AI for smarter business processes.
4. **Localization**: Robust support for global languages and regional preferences.
5. **Data Model 2.0**: Improved data handling with dynamic binding and reusable objects.
6. **Task Management 2.0**: Enhanced tracking with customizable views and advanced filtering.
7. **UI Designer Upgrades**: Grid layouts, table components, and an improved navigator.
8. **Scripting Enhancements**: Autocomplete and test editors for streamlined UX.
9. **SDKs**: New React SDK for building responsive applications.
***
## **Detailed updates**
### Application
The new Application concept introduces a streamlined approach to managing and deploying complex projects within FlowX. By grouping all related resources—such as processes, enumerations, integrations, and assets—into a single, organized workspace, applications provide a cohesive view for efficient development and deployment.

This feature supports version control at the application level, allowing users to create and manage multiple versions and builds. Applications also facilitate resource sharing through dependencies, enabling the reuse of processes and configurations across projects. These enhancements make it easier to maintain project integrity, deploy updates seamlessly, and ensure consistency across environments. Here is a quick walkthrough demo:
For more details, check out this section
#### Config vs build
* Config mode is the environment where you set up, adjust, and manage your application's resources, processes, and configurations. It's the workspace where you fine-tune every aspect of the application before it's ready for deployment. Think of it as the design phase, where the focus is on setup, organization, and preparation.
* Build mode is the stage where the configurations you've set up are packaged into a deployable form. This is the runtime-ready version of your application, containing everything needed for it to function in a production environment. A build includes a snapshot of the application’s state at a given point, ensuring stability and predictability when deployed.
For more details, check out this section
For more details, check out this section
***
### Integration Designer
The Integration Designer simplifies the integration of FlowX with external systems using REST APIs. It offers a user-friendly graphical interface with intuitive drag-and-drop functionality for defining data models, orchestrating workflows, and configuring system endpoints.
With Integration Designer, you can easily set up REST-based connections and define workflows, while enjoying flexible authorization options such as Service Token, Bearer, or No Auth.
**Did you know?**
Unlike [Postman](https://www.postman.com/), which focuses on API testing, the Integration Designer automates workflows between systems. With drag-and-drop ease, it handles REST API connections, real-time processes, and error management, making integrations seamless and scalable.
For more details, check out this section
***
### AI Agents
FlowX AI Agents bring powerful automation and insight capabilities by harnessing a flexible, LLM-agnostic core, tailored to optimize your business processes and interactions. Built on a robust AI architecture, FlowX leverages interconnected language models adaptable across deployment options, from open-source models to private LLMs, ensuring secure, on-premise functionality that can integrate with any public LLM providers.
Stay tuned for more.
***
### Localization and Internationalization
We are introducing robust localization and internationalization features to enhance global usability and adaptability. Key updates include:
Enhanced formatting options for dates, times, numbers, and currencies with support for various international standards including short, medium, long, full, and custom formats.
Support for currency formatting with options to display values using ISO codes or symbols, adapting to user-selected locales and regional preferences.
Comprehensive settings for pluralization, capitalization, alignment, and sorting that adapt to regional requirements, helping cater to a diverse global user base.
New options in the UI Designer to override general settings for text, messages, links, and form elements based on locale and region.
Static and dynamically generated legal documents can now be customized based on regional and locale settings, improving compliance and communication with local audiences.
For more details, check out this section
***
### Data model 2.0
In this release, we've introduced Data Model 2.0, a major upgrade designed to simplify and enhance data handling. Key improvements include the introduction of reusable objects, a visual representation of complex data structures, and dynamic data binding, all aimed at creating a more reliable and intuitive experience. The new model ensures references are automatically updated when changes are made, streamlining data management across the platform.
**Highlights**:
* **New Root Element**: Provides a structural basis without impacting business logic, ensuring a clear and organized data structure.
* **Enhanced Data Binding**: Expanded to more areas, with dynamic updates based on changes in the data model.
* **Localization**: Added handling mechanism for locale-specific formatting, ensuring accurate data representation.
For more details, check out this section
***
### Task management 2.0
We've enhanced Task Management capabilities, making it easier to create, track, and manage tasks efficiently. The updated Task Management features include customizable views and advanced filtering and sorting options for task data. Additionally, users can now implement both low-code and full-code solutions for a tailored Task Management experience, ensuring maximum flexibility for different business needs.

For more details, check out this section
***
### UI Designer
#### Grid layout
We are excited to introduce the Grid Layout feature in this release, enhancing the flexibility and usability of the UI Designer for creating structured and responsive layouts. With the new Grid Layout, users can organize form elements, tables, and other components using a multi-column and row system, allowing for more complex, bidirectional designs compared to the previous flex-based layout.

***
#### Table
In this release, we've introduced a new Table component, allowing for more structured data display with customizable columns, pagination options, and dynamic styling features. The table supports resizable columns, flexible layouts, and integrates seamlessly with our theming settings for a consistent look across the application.

For more details, check out this section
***
#### FlowX.AI UI Designer new navigator
We are thrilled to introduce the new and improved **UI Designer Navigator**, a major update designed to streamline your UI design process.
The UI layer panel has been redesigned for a more intuitive experience, making it easier to manage and navigate through your design elements.
Dragging and dropping components in the preview is now smoother and more precise, allowing for faster and easier creation of UIs.
You can now change the root component from a form group to a container or vice versa, offering greater flexibility when copying nodes or resolving configuration problems.
It is now simpler to identify where you are placing a component within the hierarchy, thanks to the enhanced drag/reorder functionality in the right panel.
***
### Autocomputed data to send
In previous platform versions, when creating your UI screens and working with data, you had to ensure that all the data stored in your process keys was saved in the process instance. This required adding an extra parameter called "Data to send" to the "Save Data" node action.
**Older versions** vs **v4.5**:
Now, with the autocompute feature, this step is no longer necessary, as the data is automatically saved and sent on your process instance.
You no longer need to add "Save Data" node actions, but make sure to include "Forms to Validate" on the UI Actions. This helps ensure that data is submitted correctly and automatically activates any added validators where they exist.

However, you still have the option to customize which keys are included or excluded as needed.

***
### Scripting UX improvements
We're excited to announce significant improvements to our scripting UX. These enhancements focus on upgrading the code editors and introducing an advanced autocomplete feature. Configurators, both experienced and novice, will benefit from better visual feedback, support for interpolation syntax, and integrated help and examples.
The updates aim to streamline the configuration process, reduce errors, and make testing and troubleshooting more efficient.
#### Autocomplete based on data model
Autocomplete for attributes is now available, improving configuration efficiency by offering tailored suggestions based on data model attributes. These enhancements apply to various fields and editors, including JSON, code, and JavaScript editors, as well as input fields across different node configurations, UI components, and business rules.
#### New test business rule editor
#### New hide/disabled expressions editor

***
### SDKs
With the 4.5.0 release, we're excited to announce the launch of the FlowX React SDK! This new SDK empowers developers to seamlessly integrate FlowX.AI capabilities into React applications, making it easier than ever to build highly interactive, responsive, and dynamic user experiences.
To get started, simply install the FlowX React SDK via npm and check our documentation for examples and best practices!
***
## **Changes** 🔧
* **WEB SDK**: Angular update (v17).
## Additional information
For deployment guidelines, refer to:
# Deployment guidelines v4.5.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.1-november-2024/deployment-guidelines-v4.5.1
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
It is not possible to import old process definitions from versions earlier than v4.5.0

## Component versions
| Component | 4.5.1 | 4.5.0 | 4.1.5 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------------------- | ---------- | ------ | -------- | -------- | -------- | -------- | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | **7.4.1** | 7.3.5 | 6.1.7 | 6.1.6 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **6.2.2** | 6.1.11 | 5.1.7 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.18.0** | 5.9.8 | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | **5.18.0** | 5.9.8 | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | **5.18.0** | 5.9.8 | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | **5.18.0** | 5.9.8 | 4.17.1-6 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.18.0** | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.18.0** | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.18.0** | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.18.0** | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.18.0** | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **4.1.10** | 4.1.6 | 3.0.3 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | 4.0.4 | 4.0.4 | 3.0.2 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | 4.0.4 | 4.0.4 | 3.0.3 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | 5.0.4 | 5.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | 5.0.4 | 5.0.4 | 4.0.3 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 4.1.3 | 4.1.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | **6.0.5** | 6.0.1 | 5.0.5 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | 3.1.2 | 3.1.2 | 2.0.5 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | 5.0.3 | 5.0.3 | 4.0.5 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | 3.0.3 | 3.0.3 | 2.0.3 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **1.4.3** | 1.3.9 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **application-manager** | **1.4.6** | 1.3.7 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **data-sync** | **1.3.6** | 1.3.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| **iOS renderer** | 4.0.2 | 4.0.2 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 4.0.0 | 4.0.0 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
Note: The same container image and Helm chart are used for both **Application Manager** and **Runtime Manager**.
## AI Agents
| Component | 4.5.1 | 4.5.0 | 4.1.5 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | --------- | ----- | ----- | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.0.6** | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.0.2** | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.2.2** | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.0.4** | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.0.7** | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.5.1 | Keycloak | 22.x |
| 4.5.1 | Kafka | 3.2.x |
| 4.5.1 | PostgreSQL | 16.2.x |
| 4.5.1 | MongoDB | 7.0.x |
| 4.5.1 | Redis | 7.2.x |
| 4.5.1 | Elasticsearch | 7.17.x |
| 4.5.1 | OracleDB | 19.23.0.0.0 |
| 4.5.1 | Angular (Web SDK) | 17.x |
| 4.5.1 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
## Configuration changes
In the 4.5.1 release, a new configuration option has been added to the Integration Designer for enhanced Kafka topic management.
* **New Configuration**: `FLOWX_WORKFLOW_CREATETOPICS`
* **When set to true**: In development environments, where Kafka topics may need to be created automatically, this configuration can be enabled (flowx.workflow\.createTopics: true). This allows for the automatic creation of "in" and "out" topics when workflows are created, eliminating the need to wait for topic creation at runtime.
* **Default setting (false)**: In production or controlled environments, where automated topic creation is not desired, this setting remains false to prevent unintended Kafka topic creation.
This update aims to streamline the development process by enabling faster setup of workflows with automatic Kafka topic creation in designated environments.
# Deployment changes for v.4.5.1
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.1-november-2024/migrating-from-v4.1.x-to-v4.5.1/migrating-from-v4.1.x
This document outlines the configuration and infrastructure changes introduced from v4.1.x to v4.5.1 for deploying the FlowX.AI platform.
## 4.5.0 changes
### CMS Setup
#### MongoDB configuration
In version 4.5.0, the CMS setup includes a more comprehensive MongoDB configuration, especially for runtime data handling:
* **Runtime MongoDB Instance**: A dedicated MongoDB instance for managing runtime data.
* **New Environment Variables**:
* `SPRING_DATA_MONGODB_RUNTIME_ENABLED`: Enables runtime MongoDB usage. Default is `true`.
* `RUNTIME_DB_USERNAME`: Username for runtime MongoDB access.
* `SPRING_DATA_MONGODB_RUNTIME_URI`: Connection URI for the runtime MongoDB instance.
* `SPRING_DATA_MONGODB_STORAGE`: Specifies storage type for Azure environments (`mongodb` or `cosmosdb`). Default is `mongodb`.
* **Transaction Settings for Mongock Library**:
* `MONGOCK_TRANSACTIONENABLED`: Controls MongoDB transaction support with Mongock, defaulting to `false` due to compatibility concerns with MongoDB 5.
***
### Admin setup
#### MongoDB configuration
Version 4.5.0 introduces a new MongoDB setup in the Admin service for managing data model information:
* **New MongoDB Data Model Configuration**:
* **Environment Variables**:
* `SPRING_DATA_MONGODB_URI`: URI for connecting to the MongoDB data model instance.
* `DB_USERNAME`: Set to `data-model` for data model access.
* `SPRING_DATA_MONGODB_STORAGE`: Specifies storage type for Azure environments (`mongodb` or `cosmosdb`).
***
### Engine setup
#### MongoDB configuration
The Engine configuration now includes additional setup for a runtime MongoDB instance to manage runtime builds:
* **Runtime MongoDB for Engine**:
* **New Environment Variables**:
* `SPRING_DATA_MONGODB_RUNTIME_ENABLED`: Enables runtime MongoDB access. Default is `true`.
* `SPRING_DATA_MONGODB_RUNTIME_URI`: URI for connecting to the runtime MongoDB.
* `DB_USERNAME`: Set to `app-runtime` for runtime data access.
***
## 4.5.1 changes
In the 4.5.1 release, a new configuration option has been added to the Integration Designer for enhanced Kafka topic management.
* **New Configuration**: `FLOWX_WORKFLOW_CREATETOPICS`
* **When set to true**: In development environments, where Kafka topics may need to be created automatically, this configuration can be enabled (flowx.workflow\.createTopics: true). This allows for the automatic creation of "in" and "out" topics when workflows are created, eliminating the need to wait for topic creation at runtime.
* **Default setting (false)**: In production or controlled environments, where automated topic creation is not desired, this setting remains false to prevent unintended Kafka topic creation.
This update aims to streamline the development process by enabling faster setup of workflows with automatic Kafka topic creation in designated environments.
# Configuration and migration guide
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.1-november-2024/migrating-from-v4.1.x-to-v4.5.1/process-configuration
This guide outlines changes in process and UI configuration from v4.1.x to 4.5.1 version.
## Applications (v4.5.0)
The **Applications** feature in FlowX AI v4.5.0 is a new structure that organizes all dependencies and resources required for a project into a single deployable view. This enhancement simplifies configuration, deployment, and maintenance by layering applications on top of processes, offering a centralized workspace that encapsulates everything needed for project execution.

Several key configuration changes impact how resources and dependencies are managed, deployed, and maintained. This guide provides a breakdown of the configuration changes, automatic migration processes, and manual steps required to ensure a smooth transition.

***
### Consolidated resource management
* **Change**: All resources that were previously managed individually within processes are now grouped within Applications. This includes content management elements, integrations, themes, task configurations, and permissions.
* **Impact**: Resources like **enumerations**, **substitution tags**, and **generic parameters** are now managed within Applications, allowing centralized configuration and version control.
* **Migration**: All process-related resources will be migrated automatically into a **default application**, ensuring continuity of functionality in the new framework. After migration, you should verify that all critical resources are correctly configured within this default application.
### Enhanced version control and dependency management
* **Impact**: Applications support **dependency management** through **Libraries** and enforce version-controlled resources. Setting up an application now requires careful dependency management and versioning to prevent unintended updates.
* **Benefit**: Allows for modular, reusable resources and stable deployments across applications, reducing resource duplication and enhancing project compatibility.
### Migration checklist
To ensure a smooth transition, complete the following steps:
1. **Verify Process Migration**: Confirm that all existing process definitions have been correctly migrated into the default application.
2. **Set Configuration Parameter Overrides**: Post-deployment, adjust environment-specific Configuration Parameters in the default application.
3. **Update Task Views**: Replace the global "All Tasks" feature with application-specific Views in each application.
4. **Transfer Processes and Dependencies Manually**: If moving a process from the default application to another application, manually transfer associated resources and re-check dependencies.
***
## Generic parameters migration (v4.5.0)
* **Overview**: In version 4.5.0, global generic parameters (from versions prior to 4.5.0) have been migrated to application-level as Configuration Parameters, consolidating parameter management within specific applications for improved organization and control.

* **Migration**: All generic parameters will be automatically migrated to Configuration Parameters section under a default application.
* **Business Rules Unaffected**: There is no impact on existing business rules; they will continue to function as before without requiring updates.
* **Process Export Considerations**: If you export a process from one application to another, ensure that you also transfer the associated configuration parameters. This step is crucial to maintain process functionality and consistency across applications.
* **Important Note**: Only values of generic parameters associated with the specific environment, or where `env = null` (displayed as "all" in the interface in versions prior to 4.5.0), will be migrated. You must ensure that you have correctly set the values for generic parameters, paying attention to environment values (which are case-sensitive), and export these generic parameters before migration to avoid any potential data loss.

* **Post-Deployment Step**: After the first deployment to an upper environment, you will need to create configuration parameter overrides with the specific values required for that environment. This ensures that all environment-specific configurations are accurately maintained and applied across different deployment stages.
To set configuration parameter overrides, navigate to **Your App -> Runtime -> Configuration Parameters Overrides**.

***
## Task management (v4.5.0)
* "All Tasks" as a View: The global "All Tasks" feature is no longer standalone and will now function as a View in an application.
**v4.5.0:**

**v4.1.x:**

***
## General (v4.5.0)
Before starting the migration, complete the following steps:
1. **Merge All Feature Branches**: Ensure all feature branches for processes are merged into the latest version on the main branch.
2. **Remove Unnecessary Resources**: Delete any test processes or resources that are no longer needed.
3. **Export Generic Parameters**: Export generic parameters as a backup to ensure they migrate accurately to application-specific Configuration Parameters.
### Migration steps
During migration, resources will be transferred into a single **default application** with one committed version.
* **Process Definitions**: Only the last committed process version on the main branch will migrate. If no committed version exists, the latest WIP version will be used.
* **Enumerations, Substitution Tags, and Task Manager**: These resources will be migrated to the default application.
* **Generic Parameters**: Migrated as **Configuration Parameters** within the default application, covering only values where `env = null` or that match the platform’s environment setting.
* **Languages**: Language settings (available languages and default) will be moved to application settings. Languages remain globally available.
### Resources excluded from migration
Some resources will remain globally available or are deprecated:
* **Themes**
* **Fonts**
* **Global Media Library** (for media used in themes)
* **Source Systems**
* **Notifications and Document Templates**
* **Out of Office (Task Manager)**
* **Integration Management** (not included in v4.5)
* **Content Models** (deprecated)
***
## Datepicker Migration (v4.5.0)
In version 4.5, significant updates have been introduced to the **Datepicker** component to ensure compatibility with ISO 8601 date formats and enhanced handling of date attributes within the **Data Model**. This migration affects both newly created and existing processes.
### Key changes
1. **Introduction of Date Types**:
* **Standard Date**: Stores and displays date values in ISO 8601 format, respecting the application's locale and timezone settings.
* **Legacy Date**: Retains previous formatting to ensure compatibility with existing business rules and processes.
2. **Properties Updates**:
* The **Datepicker** now supports dependent properties such as `minDate`, `maxDate`, and `defaultValue`. These properties:
* Follow the formatting rules of the selected date type (Standard or Legacy).
* Ensure that dynamic date values pulled from the **Data Model** are displayed correctly.
3. **Backward Compatibility**:
* **Existing Processes**: All migrated processes with legacy Datepicker components will default to `Legacy Date` type. This preserves the original formatting and ensures no disruption in business rules or workflows.
* **New Processes**: Newly created processes will default to `Standard Date` type, saving values in ISO 8601 format.
***
### Migration process
1. **Legacy Datepickers**:
* Automatically flagged during migration.
* Continue to work with existing business rules.
* Require manual review for future updates to transition to the **Standard Date** format.
2. **Business Rules Updates**:
* Legacy Datepickers may require manual adjustments if associated business rules reference hardcoded date formats.
* Ensure that any dynamic dates used in business rules are compatible with the ISO 8601 standard.
3. **Standard Datepickers**:
* All new Datepicker components save date values directly in ISO 8601 format.
* Fully compatible with updated **Data Model** attributes, allowing seamless integration with external systems, adaptors, and reporting plugins.
### Considerations
* **Default Values**:
* For **Standard Datepickers**, the `defaultValue` must be in ISO 8601 format.
* Dynamic defaults can also be set using **Data Model** attributes or process data.
* **Data Model Integration**:
* All external and internal date attributes, including those used by adaptors or business rules, must be explicitly defined in the **Data Model**.
* **UI Designer Overrides**:
* Overrides can be applied to display dates differently for specific UI elements, ensuring flexibility for localized formatting.
### Recommendations for transition
* **Existing Processes**:
* Leave Datepicker components in `Legacy` mode unless business rules and workflows are updated to support ISO 8601.
* **New Processes**:
* Use `Standard Date` to ensure future compatibility and alignment with ISO 8601 formatting.
* **Documentation**:
* Review and update all timer expressions, adaptors, and external data feeds to use ISO 8601 format for consistency.
***
## Post-migration recommendations (v4.5.0)
For complex projects with multiple use cases, **do not use the default application for ongoing development or production builds**. Instead:
1. **Create Branches within the Default Application**: Organize and streamline resources by creating branches. This enables a lightweight build focused on production.
2. **Split the Default Application into Smaller Applications**: Use the import/export feature to separate the default application into individual applications by use case.
* **Note**: When importing processes into a new application, resource references may need to be manually reconfigured.
***
# Renderer SDKs
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.1-november-2024/migrating-from-v4.1.x-to-v4.5.1/renderers
This guide assists in migrating from FlowX v4.1.x to v4.5.1.
## Android SDK migration guide (v4.5.0)
### Initialization config changes
A new configuration parameter, named `locale` was added in order to improve formatting the dates, numbers and currencies.
When the SDK initialization happens through the `FlowxSdkApi.getInstance().init(...)` method, the argument has to be set inside the `config: SdkConfig` parameter value:
```kotlin theme={"system"}
FlowxSdkApi.getInstance().init(
...
config = SdkConfig(
baseUrl = "URL to FlowX backend",
imageBaseUrl = "URL to FlowX CMS Media Library",
enginePath = "some_path",
language = "en",
locale = Locale.getDefault(), // e.g. Locale("en", "US"), Locale("fr", "CA")
validators = mapOf("exact_25_in_length" to { it.length == 25 }),
enableLog = false,
),
...
)
```
### Changes when starting a Flowx process
Two new parameters were added:
| Name | Description | Type | Requirement |
| ----------------- | -------------------------------------------------------------------------------------- | --------------- | -------------------------------- |
| `applicationUuid` | The uuid string of the application containing the process to be started | `String` | Mandatory |
| `onProcessEnded` | Callback function where you can do additional processing when the started process ends | `(() -> Unit)?` | Optional. It defaults to `null`. |
```kotlin theme={"system"}
fun startProcess(
applicationUuid: String,
processName: String,
params: JSONObject = JSONObject(),
isModal: Boolean = false,
onProcessEnded: (() -> Unit)? = null,
closeModalFunc: ((processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
### Changes when resuming a Flowx process
One new parameter was added:
| Name | Description | Type | Requirement |
| ---------------- | ---------------------------------------------------------------------------------------- | --------------- | -------------------------------- |
| `onProcessEnded` | Callback function where you can do additional processing when the continued process ends | `(() -> Unit)?` | Optional. It defaults to `null`. |
```kotlin theme={"system"}
fun continueProcess(
processUuid: String,
isModal: Boolean = false,
onProcessEnded: (() -> Unit)? = null,
closeModalFunc: ((processName: String) -> Unit)? = null,
): @Composable () -> Unit
```
### Public API changes
The `changeLanguage` method has been updated and renamed to `changeLocaleSettings`, in order to accommodate the newly added `locale` config parameter:
```kotlin theme={"system"}
fun changeLocaleSettings(locale: Locale, language: String)
```
### Library dependencies updates
* **[Kotlin](https://kotlinlang.org/)**: 1.9.22 **↗** **1.9.24**
* **[Compose BOM](https://developer.android.com/jetpack/compose/bom/bom-mapping)**: 2024.02.00 **↗** **2024.06.00**
* **[Compose Compiler](https://developer.android.com/jetpack/androidx/releases/compose-compiler)**: 1.5.9 **↗** **1.5.14**
* **[Gson](https://github.com/google/gson)**: 2.10.1 **↗** **2.11.0**
***
## iOS SDK migration guide (v4.5.0)
### Initialization config changes
A new configuration parameter, named `locale` was added in order to improve formatting the dates, numbers and currencies.
The locale needs to be set on the `FXConfig.sharedInstance.configure` method
```swift theme={"system"}
FXConfig.sharedInstance.configure { (config) in
config.locale = "en-US"
...
}
```
### Changes when starting a process
Two new parameters were added on the 3 available start process methods:
| Name | Description | Type | Requirement |
| ----------------- | -------------------------------------------------------------------------------------- | --------------- | ------------------------------- |
| `applicationUuid` | The uuid string of the application containing the process to be started | `String` | Mandatory |
| `onProcessEnded` | Callback function where you can do additional processing when the started process ends | `(() -> Void)?` | Optional. It defaults to `nil`. |
```swift theme={"system"}
func startProcess(applicationUuid: String,
name: String,
params: [String : Any]?,
isModal: Bool = false,
showLoader: Bool = false,
completion: ((UIViewController?) -> Void)?,
onProcessEnded: (() -> Void)? = nil)
```
### Changes when resuming a Flowx process
One new parameter was added on the 3 available continue process methods:
| Name | Description | Type | Requirement |
| ---------------- | -------------------------------------------------------------------------------------- | --------------- | ------------------------------- |
| `onProcessEnded` | Callback function where you can do additional processing when the started process ends | `(() -> Void)?` | Optional. It defaults to `nil`. |
```swift theme={"system"}
func continueExistingProcess(uuid: String,
name: String,
isModal: Bool = false,
completion: ((UIViewController?) -> Void)? = nil,
onProcessEnded: (() -> Void)? = nil)
```
### Public API changes
The `changeLanguage` method has been updated and renamed to `changeLocaleSettings`, in order to accommodate the newly added `locale` config parameter:
```swift theme={"system"}
func changeLocaleSettings(locale: String?, language: String?)
```
***
## Angular SDK migration guide (v4.5.0)
### Renderer SDK component usage
In the Angular SDK, the `` component has two new parameters have been introduced: appInfo and locale. These additions help support localization and application-specific configurations.
* **appInfo**: Object containing an appId key, which identifies the application.
* **locale**: Provides region-specific settings for localization.
Add the definitions for these properties in the class file of the component that uses the process renderer component:
```typescript theme={"system"}
appInfo = { appId: 'your-app-id' },
locale = 'en-US',
```
Use these parameters in the template as inputs for the `` component:
```html theme={"system"}
```
### Icon module update
The `withExtraIconSet` method has been replaced with `provideExtraIconSet`, which should now be used in the providers array.
```typescript theme={"system"}
@NgModule({
imports: [
IconModule, // Import the IconModule
],
providers: [
// Use provideExtraIconSet to add your custom icon set
provideExtraIconSet({
customIcon1: 'path/to/custom-icon1.svg',
customIcon2: 'path/to/custom-icon2.svg',
// Add more icons as needed
})
]
})
export class AppModule {}
```
### Additional libraries
The following npm packages are now essential for handling date and input formatting:
```npm theme={"system"}
npm i date-fns inputmask
```
* date-fns
* inputmask
# FlowX.AI 4.5.1 Release Notes
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.1-november-2024/v4.5.1-november-2024
FlowX.AI 4.5.1 brings essential bug fixes and user experience improvements.
**Release Date:** 8th November 2024
## **What's new?** 🆕
The FlowX.AI 4.5.1 release brings several exciting updates and refinements, building on previous improvements and adding enhanced functionality to improve user experience and integration capabilities.
### Table
#### Theme Admin for Table
The new form in the Theme Admin provides an intuitive way to manage component styles directly within the UI, specifically enhancing control over table appearance. You can set a variety of visual properties for tables, such as padding, background colors, text styles, and border options, allowing precise customization without the need for extensive coding.
* **Common Properties**: Control foundational styling attributes like padding (both vertical and horizontal), spacing, radius, and background color.

* **Table Header Customization**: Adjust properties specific to table headers, including vertical padding, background color, title text style, and title color for a clean and professional look.

#### Preview Theme in UI Designer
You can now preview theme changes in real time within the UI Designer, including previews of the table component with the applied theme settings. This enhancement allows designers to visualize exactly how the configured theme will appear across various components, streamlining the review and approval process for a consistent and polished final look.

### Application permissions updates
**Permissions Enhancements**: Extended and updated user permissions provide a more flexible and secure way to manage access across different roles and functionalities. With this update, permissions are easier to configure, supporting both new setups and revised existing structures.
For more details, check out this section
### Integration Designer setup
* **New Configuration for Integration Designer**: A new configuration for handling integration topics is now available in the Integration Designer, allowing more granular control over integration flows and topic management.
Check the deployment guidelines for more details:
## **Changes** 🔧
* **UX Refinements**: Multiple user experience improvements, addressing minor design and workflow tweaks, make the platform more consistent and user-friendly.
## Additional information
For deployment guidelines, refer to:
# Deployment guidelines v4.5.2
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.2-november-2024/deployment-guidelines-v4.5.2
Do not forget, after upgrading to a new platform version, always ensure that your installed component versions match the versions specified in the release notes. To verify this, navigate to **FlowX.AI Designer > Platform Status**.
It is not possible to import old process definitions from versions earlier than v4.5.0

## Component versions
| Component | 4.5.2 | 4.5.1 | 4.5.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------------------- | ---------- | ------ | ------ | -------- | -------- | -------- | ------ | ------ | --------- | ---------- | --------- | --------- | --------- | ------- | ------ | ------ | ------ | ------- | ------ | ------ | ------ |
| **process-engine** | 7.4.1 | 7.4.1 | 7.3.5 | 6.1.6 | 6.1.4 | 6.1.3 | 6.1.2 | 6.0.3 | 5.10.3 | 4.3.5-2v11 | 4.3.5-2v6 | 4.3.5-2v2 | 4.3.5-2v1 | 4.3.5 | 4.3.2 | 4.3.1 | 4.1.0 | 3.6.0 | 2.2.1 | 2.1.2 | 2.0.7 |
| **admin** | **6.2.5** | 6.2.2 | 6.1.11 | 5.1.6 | 5.1.5 | 5.1.4 | 5.1.3 | 5.0.9 | 4.6.10 | 3.3.19-6 | 3.3.19-4 | 3.3.19-3 | 3.3.19-1 | 3.3.19 | 3.3.10 | 3.3.7 | 3.1.1 | 2.5.2 | 2.2.2 | 2.1.3 | 2.0.8 |
| **designer** | **5.21.4** | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-sdk** | **5.21.4** | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-toolkit** | **5.21.4** | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/ui-theme** | **5.21.4** | 5.18.0 | 5.9.8 | 4.17.1-5 | 4.17.1-3 | 4.17.1-2 | 4.17.1 | 4.17.1 | 4.0.1 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **@flowx/react-sdk** | **5.21.4** | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-theme** | **5.21.4** | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/react-ui-toolkit** | **5.21.4** | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-sdk** | **5.21.4** | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **@flowx/core-theme** | **5.21.4** | 5.18.0 | 5.9.8 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **paperflow-web-components** | - | - | - | - | - | - | - | - | 3.35.18-5 | 3.35.18-5 | 3.35.18-3 | 3.35.18-2 | 3.35.18-1 | 3.35.18 | 3.35.9 | 3.35.6 | 3.33.2 | 3.28.11 | 3.21.1 | 3.15.1 | 3.2.1 |
| **cms-core** | **4.1.15** | 4.1.10 | 4.1.6 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.1 | 2.2.5 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.9 | 1.3.6 | 1.3.0 | 1.2.0 | 1.0.3 | 1.0.2 |
| **scheduler-core** | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.2 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.0 | 2.1.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.2.4 | 1.1.0 | 1.0.4 | 1.0.4 | 1.0.4 | 1.0.1 |
| **events-gateway** | 4.0.4 | 4.0.4 | 4.0.4 | 3.0.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.4 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.0.6 | 1.0.2 | - | - | - |
| **notification-plugin** | **5.1.0** | 5.0.4 | 5.0.4 | 4.0.4 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.1 | 3.0.6 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.8 | 2.0.8 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.3 | 2.0.1 |
| **document-plugin** | **5.1.0** | 5.0.4 | 5.0.4 | 4.0.3 | 4.0.2 | 4.0.2 | 4.0.2 | 4.0.0 | 3.0.6 | 2.0.10-1 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.10 | 2.0.8 | 2.0.8 | 2.0.6 | 2.0.4 | 2.0.3 | 2.0.3 | 2.0.2 |
| **ocr-plugin** | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.17 | 1.0.15 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.8 | 1.0.8 | 1.0.2 | 0.1.33 | 0.1.33 |
| **license-core** | 4.1.3 | 4.1.3 | 4.1.3 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.2 | 3.0.0 | 2.0.5 | 1.1.0 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.7 | 1.0.4 | 1.0.2 | 1.0.2 | 1.0.2 | 1.0.1 |
| **task-management-plugin** | **6.0.8** | 6.0.5 | 6.0.1 | 5.0.5 | 5.0.4 | 5.0.4 | 5.0.4 | 5.0.2 | 4.0.5 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.0 | 2.1.2 | 1.0.4 | 1.0.4 | 1.0.1 |
| **data-search** | 3.1.2 | 3.1.2 | 3.1.2 | 2.0.5 | 2.0.4 | 2.0.4 | 2.0.4 | 2.0.3 | 1.0.6 | 0.2.8 | 0.2.8 | 0.2.8 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.6 | 0.2.3 | 0.2.0 | 0.1.4 | 0.1.4 | 0.1.3 |
| **audit-core** | 5.0.3 | 5.0.3 | 5.0.3 | 4.0.5 | 4.0.4 | 4.0.4 | 4.0.4 | 4.0.3 | 3.1.4 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.2.0 | 2.1.3 | 2.1.3 | 2.1.0 | 1.0.6 | 1.0.5 | 1.0.4 | 1.0.1 |
| **reporting-plugin** | 0.1.12 | 0.1.12 | 0.1.12 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.6 | 0.1.5 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.1.2 | 0.0.40 | 0.0.40 | 0.0.40 | 0.0.39 |
| **advancing-controller** | 3.0.3 | 3.0.3 | 3.0.3 | 2.0.3 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.0 | 1.1.4 | 0.3.5-1 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.5 | 0.3.2 | 0.3.0 | 0.1.4 | 0.1.4 | 0.1.2 |
| **integration-designer** | **1.5.0** | 1.4.3 | 1.3.9 | | | | | | | | | | | | | | | | | | |
| **application-manager** | **1.5.6** | 1.4.6 | 1.3.7 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **data-sync** | **1.4.0** | 1.3.6 | 1.3.5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **iOS renderer** | 4.0.2 | 4.0.2 | 4.0.2 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.20 | 3.0.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.3.0 | 2.1.0 | 2.0.1 | 2.0.0 | 2.0.0 |
| **Android renderer** | 4.0.0 | 4.0.0 | 4.0.0 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.23 | 3.0.0 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.1.4 | 2.0.1 | 2.0.1 | 2.0.1 | 2.0.1 |
Note: The same container image and Helm chart are used for **Application Manager** and **Runtime Manager**.
## AI Agents
| Component | 4.5.2 | 4.5.1 | 4.5.0 | 4.1.4 | 4.1.3 | 4.1.2 | 4.1.1 | 4.1 | 4.0 | 3.4.7 | 3.4.6 | 3.4.5 | 3.4.4 | 3.4.3 | 3.4.2 | 3.4.1 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 |
| ---------------- | ---------- | ----- | ----- | ----- | ----- | ----- | ----- | --- | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| **ai-designer** | **1.3.2** | 1.0.6 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-assistant** | **1.0.4** | 1.0.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-analyst** | **1.3.5** | 1.2.2 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **di-platform** | **1.0.12** | 1.0.4 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| **ai-developer** | **1.0.9** | 1.0.7 | 1.0.0 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
### Third-party recommended component versions
| FlowX.AI Platform Version | Component Name | Recommended Versions |
| ------------------------- | ----------------- | -------------------- |
| 4.5.2 | Keycloak | 22.x |
| 4.5.2 | Kafka | 3.2.x |
| 4.5.2 | PostgreSQL | 16.2.x |
| 4.5.2 | MongoDB | 7.0.x |
| 4.5.2 | Redis | 7.2.x |
| 4.5.2 | Elasticsearch | 7.17.x |
| 4.5.2 | OracleDB | 19.23.0.0.0 |
| 4.5.2 | Angular (Web SDK) | 17.x |
| 4.5.2 | React (Web SDK) | 18.x |
FlowX.AI supports the Recommended Versions of the prerequisite third-party components in the above table.
For optimal performance and reliability, our internal QA process validates new FlowX.AI releases using the latest Recommended Versions. While exploring alternative versions that suit your company's specific requirements, we recommend referring to the table above for guidance.
In the unlikely event that you encounter any compatibility issues with FlowX.AI, please open a support ticket [**here**](https://flowxai.zendesk.com/), and our dedicated team will address and resolve any identified bugs following our standard support process.
## Documents and notifications templates setup guides
### Runtime database integration
Both Notifications and Documents services now seamlessly connect to the runtime database.
Add the following environment variables:
* `SPRING_DATA_MONGODB_RUNTIME_ENABLED` - Enables Runtime MongoDB usage (default value: `true`)
* `RUNTIME_DB_USERNAME`: `app-runtime`
* `SPRING_DATA_MONGODB_RUNTIME_URI` - URI for connecting to the Runtime MongoDB instance - `app-runtime`
* `SPRING_DATA_MONGODB_STORAGE` - Specifies the storage type used for the Runtime MongoDB instance (Azure environments only)
* **Possible Values:** `mongodb`, `cosmosdb`
* **Default Value:** `mongodb`
### Data-sync service enhancements
Two new migrations added to the data-sync service.
Requires connectivity with Notifications and Documents databases for proper operation:
* `NOTIFICATIONPLUGIN_MONGO_USERNAME`: `mongodb-username` -> Represents the username for authenticating to the MongoDB database used by the Notifications Plugin.
* `NOTIFICATIONPLUGIN_MONGO_PASSWORD`: `mongodb-password` -> Represents the password associated with the `NOTIFICATIONPLUGIN_MONGO_USERNAME` for database access.
* `DOCUMENTPLUGIN_MONGO_USERNAME`: `mongodb-username` -> Represents the username for authenticating to the MongoDB database used by the Documents Plugin.
* `DOCUMENTPLUGIN_MONGO_PASSWORD`: `mongodb-password` -> Represents the password associated with the `DOCUMENTPLUGIN_MONGO_USERNAME` for database access.
* `FLOWX_DATASOURCE_DOCUMENTPLUGIN_URI`: Specifies the connection details for the MongoDB database used by the Documents Plugin.
* `FLOWX_DATASOURCE_NOTIFICATIONPLUGIN_URI`: Specifies the connection details for the MongoDB database used by the Notifications Plugin.
### Update default application
If you have already updated to **4.5.0** or **4.5.1**, ensure that you create at least one new version of the `default_application`(where all the process definitions from previous versions are migrated). This step verifies that your default application remains up to date with the latest changes:
1. Open the `default_application` in the UI.
2. Check for a **new version** (either draft or committed).
3. Ensure that there is a new version compared to the **committed version** that was automatically created during the migration from Release 4.5.0.
4. Save or commit a new version if necessary.
This step ensures your application configurations are aligned with the latest migration requirements.
# FlowX.AI 4.5.2 Release
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.2-november-2024/v4.5.2-november-2024
FlowX.AI 4.5.2 introduces table updates, performance improvements, enhanced plugin integrations, and essential bug fixes.
## **What's new?** 🆕
The FlowX.AI 4.5.2 release brings exciting updates focusing on performance, integration enhancements, and improved rendering capabilities to provide a more seamless and robust experience.
### Rendering updates
#### Table enhancements
The table component has been enhanced with several new customization options to provide greater control over its appearance and functionality:
* **Min-Max Cell Width**: Define precise minimum and maximum widths for table cells to ensure optimal layout and readability.
* **Header Text Alignment**: Customize the alignment of header text for better visual consistency across tables.

* **Padding and Spacing**: Fine-tune padding and spacing properties for both rows and columns to improve table design and usability.

* **"No Data" Message Customization**: Introduced the ability to set a custom system message (through `sys_table_empty` system substitution tag) for tables when no data is available, offering a more user-friendly experience.


***
### Performance improvements
Added significant optimizations to improve runtime efficiency and scalability:
* **Caching for Runtime Committed Builds**: Reduced runtime overhead with enhanced caching mechanisms, speeding up build deployments.
* **MongoDB Indexing**: Introduced indices for the MongoDB runtime, significantly improving database query performance.
* **Improved Data-Sync Support**: Enhanced data-sync service to support minor version releases, ensuring smoother version transitions and minimal downtime during upgrades.
***
### Plugin updates
#### Notifications & Documents plugins
Notifications and Documents plugins have been integrated as **application resources**.
**Deployment changes**: Added **Runtime Database Integration** and **Data-Sync Service Enhancements**
See the [**Deployment guidelines**](deployment-guidelines-v4.5.2#documents-and-notifications-templates-setup-guides) for more details.
***
## Bug fixes 🐞
* Addressed multiple rendering and core engine bugs to enhance system stability and user experience.
## **Changes** 🔧
* **UX Refinements**: Multiple user experience improvements, addressing minor design and workflow tweaks, make the platform more consistent and user-friendly.
## Additional information
For deployment guidelines, refer to:
# Migrating from older versions to v4.5.3
Source: https://docs.flowx.ai/release-notes/v4.x/v4.5.x/v4.5.3-november-2024/migrating-from-v4.1.x-to-v4.5.3/migrating-from-v4.1.x
This document outlines the configuration and infrastructure changes introduced from v4.1.x to v4.5.3 for deploying the FlowX.AI platform.
## 4.5.0 changes
### CMS Setup
#### MongoDB configuration
In version 4.5.0, the CMS setup includes a more comprehensive MongoDB configuration, especially for runtime data handling:
* **Runtime MongoDB Instance**: A dedicated MongoDB instance for managing runtime data.
* **New Environment Variables**:
* `SPRING_DATA_MONGODB_RUNTIME_ENABLED`: Enables runtime MongoDB usage. Default is `true`.
* `RUNTIME_DB_USERNAME`: Username for runtime MongoDB access.
* `SPRING_DATA_MONGODB_RUNTIME_URI`: Connection URI for the runtime MongoDB instance.
* `SPRING_DATA_MONGODB_STORAGE`: Specifies storage type for Azure environments (`mongodb` or `cosmosdb`). Default is `mongodb`.
* **Transaction Settings for Mongock Library**:
* `MONGOCK_TRANSACTIONENABLED`: Controls MongoDB transaction support with Mongock, defaulting to `false` due to compatibility concerns with MongoDB 5.
***
### Admin setup
#### MongoDB configuration
Version 4.5.0 introduces a new MongoDB setup in the Admin service for managing data model information:
* **New MongoDB Data Model Configuration**:
* **Environment Variables**:
* `SPRING_DATA_MONGODB_URI`: URI for connecting to the MongoDB data model instance.
* `DB_USERNAME`: Set to `data-model` for data model access.
* `SPRING_DATA_MONGODB_STORAGE`: Specifies storage type for Azure environments (`mongodb` or `cosmosdb`).
***
### Engine setup
#### MongoDB configuration
The Engine configuration now includes additional setup for a runtime MongoDB instance to manage runtime builds:
* **Runtime MongoDB for Engine**:
* **New Environment Variables**:
* `SPRING_DATA_MONGODB_RUNTIME_ENABLED`: Enables runtime MongoDB access. Default is `true`.
* `SPRING_DATA_MONGODB_RUNTIME_URI`: URI for connecting to the runtime MongoDB.
* `DB_USERNAME`: Set to `app-runtime` for runtime data access.
***
## 4.5.1 changes
In the 4.5.1 release, a new configuration option has been added to the Integration Designer for enhanced Kafka topic management.
* **New Configuration**: `FLOWX_WORKFLOW_CREATETOPICS`
* **When set to true**: In development environments, where Kafka topics may need to be created automatically, this configuration can be enabled (flowx.workflow\.createTopics: true). This allows for the automatic creation of "in" and "out" topics when workflows are created, eliminating the need to wait for topic creation at runtime.
* **Default setting (false)**: In production or controlled environments, where automated topic creation is not desired, this setting remains false to prevent unintended Kafka topic creation.
This update aims to streamline the development process by enabling faster setup of workflows with automatic Kafka topic creation in designated environments.
### Update default application
If you have already updated to **4.5.0** or **4.5.1**, ensure that you create at least one new version of the `default_application`(where all the process definitions from previous versions are migrated). This step verifies that your default application remains up to date with the latest changes:
1. Open the `default_application` in the UI.
2. Check for a **new version** (either draft or committed).
3. Ensure that there is a new version compared to