Changelog

io.Connect Browser 4.3

Release date: 03.04.2026

Versions of all main and additional libraries of io.Connect Browser for the current release:

Library Version
@interopio/browser 4.3
@interopio/browser-platform 4.3
@interopio/browser-worker 4.3
@interopio/cli 4.3
@interopio/fdc3 2.9
@interopio/home-ui-react 4.3
@interopio/intent-resolver-ui 4.3
@interopio/modals-api 4.3
@interopio/modals-ui 4.3
@interopio/ng 6.2
@interopio/react-hooks 4.3
@interopio/search-api 3.3
@interopio/theme 4.3
@interopio/widget 3.3
@interopio/workspaces-api 4.3
@interopio/workspaces-ui-react 4.3
@interopio/workspaces-ui-web-components 4.3

⚠️ Note that in this release the major version of some of the libraries has been incremented only for release purposes and procedural consistency, not due to breaking changes in the respective libraries.

New Features

⚠️ Note that each new feature is listed under all libraries it affects.

@interopio/browser

Retrieving App Definitions

To retrieve the full app definition of an app, use the getConfiguration() method of the Application instance:

const definition = await myApp.getConfiguration();

console.log(`Retrieved definition for app "${definition.name}".`);

@interopio/browser-platform

Fetching Platform Configuration from io.Manager

You can now supply a remote platform configuration from io.Manager.

To instruct the platform to fetch its configuration from io.Manager, pass a RemoteConfigFromManager object and set its type property to "manager" when initializing the @interopio/browser-platform library:

import IOBrowserPlatform from "@interopio/browser-platform";

const config = {
    // Must be set to `"manager"`.
    type: "manager",
    managerURL: "https://my-io-manager.com:4242/api",
    // Optional function for modifying the fetched configuration before the platform initializes.
    modifyConfig: (config) => {
        config.licenseKey = "my-license-key";

        return config;
    }
};

const { io } = await IOBrowserPlatform(config);

The RemoteConfigFromManager object has the following properties:

Property Type Description
enableCache boolean If true (default), will enable persisting locally the platform configuration fetched from io.Manager.
fetchTimeoutMs number Interval in milliseconds to wait for fetch requests sent to io.Manager to complete. Defaults to 30000.
managerURL string Required. URL pointing to the io.Manager REST API.
modifyConfig function Function that receives the fetched configuration as an argument. Use this to modify the configuration before the platform initializes.
platformVersion string Exact platform version for which to fetch configuration from io.Manager. Defaults to the current platform version.
type "manager" Required. Must be set to "manager".

Managing Preferences for Apps Without Definitions

You can now use "all" as a value for the validNonExistentApps property to control the validation behavior of the App Preferences API when saving preferences for apps. Use "all" to disable validation entirely, allowing preferences to be saved for any app name without checking whether the app exists in the app store.

The following example demonstrates how to disable app validation entirely:

import IOBrowserPlatform from "@interopio/browser-platform";

const config = {
    licenseKey: "my-license-key",
    applicationPreferences: {
        validNonExistentApps: "all"
    }
};

const { io } = await IOBrowserPlatform(config);

Retrieving App Definitions

Added support for retrieving the full app definition of an app by using the getConfiguration() method of an Application instance.

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 of the authentication object to true under the gateway top-level key in the platform configuration:

import IOBrowserPlatform from "@interopio/browser-platform";

const config = {
    licenseKey: "my-license-key",
    gateway: {
        authentication: {
            usernameCaseSensitive: true
        }
    }
};

const { io } = await IOBrowserPlatform(config);

io.Bridge Configuration

The io.Bridge configuration has been extended with settings for Interop server filtering for visibility rules and platform announce interval.

Interop Server Filtering for Visibility Rules

The visibility rules for the Interop API now support an identity filter that enables more granular control over the visibility of Interop methods. Each key in the identity filter can be any property of the Instance object exposed by the Interop API. An Interop server will be matched only if all specified filter entries match against its identity. Using the identity filter in combination with the method filter is useful when several Interop servers have registered an Interop method with the same name:

import IOBrowserPlatform from "@interopio/browser-platform";

const config = {
    licenseKey: "my-license-key",
    gateway: {
        bridge: {
            url: "https://my-io-bridge.com",
            interop: {
                visibility: [
                    // Restrict the Interop methods registered by a specific app to the local platform.
                    { identity: { application: "my-private-app" }, restrictions: "local" }
                ]
            }
        }
    },
    user: {
        id: "user-id"
    }
};

const { io } = await IOBrowserPlatform(config);

Announce Interval

To configure the interval at which the platform announces itself to io.Bridge to keep the connection alive, use the announceIntervalMS property of the bridge object. The default value is 60000 (60 seconds):

import IOBrowserPlatform from "@interopio/browser-platform";

const config = {
    licenseKey: "my-license-key",
    gateway: {
        bridge: {
            url: "https://my-io-bridge.com",
            announceIntervalMS: 30000
        }
    },
    user: {
        id: "user-id"
    }
};

const { io } = await IOBrowserPlatform(config);

@interopio/home-ui-react

You can now customize the icons for app folders in the Launchpad by using the folderIconGetters property of the <ApplicationsSection /> component.

The folderIconGetters property accepts an object with key/value pairs where each key is the name of the folder to customize and the value is a function that returns the icon class name based on whether the folder is open or closed. This allows you to provide different icons for open and closed states of the folders.

It's also possible to customize the icons of nested folders. If you specify a nested folder, the folder names must be separated with a forward slash ("/").

The following example demonstrates how to use the folderIconGetters property to customize the icons of app folders in the Launchpad, including a nested folder:

import {
    IOConnectHome,
    ApplicationsSection
} from "@interopio/home-ui-react";
import "@interopio/workspaces-ui-react/dist/styles/workspaces.css";
import "@interopio/home-ui-react/src/index.css";

const getConfig = (userData) => {
    // Define and return the required platform configuration.
};

// Custom icons for the app folders.
const folderIconGetters = {
    // Customizing the app folder icons also works for nested folders.
    // Nested folders must be separated with a forward slash ("/").
    "Trading/Sales": (isOpen) => isOpen ? "custom-trading-sales-open-icon" : "custom-trading-sales-closed-icon",
    "Analytics": (isOpen) => isOpen ? "custom-analytics-open-icon" : "custom-analytics-closed-icon"
};

const config = {
    getIOConnectConfig: getConfig,
    launchpad: {
        components: {
            // Customizing the default sections.
            sections: [
                {
                    placementId: "applications-section",
                    Component: () => <ApplicationsSection folderIconGetters={folderIconGetters} />
                }
            ]
        }
    }
};

const App = () => <IOConnectHome config={config} />;

export default App;

@interopio/workspaces-api

The NewLayoutOptions object passed as an argument to the save() method was expanded with an ignoreContexts property. Use this property to instruct the io.Connect platform to skip saving any window or Workspace contexts when saving a Layout:

const options = {
    name: "My Layout",
    ignoreContexts: true
};

const savedLayout = await io.layouts.save(options);

@interopio/workspaces-ui-web-components

The @interopio/workspaces-ui-web-components library now supports Channel restrictions and directional multi Channels for Workspace windows.

Improvements & Bug Fixes

⚠️ Note that each improvement or bug fix is listed under all libraries it affects.

@interopio/browser

  • Improved handling subscriptions for theme changes in the Themes API.

@interopio/browser-platform

  • Fixed an issue related to handling window titles in Layouts when <iframe /> elements are registered as apps.
  • Fixed an issue related to correctly handling both full URLs and glob patterns in block lists.

@interopio/fdc3

  • Fixed an issue related to handling targeted instances when appId is passed as a target to raiseIntent().

@interopio/home-ui-react

  • Improved handling the renaming of Workspaces in the "Workspaces" section of the Launchpad.
  • Fixed an issue related to icon sizing problems when the icon URL fails to load.
  • The @interopio/browser and the @interopio/browser-platform libraries are now optional peer dependencies of the @interopio/home-ui-react library.

@interopio/ng

  • The @interopio/browser, @interopio/browser-platform, and the @interopio/desktop libraries are now optional peer dependencies of the @interopio/ng library. You now have to manually install the respective libraries depending on the targeted io.Connect platform.

@interopio/react-hooks

  • The @interopio/browser, @interopio/browser-platform, and the @interopio/desktop libraries are now optional peer dependencies of the @interopio/react-hooks library. You now have to manually install the respective libraries depending on the targeted io.Connect platform.

@interopio/workspaces-api

  • Fixed an issue related to saving Layouts when there are non-io.Connect windows in a Workspace.

@interopio/workspaces-ui-react

  • Fixed an issue related to handling tooltip values.