# io.Connect Browser 4.4

Source: https://docs.interop.io/browser/getting-started/changelog/4-4/index.html

## io.Connect Browser 4.4

*Release date: 30.04.2026*

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

| Library | Version |
|---------|---------|
| [`@interopio/browser`](https://www.npmjs.com/package/@interopio/browser) | 4.4 |
| [`@interopio/browser-platform`](https://www.npmjs.com/package/@interopio/browser-platform) | 4.4 |
| [`@interopio/browser-worker`](https://www.npmjs.com/package/@interopio/browser-worker) | 4.4 |
| [`@interopio/cli`](https://www.npmjs.com/package/@interopio/cli) | 4.4 |
| [`@interopio/fdc3`](https://www.npmjs.com/package/@interopio/fdc3) | 2.10 |
| [`@interopio/home-ui-react`](https://www.npmjs.com/package/@interopio/home-ui-react) | 4.4 |
| [`@interopio/intent-resolver-ui`](https://www.npmjs.com/package/@interopio/intent-resolver-ui) | 4.4 |
| [`@interopio/modals-api`](https://www.npmjs.com/package/@interopio/modals-api) | 4.4 |
| [`@interopio/modals-ui`](https://www.npmjs.com/package/@interopio/modals-ui) | 4.4 |
| [`@interopio/ng`](https://www.npmjs.com/package/@interopio/ng) | 6.3 |
| [`@interopio/react-hooks`](https://www.npmjs.com/package/@interopio/react-hooks) | 4.4 |
| [`@interopio/search-api`](https://www.npmjs.com/package/@interopio/search-api) | 3.4 |
| [`@interopio/theme`](https://www.npmjs.com/package/@interopio/theme) | 4.4 |
| [`@interopio/widget`](https://www.npmjs.com/package/@interopio/widget) | 3.4 |
| [`@interopio/workspaces-api`](https://www.npmjs.com/package/@interopio/workspaces-api) | 4.4 |
| [`@interopio/workspaces-ui-react`](https://www.npmjs.com/package/@interopio/workspaces-ui-react) | 4.4 |
| [`@interopio/workspaces-ui-web-components`](https://www.npmjs.com/package/@interopio/workspaces-ui-web-components) | 4.4 |

## New Features

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

> ### @interopio/browser
>
> #### Saving Window Contexts in Layouts
>
> When [saving a Global Layout](https://docs.interop.io/browser/capabilities/windows/layouts/layouts-api/index.md#layout_operations-save) programmatically, you can now instruct the platform to persist the context objects of individual io.Connect Windows (set via the `setContext()` method of a [`WebWindow`](https://docs.interop.io/browser/reference/javascript/windows/webwindow/index.md) instance) by using the `saveWindowContexts` property of the [`NewLayoutOptions`](https://docs.interop.io/browser/reference/javascript/layouts/newlayoutoptions/index.md) object:
>
> ```javascript
> const options = {
>     name: "My Layout",
>     saveWindowContexts: true
> };
>
> const myLayout = await io.layouts.save(options);
> ```
>
> If a Browser Client has subscribed for Layout save requests via the [`onSaveRequested()`](https://docs.interop.io/browser/reference/javascript/layouts/api/index.md#API-onSaveRequested) method and the event handler returns a context object, it will take precedence over the context set via the `setContext()` method. If the `ignoreContexts` property of the `NewLayoutOptions` object is set to `true`, the `saveWindowContexts` property will be ignored.

> ### @interopio/browser-platform
>
> #### Saving Window Contexts in Layouts
>
> Added support for persisting window context objects (set via the `setContext()` method of a `WebWindow` instance) when saving Global Layouts via the `saveWindowContexts` property of the [`NewLayoutOptions`](https://docs.interop.io/browser/reference/javascript/layouts/newlayoutoptions/index.md) object.
>
> #### Theme Persistence via the App Preferences API
>
> When an external [App Preferences](https://docs.interop.io/browser/capabilities/app-preferences/index.md) store is configured, the user selected theme is now automatically persisted and restored via the app preferences API. This enables the theme selection to be synchronized across different devices and browser sessions for the same user. When using a local app preferences store, themes continue to be stored in the browser local storage as before.

> ### @interopio/workspaces-api
>
> #### Tab Reorder Events
>
> You can now get notified when Workspace tabs or window tabs are reordered within their respective containers (Workspace Frames and window tab groups). These events are triggered only when dragging a tab to a different position without removing it from its current container.
>
> To subscribe for Workspace tab reorder events at the API level, use the [`onWorkspaceTabReordered()`](https://docs.interop.io/browser/reference/javascript/workspaces/api/index.md#API-onWorkspaceTabReordered) method. The event handler receives the reordered [`Workspace`](https://docs.interop.io/browser/reference/javascript/workspaces/workspace/index.md) instance with the updated `positionIndex`:
>
> ```javascript
> const handler = ({ title, positionIndex }) => console.log(`Workspace "${title}" was reordered to position ${positionIndex}.`);
>
> const unsubscribe = await io.workspaces.onWorkspaceTabReordered(handler);
> ```
>
> To subscribe for window tab reorder events at the API level, use the [`onWindowTabReordered()`](https://docs.interop.io/browser/reference/javascript/workspaces/api/index.md#API-onWindowTabReordered) method. The event handler receives the reordered [`WorkspaceWindow`](https://docs.interop.io/browser/reference/javascript/workspaces/workspacewindow/index.md) instance with the updated `positionIndex`:
>
> ```javascript
> const handler = ({ title, positionIndex }) => console.log(`Window "${title}" was reordered to position ${positionIndex}.`);
>
> const unsubscribe = await io.workspaces.onWindowTabReordered(handler);
> ```
>
> Tab reorder events are also available for:
>
> - [`Workspace`](https://docs.interop.io/browser/reference/javascript/workspaces/workspace/index.md) instances via the [`ontabReordered()`](https://docs.interop.io/browser/reference/javascript/workspaces/workspace/index.md#Workspace-ontabReordered) and [`onWindowTabReordered()`](https://docs.interop.io/browser/reference/javascript/workspaces/workspace/index.md#Workspace-onWindowTabReordered) methods.
>
> - [`WorkspaceWindow`](https://docs.interop.io/browser/reference/javascript/workspaces/workspacewindow/index.md) instances via the [`ontabReordered()`](https://docs.interop.io/browser/reference/javascript/workspaces/workspacewindow/index.md#WorkspaceWindow-ontabReordered) method.
>
> #### Saving Window Contexts in Workspace Layouts
>
> When saving a Workspace Layout, you can now instruct the platform to persist the context objects of individual Workspace windows (set via the `setContext()` method of a [`WebWindow`](https://docs.interop.io/browser/reference/javascript/windows/webwindow/index.md) instance) by using the `saveWindowContexts` property of the [`WorkspaceLayoutSaveConfig`](https://docs.interop.io/browser/reference/javascript/workspaces/workspacelayoutsaveconfig/index.md) object passed  as an argument to the [`save()`](https://docs.interop.io/browser/reference/javascript/workspaces/workspacelayoutsapi/index.md#WorkspaceLayoutsAPI-save`) method:
>
> ```javascript
> const config = {
>     name: "My Workspace",
>     workspaceId: myWorkspace.id,
>     saveWindowContexts: true
> };
>
> const workspaceLayout = await io.workspaces.layouts.save(config);
> ```
>
> You can also use the [`saveLayout()`](https://docs.interop.io/browser/reference/javascript/workspaces/workspace/index.md#Workspace-saveLayout) method of a [`Workspace`](https://docs.interop.io/browser/reference/javascript/workspaces/workspace/index.md) instance when saving an open Workspace as a Workspace Layout:
>
> ```javascript
> const name = "My Workspace";
> const config = { saveWindowContexts: true };
>
> await myWorkspace.saveLayout(name, config);
> ```
>
> If a Browser Client has subscribed for Layout save requests via the [`onSaveRequested()`](https://docs.interop.io/browser/reference/javascript/layouts/api/index.md#API-onSaveRequested) method and the event handler returns a context object, it will take precedence over the context set via the `setContext()` method.

## Improvements & Bug Fixes

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

> ### @interopio/browser-platform
>
> - Improved the validation logic when app validation for the app preferences store is enabled in order to avoid issues related to validating the platform app name.
> - Fixed an issue related to tracking Workspaces with the `workspace_count` metric.

> ### @interopio/home-ui-react
>
> - Fixed an issue related to the Layouts panel displaying duplicate items with the same name.
