> For the complete documentation index, see [llms.txt](https://docs.eximee.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.eximee.com/documentation/documentation-en/zarzadzanie-aplikacja-biznesowa/zarzadzanie-konfiguracja/konfiguracja-aplikacji-biznesowej-serwer-konfiguracji/konfiguracja-z-poziomu-low-code.md).

# Low-code configuration

The configuration definition is available in the module **Application** Eximee Designer.

{% hint style="info" %}
Applications that use the configuration server to retrieve configuration must have configured [Data model](/documentation/documentation-en/budowanie-aplikacji/model-danych.md) and a set starting point.
{% endhint %}

When you go to the selected application's window, the left panel contains the tab **Configuration,** and in the right window **Configuration Editor**:

<figure><img src="https://2112972046-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2CssJT0zIo4SJQLbSZ6l%2Fuploads%2FVaNX5cnpjiN6710a4kIR%2Fimage.png?alt=media&amp;token=cf881ce2-a592-4191-8649-05daecac7ae0" alt=""><figcaption><p><em><strong>Figure 1.</strong> Configuration from Eximee Designer - Configuration tab</em></p></figcaption></figure>

## Configuration format <a href="#konfiguracjazpoziomulowcode-formatkonfiguracji" id="konfiguracjazpoziomulowcode-formatkonfiguracji"></a>

Configurations are defined in the format: key = value

### Setting the environment <a href="#konfiguracjazpoziomulowcode-ustaleniesrodowiska" id="konfiguracjazpoziomulowcode-ustaleniesrodowiska"></a>

Additionally, it is possible to specify the environment for which a given setting will be available by adding a suffix to the key **|${environment\_key}** e.g.

application.logi&#x6E;**|prod**=keyValue

Such a setting will by default be available only for the environment marked as "prod".

We can specify the environment using the ENV - **CONFIG\_SERVER\_ENVIRONMENT\_NAME** in the configuration server application.

{% hint style="warning" %}
**CONFIG\_SERVER\_ENVIRONMENT\_NAME** It is an environment parameter of the configuration server application itself (config-server), not a setting of the business application. It is configured by the team responsible for deploying the platform — it cannot be set from Eximee Designer or Eximee Dashboard.
{% endhint %}

If there is no key suffix for the current environment, the values without a specified suffix are used.

### Comments <a href="#konfiguracjazpoziomulowcode-komentarze" id="konfiguracjazpoziomulowcode-komentarze"></a>

In the configuration editing window, it is possible to add comments within the configuration content. Comments should start with **a new line**, and the comment text should be preceded by the symbol **hash (#)**.

### **Definition of roles authorized to edit in Eximee Dashboard** <a href="#konfiguracjazpoziomulowcode-definicjaroluprawniajacychdoedycjiweximeedashboard" id="konfiguracjazpoziomulowcode-definicjaroluprawniajacychdoedycjiweximeedashboard"></a>

{% hint style="warning" %}
Please remember that in addition to defining roles in Eximee Designer that are authorized to edit a specific configuration in Eximee Dashboard, the Eximee Dashboard user must have an assigned role with the permission **feature\_config\_edit**, which gives access to the "Application configuration" tab.
{% endhint %}

Along with the configuration in Eximee Designer, you can define roles that will allow editing the configuration [runtime](/documentation/documentation-en/zarzadzanie-aplikacja-biznesowa/zarzadzanie-konfiguracja/konfiguracja-aplikacji-biznesowej-serwer-konfiguracji/modyfikacja-runtime-konfiguracji-biznesowych.md) in Eximee Dashboard. If no roles are defined in the application configuration in Eximee Designer, editing the application configuration from Eximee Dashboard will not be available to any user.

Role definitions can be specified in the "Roles authorized to edit in Eximee Dashboard" field above the configuration editor in Eximee Designer.

If the configuration server application has the AUTH\_ROLE\_STRIP\_PREFIX parameter defined, then the specified role prefix should be omitted in list items.\
So if AUTH\_ROLE\_STRIP\_PREFIX = "PDC000000001-" and the role is called "PDC000000001-config-editor-role", then in the list in Eximee Designer you should specify "config-editor-role".

{% hint style="warning" %}
Similarly to **CONFIG\_SERVER\_ENVIRONMENT\_NAME**, the parameter **AUTH\_ROLE\_STRIP\_PREFIX** is a configuration server application setting configured on the platform side, not by the low-code developer.
{% endhint %}

\
Modifying configuration in Eximee Dashboard: [Modification (runtime) of business configurations](/documentation/documentation-en/zarzadzanie-aplikacja-biznesowa/zarzadzanie-konfiguracja/konfiguracja-aplikacji-biznesowej-serwer-konfiguracji/modyfikacja-runtime-konfiguracji-biznesowych.md)

{% hint style="warning" %}
Values overridden from Eximee Dashboard are not visible in the configuration editor in Eximee Designer.
{% endhint %}

<figure><img src="https://2112972046-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2CssJT0zIo4SJQLbSZ6l%2Fuploads%2Fm7Ix0jsZyOEi6eJ0e1Q7%2Fimage.png?alt=media&amp;token=ea671130-6f8b-49ca-86d1-128ad08a1bf8" alt=""><figcaption><p><em><strong>Figure 2.</strong> Configuration from Eximee Dashboard - "Application configuration" tab</em></p></figcaption></figure>

### Configuration example <a href="#konfiguracjazpoziomulowcode-przykladkonfiguracji" id="konfiguracjazpoziomulowcode-przykladkonfiguracji"></a>

CONFIG\_SERVER\_ENVIRONMENT\_NAME = **dev**

Configuration content:

```editorconfig
# Enables the developer tools panel in the application - it should be active only in the dev environment, never in production
devtools.enabled=false
devtools.enabled|dev=true

# Maximum number of retries for calling the external service used by the request
retry.maxAttempts=3
```

Config server for the environment **dev** will return 2 configurations (without suffix):

```editorconfig
devtools.enabled=true

retry.maxAttempts=3
```

Value **devtools.enabled** has a defined suffix **|dev**, so for this environment the value from it is returned (`true`) - the mechanism is active only on dev, and on other environments, including production, it remains disabled (`false`). The value **retry.maxAttempts** does not have a defined environment suffix, so regardless of the environment the same default value is returned.

### **Editing configuration** <a href="#konfiguracjazpoziomulowcode-edycjakonfiguracji" id="konfiguracjazpoziomulowcode-edycjakonfiguracji"></a>

Editing the configuration locks the application artifact, which is why new artifacts cannot be added to it, e.g. a process or a form. However, an attempt to add such an artifact **will create it in the repository**, but **it will not be attached** to the application artifact.<br>

In the case of syntax errors in the configuration (e.g. for a configuration of type PROPERTIES, invalid Unicode is provided), an error will occur when saving the configuration, which will have the general form of errors that occur when saving an artifact:

<figure><img src="https://2112972046-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2CssJT0zIo4SJQLbSZ6l%2Fuploads%2FaHK7fwJ6iHMp5m3PxsJ8%2Fimage.png?alt=media&amp;token=4a896e0a-1cb9-4338-a572-c50967e2f43f" alt=""><figcaption><p><em><strong>Figure 3.</strong> Error when saving an invalid application configuration</em></p></figcaption></figure>

The user will remain in edit mode and will be able to correct any syntax errors and try saving the configuration again.

### Using values from configuration in ScriptCode <a href="#konfiguracjazpoziomulowcode-uzyciewartoscizkonfiguracjiwscriptcode" id="konfiguracjazpoziomulowcode-uzyciewartoscizkonfiguracjiwscriptcode"></a>

In ScriptCode, we can retrieve a value from the configuration using the configuration retrieval API:\
\
API:

```typescript
interface Api {
    config: {
        v1: {
          get(klucz: string): string;
          getOrDefault(klucz: string, defaultValue: string): string;
        }
    }
}

```

{% hint style="danger" %}
If the specified key does not exist in the configuration, the method **get()** throws an exception. To prevent a missing configuration from causing an error on the request, handle this case with **try/catch** or, when a default value makes sense for a given parameter, use the method **getOrDefault()** — it does not throw an exception and always returns the given default value if the key is not found.
{% endhint %}

example script using the API:

```javascript
function callService(context) {
    let serviceUrl;
    try {
        serviceUrl = api.config.v1.get("service.url");
    } catch(e) {
        serviceUrl = "defaultServiceUrl";
    }

    const timeoutSeconds = api.config.v1.getOrDefault("service.timeout", "30");

    return [{'serviceUrl': serviceUrl, 'timeoutSeconds': timeoutSeconds}];
}

```

{% hint style="info" %}
The API also works for script calls in the data model.
{% endhint %}

The editor also offers suggestions:

<figure><img src="https://2112972046-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2CssJT0zIo4SJQLbSZ6l%2Fuploads%2FzftSGgEOhkY1lh4hjSTW%2Fimage.png?alt=media&amp;token=4d348171-f8c9-4d38-8c30-21cdc4a0c482" alt=""><figcaption><p><em><strong>Figure 4.</strong> Example of suggestions while typing code</em></p></figcaption></figure>

#### Using values from configuration in a script task <a href="#konfiguracjazpoziomulowcode-uzyciewartoscizkonfiguracjiwzadaniuskryptowym-przykladowezadanieskrytowe" id="konfiguracjazpoziomulowcode-uzyciewartoscizkonfiguracjiwzadaniuskryptowym-przykladowezadanieskrytowe"></a>

Example script task:

```javascript
function handle(task, context) {
    // Retrieving variables from the configuration
    const skipTask = api.config.v1.getOrDefault("script.task.skip.task", "false")
    const titleName = api.config.v1.getOrDefault("script.task.title.name", "Default title")
     
    // Completing the task and passing variables (skipTask, titleName) to the process
    context.complete({'skipTask': skipTask, 'titleName': titleName});
}
```

use in the process:

<figure><img src="https://2112972046-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2CssJT0zIo4SJQLbSZ6l%2Fuploads%2FSUcYUkvko5NETFnZ1Ab5%2Fimage.png?alt=media&amp;token=59af233c-c457-4500-bb02-966c0a2951c7" alt=""><figcaption><p><em><strong>Figure 5.</strong> Example of using values from configuration in the process</em></p></figcaption></figure>

As a result, the values from the configuration will be passed to the process and saved under the keys: skipTask and titleName.

{% hint style="info" %}
Business configuration in Eximee: [Business Application Configuration](https://eximee.com/business-application-configuration/)
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.eximee.com/documentation/documentation-en/zarzadzanie-aplikacja-biznesowa/zarzadzanie-konfiguracja/konfiguracja-aplikacji-biznesowej-serwer-konfiguracji/konfiguracja-z-poziomu-low-code.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
