# io.Connect Desktop 10.1

Source: https://docs.interop.io/desktop/getting-started/changelog/platform/10-1/index.html

## io.Connect Desktop 10.1

*Release date: 06.04.2026*

| Components | Version |
|------------|---------|
| Electron | [40.8.3](https://releases.electronjs.org/release/v40.8.3) |
| Chromium | 144.0.7559.236 |
| Node.js | 24.14.0 |

The following libraries are bundled with **io.Connect Desktop** 10.1 and will be used for [auto injection](https://docs.interop.io/desktop/getting-started/how-to/interop-enable-your-apps/javascript/index.md#auto_injection):

| Injected Library | Version |
|------------------|---------|
| [`@interopio/desktop`](https://www.npmjs.com/package/@interopio/desktop) | [6.19](https://docs.interop.io/desktop/getting-started/changelog/libraries/interopio-desktop/index.md#619-6190) |
| [`@interopio/fdc3`](https://www.npmjs.com/package/@interopio/fdc3) | 2.8 |

## Breaking Changes

> ### io.Insights
>
> The `"defaultMetricsEnabled"` property of the `"metrics"` object under the `"otel"` top-level key in the `system.json` [system configuration](https://docs.interop.io/desktop/developers/configuration/system/index.md) file of **io.Connect Desktop** has been renamed to `"platformMetricsEnabled"`:
>
> ```json
> {
>     "otel": {
>         "enabled": true,
>         "metrics": {
>             "enabled": true,
>             "platformMetricsEnabled": true
>         }
>     }
> }
> ```

## New Features

> ### io.Insights - Traces, Metrics, Logs
>
> [**io.Insights**](https://docs.interop.io/insights/general-overview/index.md) now publishes OpenTelemetry traces and logs and provides support for publishing custom metrics. This enables comprehensive observability of the platform and your interop-enabled apps, allowing you to monitor app and platform performance, diagnose issues, and analyze usage patterns through standard OpenTelemetry backends.
>
> #### Trace Instrumentation
>
> Extensive [trace instrumentation](https://docs.interop.io/insights/signals/traces/io-connect-desktop/index.md) of the **io.Connect Desktop** platform and the [`@interopio/desktop`](https://www.npmjs.com/package/@interopio/desktop) library has been added, which enables detailed observation of platform operations and API usage.
>
> > ℹ️ *For more details on trace instrumentation, see the [Trace Instrumentation](https://docs.interop.io/insights/signals/traces/io-connect-desktop/index.md) section of the **io.Insights** documentation.*
>
> #### Insights API
>
> The [`@interopio/otel`](https://www.npmjs.com/package/@interopio/otel) library is now available and it provides an Insights API for [publishing OpenTelemetry signals](https://docs.interop.io/insights/insights-api/javascript/index.md) (metrics, traces, and logs) from your interop-enabled apps. It's designed to be used mainly as part of the [`@interopio/desktop`](https://www.npmjs.com/package/@interopio/desktop) library and can be configured when initializing the `@interopio/desktop` library in your interop-enabled apps. The Insights API is accessible via the [`io.insights`](https://docs.interop.io/desktop/reference/javascript/insights/api/index.md) object.
>
> The following example demonstrates initializing the Insights API and using it to publish a custom metric:
>
> ```javascript
> import IODesktop from "@interopio/desktop";
>
> const config = {
>     insights: {
>         enabled: true,
>         metrics: {
>             enabled: true
>         }
>     }
> };
>
> const io = await IODesktop(config);
>
> const metricSettings = {
>     name: "myApp.orderCount",
>     type: "custom_counter",
>     enabled: true
> };
>
> const metric = io.insights.metrics.getFromSettings(metricSettings);
>
> metric.start();
> metric.add(1, { client: "ACME" });
> ```
>
> > ℹ️ *For more details on using the Insights API, see the [Insights API](https://docs.interop.io/insights/insights-api/javascript/index.md) section of the **io.Insights** documentation.*
>
> #### Custom Metrics
>
> The following [custom metrics](https://docs.interop.io/insights/signals/metrics/index.md#platform_metrics-custom_metrics) are now supported and you can publish them by using the [Insights API](https://docs.interop.io/insights/insights-api/javascript/index.md) in your interop-enabled apps:
>
> | Metric | Instrument Type | Description |
> |--------|-----------------|-------------|
> | `"custom_counter"` | `Counter` | A monotonically increasing counter that tracks cumulative totals. Use the `add()` method to increment the metric value by a given amount. |
> | `"custom_gauge"` | `Gauge` | A point-in-time measurement that records the current value. Use the `record()` method to report the current measurement. |
> | `"custom_histogram"` | `Histogram` | A distribution of measurements aggregated into configurable buckets. Use the `record()` method to capture individual measurements. |
> | `"custom_observable_counter"` | `ObservableCounter` | Asynchronous monotonically increasing counter. The OpenTelemetry SDK periodically invokes a provided callback to collect the current cumulative total. |
> | `"custom_observable_gauge"` | `ObservableGauge` | Asynchronous point-in-time measurement. The OpenTelemetry SDK periodically invokes a provided callback to collect the current value. |
> | `"custom_observable_up_down_counter"` | `ObservableUpDownCounter` | Asynchronous bidirectional counter. The OpenTelemetry SDK periodically invokes a provided callback to collect a cumulative value that can increase or decrease. |
> | `"custom_up_down_counter"` | `UpDownCounter` | A bidirectional counter that tracks quantities which can go up and down. Use the `add()` method with positive or negative values. |
>
> #### Platform Configuration
>
> The **io.Insights** [configuration](https://docs.interop.io/insights/configuration/io-connect-desktop/index.md) options available under the `"otel"` top-level key in the `system.json` [system configuration](https://docs.interop.io/desktop/developers/configuration/system/index.md) file of **io.Connect Desktop** have been extended with many new properties that allow better control and customization of the OpenTelemetry signals published by the platform. All available settings have been extracted into a new schema - [`otel.json`](https://docs.interop.io/desktop/assets/configuration/otel.json).
>
> The following example demonstrates how to enable publishing all supported OpenTelemetry signals and provide additional settings for **io.Insights**:
>
> ```json
> {
>     "otel": {
>         "enabled": true,
>         "metrics": {
>             "enabled": true,
>             "url": "http://localhost:4242/my-collector/metrics"
>         },
>         "traces": {
>             "enabled": true,
>             "url": "http://localhost:4242/my-collector/traces",
>             "filters": [
>                 {
>                     "source": "interopio.desktop.startup",
>                     "level": "DEBUG",
>                     "enabled": true
>                 },
>                 {
>                     "source": "#^interopio\\.api\\.notifications",
>                     "enabled": false
>                 }
>             ]
>         },
>         "logs": {
>             "enabled": true,
>             "url": "http://localhost:4242/my-collector/logs",
>             "filters": [
>                 {
>                     "severity": "ERROR",
>                     "enabled": true
>                 },
>                 {
>                     "categoryName": "system",
>                     "severity": "WARN",
>                     "enabled": true
>                 }
>             ]
>         }
>     }
> }
> ```
>
> > ℹ️ *For more details on all available configuration options for **io.Insights**, see the [Configuration > io.Connect Desktop](https://docs.interop.io/insights/configuration/io-connect-desktop/index.md) section of the **io.Insights** documentation and the [`otel.json`](https://docs.interop.io/desktop/assets/configuration/otel.json) schema.*

> ### Groups and Window Visibility Operations in the Default Platform Mode
>
> The [group visibility](https://docs.interop.io/desktop/capabilities/windows/window-management/javascript/index.md#window_groups-group_operations-visibility) and [window visibility](https://docs.interop.io/desktop/capabilities/windows/window-management/javascript/index.md#window_operations-visibility) operations (showing and hiding window groups and individual windows) are now available in the default platform mode. This implementation was previously missing in the default platform mode when the different platform modes were introduced with **io.Connect Desktop** 10.0:
>
> ```javascript
> // Hiding a window group.
> await myGroup.hide();
>
> // Showing a previously hidden window group.
> await myGroup.show(true);
> ```

> ### User Agent Configuration
>
> Besides a string value, the `"userAgent"` property for configuring a custom `User-Agent` request header now also accepts an object with settings as a value. You can use this object to specify the type of user agent (`"chromium"` or `"custom"`), a custom value, and an optional suffix to append.
>
> The `User-Agent` request header can be set globally by using the `"userAgent"` property of the `"windows"` top-level key in the `system.json` [system configuration](https://docs.interop.io/desktop/developers/configuration/system/index.md) file of **io.Connect Desktop**, and per app by using the `"userAgent"` property of the `"details"` top-level key in the [app definition](https://docs.interop.io/desktop/developers/configuration/application/index.md).
>
> The following example demonstrates how to configure a custom `User-Agent` request header globally by using the clean Chromium `User-Agent` string and appending a custom suffix to it:
>
> ```json
> {
>     "windows": {
>         "userAgent": {
>             "type": "chromium",
>             "append": "MyCustomUserAgent"
>         }
>     }
> }
> ```
>
> The `"userAgent"` object has the following properties:
>
> | Property | Type | Description |
> |----------|------|-------------|
> | `"append"` | `string` | String to append to the end of the clean Chromium `User-Agent` string. Valid only if `"type"` is set to `"chromium"`. Use this to add custom tokens to the clean Chromium `User-Agent` string. |
> | `"type"` | `"chromium" \| "custom"` | Type of the `User-Agent` string. If set to `"chromium"`, will use the default Chromium `User-Agent` string without the Electron token. If set to `"custom"`, you must provide a custom string via the `"value"` property. |
> | `"value"` | `string` | Custom string to use for the `User-Agent` request header. Valid only if `"type"` is set to `"custom"`. This value will replace the entire default `User-Agent` string. |

> ### io.Connect Gateway Username Case Sensitivity
>
> The io.Connect Gateway treats usernames as case-insensitive by default, allowing clients authenticated with different letter casing (e.g., `"JohnDoe"` and `"johndoe"`) to connect and interoperate seamlessly. To instruct the io.Connect Gateway to [treat usernames as case-sensitive](https://docs.interop.io/desktop/developers/configuration/system/index.md#ioconnect_gateway-username_case_sensitivity), set the `"usernameCaseSensitive"` property to `true` under the `"gw"` top-level key in the `system.json` [system configuration](https://docs.interop.io/desktop/developers/configuration/system/index.md) file of **io.Connect Desktop**:
>
> ```json
> {
>     "gw": {
>         "configuration": {
>              "authentication": {
>                  "basic": {
>                      "usernameCaseSensitive": true
>                  }
>              }
>         }
>     }
> }
> ```

## Improvements & Bug Fixes

> - Upgraded to Electron 40.8.3 (Chromium 144).
>
> - Improved username handling when publishing OpenTelemetry signals via **io.Insights**.
>
> - Improved process memory reporting by using `WorkingSetSize` as a fallback when `PrivateWorkingSetSize` isn't available on Windows. `WorkingSetSize` includes both private and shared resident pages, whereas `PrivateWorkingSetSize` includes only private resident pages.
>
> - Updated the FDC3 implementation to version 2.8.4.
>
> - Fixed an issue related to using right-click context menu in the Dev Tools.
