Skip to main content

Changelog

io.Connect Desktop 10.5.1

Release date: 19.10.2026

Components Version
Electron 44.4.5
Chromium 152.0.7977.130
Node.js 24.21.0

The following libraries are bundled with io.Connect Desktop 10.5.1 and will be used for auto injection:

Injected Library Version
@interopio/desktop 6.23.2
@interopio/fdc3 2.11

New Features

Native App Windows in Global Layouts

⚠️ Note that this feature is available only on Windows.

⚠️ Note that this feature is valid only for apps of type "exe".

⚠️ Note that window tracking is available only for apps with "trackingType" set to "Process" (default).

It's now possible to save and restore in Global Layouts the windows of native apps that don't use io.Connect APIs. When window tracking is enabled for an app of type "exe", io.Connect Desktop finds the window created by the app process and applies to it the "left", "top", "width", "height", and "windowStyle" properties specified in the app definition. The bounds and the state (normal, maximized, or minimized) of the window are saved in Global Layouts and restored when the Layout is restored.

The "allowMultiple" top-level key for controlling the starting of multiple app instances and the "reuseInLayouts" top-level key for reusing app instances when restoring Global Layouts are supported.

When the app is stopped by the platform (e.g., when switching between Global Layouts or on platform shutdown), its window is closed instead of terminating the app process.

To enable tracking of a native app window, use the "externalWindowTracking" property of the "details" top-level key in the app definition:

{
    "name": "my-exe-app",
    "title": "My EXE App",
    "type": "exe",
    "details": {
        "path": "%IO_CD_ROOT_DIR%/../MyApp/",
        "command": "MyApp.exe",
        "externalWindowTracking": {
            "enabled": true,
            "title": {
                // The splash screen of the app will be ignored.
                "include": ["My App.*"],
                "exclude": ["Loading.*"]
            }
        }
    }
}

The "externalWindowTracking" object has the following properties:

Property Type Description
"adoptExisting" boolean If true, the platform will search for the app window in all running processes by using the filters specified in the "title" and "windowClass" properties. Use this for apps whose started process exits after passing the window to another process that may already be running (e.g., Microsoft Office apps). Only a window that appears after the app has been started will be tracked. The platform can't determine which process has created the window, so if another window matching the filters appears during the search, it may be tracked instead. To avoid this, use specific patterns. The app will be considered stopped when its window is closed. Defaults to false.
"closeTimeout" number Interval in milliseconds to wait for the app window to close when the app is stopped by the platform. If the window doesn't close within this interval (e.g., because the app prompts the user to save changes), the app process won't be terminated, but it will no longer be tracked by the platform. Defaults to 1000.
"enabled" boolean If true, will enable tracking the app window. Defaults to false.
"includeChildren" boolean If true, the platform will also search for the app window in the child processes of the started process. Use this for apps started via a launcher or a script that creates the app window in a child process. The app will be considered stopped when its window is closed. Defaults to false.
"title" object Filters for finding the app window by its title. Required if "adoptExisting" is set to true and no "include" patterns are specified in "windowClass".
"windowClass" object Filters for finding the app window by its window class name. Required if "adoptExisting" is set to true and no "include" patterns are specified in "title".
"windowSpawnTimeout" number Interval in milliseconds to wait for the app window to appear after the app has been started. If the window doesn't appear within this interval, only the app process will be tracked. If "includeChildren" or "adoptExisting" is set to true, the app will fail to start instead. Defaults to 20000.

The "title" and "windowClass" objects have "include" and "exclude" properties, each accepting a list of case-insensitive regular expressions that must match the entire window title or class name. The window must match at least one of the patterns in "include" (if any), and must not match any of the patterns in "exclude". If any filters are specified, only visible windows will be considered. If a pattern is invalid, the app will fail to start.

⚠️ Note that the tracked windows aren't io.Connect Windows and can't participate in window groups or Workspaces.

Improvements & Bug Fixes

  • Improved the initialization time of apps that use the App Management API in "full" mode when io.Insights traces are enabled. The event handler methods on an Application instance are now always invoked before the handlers for the same event available at top level of the API on the io.appManager object.

  • Fixed an issue on Windows in the advanced platform mode where the windows in a newly opened Workspaces App instance didn't receive keyboard focus until the user clicked in them.

  • Fixed an issue on macOS where a system prompt for reopening the windows of the platform was displayed on every platform start and blocked the startup until the user responded to it.

  • Fixed an issue with the local Layout store where a renamed Layout could be reported as removed and become unavailable.