Changelog
io.Connect Desktop 10.1
Release date: 06.04.2026
| Components | Version |
|---|---|
| Electron | 40.8.3 |
| Chromium | 144.0.7559.236 |
| Node.js | 24.14.0 |
Breaking Changes
io.Insights
The
"defaultMetricsEnabled"property of the"metrics"object under the"otel"top-level key in thesystem.jsonsystem configuration file of io.Connect Desktop has been renamed to"platformMetricsEnabled":{ "otel": { "enabled": true, "metrics": { "enabled": true, "platformMetricsEnabled": true } } }
New Features
io.Insights - Traces, Metrics, Logs
io.Insights 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 of the io.Connect Desktop platform and the
@interopio/desktoplibrary has been added, which enables detailed observation of platform operations and API usage.ℹ️ For more details on trace instrumentation, see the Trace Instrumentation section of the io.Insights documentation.
Insights API
The
@interopio/otellibrary is now available and it provides an Insights API for publishing OpenTelemetry signals (metrics, traces, and logs) from your interop-enabled apps. It's designed to be used mainly as part of the@interopio/desktoplibrary and can be configured when initializing the@interopio/desktoplibrary in your interop-enabled apps. The Insights API is accessible via theio.insightsobject.The following example demonstrates initializing the Insights API and using it to publish a custom metric:
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 section of the io.Insights documentation.
Custom Metrics
The following custom metrics are now supported and you can publish them by using the Insights API in your interop-enabled apps:
Metric Instrument Type Description "custom_counter"CounterA monotonically increasing counter that tracks cumulative totals. Use the add()method to increment the metric value by a given amount."custom_gauge"GaugeA point-in-time measurement that records the current value. Use the record()method to report the current measurement."custom_histogram"HistogramA distribution of measurements aggregated into configurable buckets. Use the record()method to capture individual measurements."custom_observable_counter"ObservableCounterAsynchronous monotonically increasing counter. The OpenTelemetry SDK periodically invokes a provided callback to collect the current cumulative total. "custom_observable_gauge"ObservableGaugeAsynchronous point-in-time measurement. The OpenTelemetry SDK periodically invokes a provided callback to collect the current value. "custom_observable_up_down_counter"ObservableUpDownCounterAsynchronous bidirectional counter. The OpenTelemetry SDK periodically invokes a provided callback to collect a cumulative value that can increase or decrease. "custom_up_down_counter"UpDownCounterA 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 options available under the
"otel"top-level key in thesystem.jsonsystem configuration 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.The following example demonstrates how to enable publishing all supported OpenTelemetry signals and provide additional settings for io.Insights:
{ "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 section of the io.Insights documentation and the
otel.jsonschema.
Groups Visibility Operations in the Default Platform Mode
The group visibility operations (showing and hiding window groups) 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:
// 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 customUser-Agentrequest 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-Agentrequest header can be set globally by using the"userAgent"property of the"windows"top-level key in thesystem.jsonsystem configuration file of io.Connect Desktop, and per app by using the"userAgent"property of the"details"top-level key in the app definition.The following example demonstrates how to configure a custom
User-Agentrequest header globally by using the clean ChromiumUser-Agentstring and appending a custom suffix to it:{ "windows": { "userAgent": { "type": "chromium", "append": "MyCustomUserAgent" } } }The
"userAgent"object has the following properties:
Property Type Description "append"stringString to append to the end of the clean Chromium User-Agentstring. Valid only if"type"is set to"chromium". Use this to add custom tokens to the clean ChromiumUser-Agentstring."type""chromium" | "custom"Type of the User-Agentstring. If set to"chromium", will use the default ChromiumUser-Agentstring without the Electron token. If set to"custom", you must provide a custom string via the"value"property."value"stringCustom string to use for the User-Agentrequest header. Valid only if"type"is set to"custom". This value will replace the entire defaultUser-Agentstring.
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, set the"usernameCaseSensitive"property totrueunder the"gw"top-level key in thesystem.jsonsystem configuration file of io.Connect Desktop:{ "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
WorkingSetSizeas a fallback whenPrivateWorkingSetSizeisn't available on Windows.WorkingSetSizeincludes both private and shared resident pages, whereasPrivateWorkingSetSizeincludes 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.