> For the complete documentation index, see [llms.txt](https://docs.bluefletch.com/bluefletch-enterprise/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.bluefletch.com/bluefletch-enterprise/product-guides/bluefletch-launcher/technical-guide/configuration-structure-new.md).

# Configuration Structure (new)

## Overview

BlueFletch Launcher 4 updates its configuration structure to improve flexibility, usability, and consistency. Configurations for all BF apps are now centralized within **`appConfig`**, while **`applicationObjects`** introduce reusable variables to boost efficiency. These updates simplify configuration management, reducing complexity and improving the organization of applications and layout items.

The **`appConfig`** block standardizes how app-specific options are structured and managed, allowing users to add new configuration options without requiring frequent Launcher updates. The **`applicationObjects`** block, on the other hand, enables users to configure layout items as reusable variables, eliminating the need to duplicate them across multiple layouts.

## Application Configurations (appConfig)

The **`appConfig`** section consolidates all configurations for individual applications, including:

* `emsSupportTool`
* `bfChat`
* `keyboard`
* `browser`
* `epmConfig`
* `remoteControl`
* `deviceFinder`&#x20;
* `bfCustomTabs`

This allows new configuration options to be added to applications and accessed immediately, without requiring a Launcher upgrade. Additionally, configurations are now standardized with a consistent naming convention.

To configure your BlueFletch applications in Launcher 4, follow these steps to migrate existing configurations into the new **`appConfig`** section:

1. Create an **`appConfig`** JSON object in your launcher.json file.
2. Identify and copy all existing BlueFletch application configurations into the **`appConfig`** section.
3. Rename each object according to the new naming convention.

The table below shows how legacy configuration names are mapped to new names within the **`appConfig`** section.

| Legacy Configuration Names              | Launcher 4 Configuration Names                                                 |
| --------------------------------------- | ------------------------------------------------------------------------------ |
| <p>"emsSupportTool": {<br>...<br>},</p> | <p>"appConfig": {<br>"bfSupportAgent" : {<br>...<br>},<br>},</p>               |
| <p>"bfChat": {<br>...<br>},</p>         | <p>"appConfig": {<br>"bfChat" : {<br>...<br>},<br>},</p>                       |
| <p>"keyboard": {<br>...<br>},</p>       | <p>"appConfig": {<br>"bfKeyboard" : {<br>...<br>},<br>},</p>                   |
| <p>"browser": {<br>...<br>},</p>        | <p>"appConfig": {<br>"bfBrowser" : {<br>...<br>},<br>},</p>                    |
| <p>"epmConfig": {<br>...<br>},</p>      | <p>"appConfig": {<br>"bfEpmConfig" : {<br>...<br>},<br>}<code>,</code></p>     |
| <p>"remoteControl": {<br>...<br>},</p>  | <p>"appConfig": {<br>"bfRemoteControl" : {<br>...<br>},<br>}<code>,</code></p> |
| <p>"deviceFinder": {<br>...<br>}</p>    | <p>"appConfig": {<br>"bfDeviceFinder" : {<br>...<br>},<br><code>},</code></p>  |

#### The legacy configuration for application configurations looked like this:

```json
"emsSupportTool": {
    ...
},
"bfChat": {
    ...
},
"keyboard": {
    ...
},
"browser": {
    ...
},
"epmConfig": {
    ...
},
"remoteControl": {
    ...
},
"deviceFinder": {
    ...
}

```

In Launcher 4, the new **`appConfig`** section is defined as follows:

```json
"appConfig": {
    "bfSupportAgent" : {
      "eventUrl" : "https://ems-pb-api.bluefletch.com/eventsAPI/apiv1/",
      "logUrl" : "https://ems-pb-api.bluefletch.com/",
      "orgId": "YOUR_ORG_ID",
      "findMeAlarmVolume": 100,
      "findMeLowBatteryAlarmVolume": 100,
      "reportSystemApps": false
    },
    "bfChat" : {
      "apiKey": "",
      "dataHost": "",
      "chatHost": "",
      "fileHost": "",
      "autoPlayAudio": true,
      "allowAttachments": true,
      "enableOfflinePresence": true
    },
    "bfKeyboard": {
      "hapticFeedback" : "hapticClick",
      "bigButtonText" : false,
      "alphanumeric" : false,
      "keyPreview" : false
    },
    "bfBrowser": {
      "showUrl" : false,
      "showTitle" : false,
      "allowCookiePreview" : false,
      "fixOrientation" : false,
      "allowUrlEdit" : false,
      "defaultHomepage" : ""
    },
    "bfEpmConfig": {
      ...
    },
    "bfRemoteControl": {
      ...
    },
    "bfDeviceFinder": {
      ...
    },
    "bfCustomTabs": {
      ...
    }
  }
```

### App Configurations New to Launcher 4

BlueFletch has also introduced new app configuration objects in releases of Launcher 4 that did not have corollaries in Launcher 3.

#### **bfCustomTabs**

Configures settings for Chrome Custom Tab (CCT) instances

| Key                 | Data Type | Description                                                                                                                                                                               |
| ------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| browserPackage      | String    | Full package name of the target CCT browser (e.g. `com.android.chrome`, `com.microsoft.emmx`). If the listed package is not installed, Launcher falls back to the system default browser. |
| shareState          | String    | Controls the presence of the CCT "Share" button. Valid options are "on", "off", and "default".                                                                                            |
| bookmarksEnabled    | Boolean   | To show the "Bookmarks" button, set to `true`; to hide the button, set to `false`.                                                                                                        |
| downloadsEnabled    | Boolean   | To show the "Downloads" button, set to `true`; to hide the button, set to `false`.                                                                                                        |
| urlBarHidingEnabled | Boolean   | To hide the URL bar, set to `true`; to leave the URL bar available set to `false`.                                                                                                        |
| showTitle           | Boolean   | If `true`, replaces the URL bar with a page title. If `false`, the URL bar remains.                                                                                                       |
| useBackArrowClose   | Boolean   | If `true`, replaces the default "Close" \[X] button with a Back arrow icon. If `false`, the default "Close" button remains.                                                               |

**Example:**

<pre class="language-json"><code class="lang-json"><strong>"appConfig": {
</strong>    "bfCustomTabs": {
      "browserPackage": "com.microsoft.emmx",
      "shareState": "off",
      "bookmarksEnabled": false,
      "downloadsEnabled": false,
      "urlBarHidingEnabled": true,
      "showTitle": true,
      "useBackArrowClose": true
    }
}
</code></pre>

## Application Objects (**applicationObjects)**

The **`applicationObjects`** section enables users to define reusable app or layout configurations as key-value pairs in the launcher.json file. Once defined, these variables can be referenced across multiple layout groups, eliminating the need to copy and paste configuration blocks.

To create key-value pairs in the launcher.json file and reference them in layout groups, follow these steps:

1. Use the **`applicationObjects`** section to create a key (e.g., chatApp) and store reusable app or layout configurations.
2. Use the **`appObjectKey`** field in layout groups (e.g., AssociateApps or ManagerApps) to reference the key. Please see sample configuration [here](https://docs.bluefletch.com/bluefletch-enterprise/product-guides/bluefletch-launcher/configurable-layouts/layouts).
3. Override the label field in layout groups to provide unique labels for each reference.

#### Using Chat App as an example: Specify its package name, label, description, etc.

```json
"applicationObjects": {
"chatApp": {
   "package": "com.bluefletch.staging.chat",
   "label": "Chat Label Will Be Overridden In Figure Below",
   "dateModified": "2024-10-03 10:10:10 UTC",
   "description": "describe the app here, reference info only for portal"
   }
}
```

#### Using Camera App as an example: Specify a label, URL, browser package, and browser-specific overrides.

```json
"applicationObjects": {
"cameraApp": {
   	"label": "Camera Test",
   	"url": "https://usefulangle.com/demos/352/camera-capture-photo.html",
   	"browser": "com.bluefletch.ems.staging.browser",
   	"browserOverrides": {
     	"showTitle": true,
     	"showUrl": true,
     	"fixOrientation": true,
     	"allowCameraAccess": true
   }
}
```

### Configuring Layout Groups with Variables

Once application variables are specified, they can be referenced in layout groups using the **`appObjectKey`** field. This approach allows you to reuse the same configuration across multiple groups without duplicating the entire block.

Below is an example of using the **`chatApp`** application variable in the AssociateApps and ManagerApps layout groups:

```json
"AssociateApps": [
  {
    "appObjectKey": "chatApp",
    "label": "Associate Chat"
  }
],
"ManagerApps": [
  {
    "appObjectKey": "chatApp",
    "label": "Manager Chat"
  }
]
```

{% hint style="info" %}
Application Configuration was introduced in Launcher 4.\
Application Objects was introduced in Launcher 4.
{% 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.bluefletch.com/bluefletch-enterprise/product-guides/bluefletch-launcher/technical-guide/configuration-structure-new.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
