Releases: SchweizerischeBundesbahnen/scion-workbench
21.0.0-beta.3 (@scion/workbench)
21.0.0-beta.3 (2026-01-21)
Features
- workbench: add support for
@scion/microfrontend-platformversion2.0.0(690bfb0)
BREAKING CHANGES
- workbench: SCION Workbench now requires
@scion/microfrontend-platformversion2.0.0or higher. For more information, refer to the changelog of@scion/microfrontend-platform. - workbench: SCION Workbench requires
@scion/workbench-clientversion1.0.0-beta.38or later.
1.0.0-beta.38 (@scion/workbench-client)
1.0.0-beta.38 (2026-01-21)
Features
- workbench-client: add support for
@scion/microfrontend-platformversion2.0.0(690bfb0)
BREAKING CHANGES
- workbench-client: SCION Workbench Client now requires
@scion/microfrontend-platformversion2.0.0or higher. For more information, refer to the changelog of@scion/microfrontend-platform.
21.0.0-beta.2 (@scion/workbench)
21.0.0-beta.2 (2026-01-19)
Bug Fixes
- workbench/dialog: allow dialog growing beyond context bounds (6dcddce), closes #730
- workbench/dialog: prevent dragging user selection when moving dialog (e.g., by previous Ctrl+A) (e72137a)
- workbench/dialog: open microfrontend dialog in calling context (9d1d06f)
- workbench/messagebox: open microfrontend message box in calling context (917c683)
- workbench/popup: open microfrontend popup in calling context (992a544)
Features
- workbench/popup: add option to position popup relative to context or viewport (b21b08e)
- workbench: enable host app to contribute microfrontends for parts and views (6d8590c), closes #271
BREAKING CHANGES
- workbench: The integration of host microfrontends has changed.
-
Dialog, popup, and messagebox microfrontends of the host application now require an empty path.
To migrate, set the path in the capability and route to empty string and use the new route matcherscanMatchWorkbenchDialogCapability,canMatchWorkbenchPopupCapability, orcanMatchWorkbenchMessageBoxCapability, respectively.Example — route matching a dialog capability with qualifier
{dialog: 'about'}import {Routes} from '@angular/router'; import {canMatchWorkbenchDialogCapability} from '@scion/workbench'; const routes: Routes = [ {path: '', canMatch: [canMatchWorkbenchDialogCapability({dialog: 'about'})], component: AboutComponent}, ];
Since the path must be empty, capability parameters cannot be referenced in the path anymore.
To migrate, injectActivatedMicrofrontendin the microfrontend component to read the passed parameters.Example — inject
ActivatedMicrofrontendin a host microfrontend to read capability and parameters:import {inject} from '@angular/core'; import {ActivatedMicrofrontend} from '@scion/workbench'; const {capability, params} = inject(ActivatedMicrofrontend);
-
Host dialog microfrontends must now inject
WorkbenchDialogfrom@scion/workbench(previously from@scion/workbench-client). -
Host messagebox microfrontends must now inject
WorkbenchDialogfrom@scion/workbench(previously from@scion/workbench-client). -
Host popup microfrontends must now inject
WorkbenchPopupfrom@scion/workbench(previously from@scion/workbench-client). -
Host popup microfrontends can read deprecated referrer information from the deprecated
WORKBENCH_POPUP_REFERRERDI token (previously fromWorkbenchClient).
-
Dependencies
- workbench: SCION Workbench requires
@scion/workbench-clientversion1.0.0-beta.37or later.
1.0.0-beta.37 (@scion/workbench-client)
1.0.0-beta.37 (2026-01-19)
Bug Fixes
- workbench-client/dialog: open dialog in calling context when opened from host (9d1d06f)
- workbench-client/messagebox: open message box in calling context when opened from host (917c683)
- workbench-client/popup: open popup in calling context when opened from host (992a544)
Features
21.0.0-beta.1 (@scion/workbench)
21.0.0-beta.1 (2025-11-27)
Features
- workbench: add support for Angular 21 (37c1887)
- workbench/dialog: add option to configure providers available for injection (b5c3197)
- workbench/messagebox: add option to configure providers available for injection (e95fb7f)
Bug Fixes
- workbench/popup: render popup at specified position on first rendering (0e7139e)
Code Refactoring
- workbench: remove deprecated option to configure workbench startup (96b548c)
- workbench: remove deprecated
WorkbenchStartup.isStartedandWorkbenchStartup.whenStartedproperties (1ea7d11) - workbench: remove deprecated registration of workbench initializers (e3856ef)
- workbench: remove deprecated option to configure workbench splash (0314aab)
- workbench: remove deprecated method to switch workbench theme (bc5e697)
- workbench: remove deprecated
textproperty fromMenuItemConfig(2a9f854) - workbench: remove deprecated
visibleproperty fromMenuItemConfig(ec6ba13) - workbench: remove deprecated support for displaying the empty-path route as the start page (6d76e32)
- workbench/view: remove deprecated properties for accessing view's navigation details (a6ededb)
- workbench/dialog: remove generic from dialog handle (fb1a664)
- workbench/popup: refactor Workbench Popup API (ff2ffaf)
- workbench/notification: remove deprecated API to set title as Observable (419289a)
- workbench/notification: refactor Workbench Notification API (8e0d109)
BREAKING CHANGES
-
workbench: SCION Workbench requires Angular 21.
Note that:
- SCION Workbench does not support zoneless. Support is planned for 2026.
- SCION Workbench still requires
@angular/animations. Removal is planned for 2026.
-
workbench: SCION Workbench now requires
@scion/workbench-clientversion1.0.0-beta.36or higher. For more information, refer to the changelog of@scion/workbench-client. -
workbench: SCION Workbench now requires
@scion/toolkitversion2.0.0or higher. For more information, refer to the changelog of@scion/toolkit. -
workbench: SCION Workbench now requires
@scion/microfrontend-platformversion1.6.0or higher. For more information, refer to the changelog of@scion/microfrontend-platform. -
workbench: Removed deprecated option to configure workbench startup.
To migrate:
- Remove
WorkbenchConfig.startup.launcherconfig passed toprovideWorkbench(). - If using the
APP_INITIALIZERoption, start the workbench manually in an Angular app initializer usingWorkbenchLauncher.launch(). - If using the
LAZYoption, remove the config, if any. No further migration is required because this is the default behavior.
Migration example of starting the workbench in an app initializer:
import {provideWorkbench, WorkbenchLauncher} from '@scion/workbench'; import {bootstrapApplication} from '@angular/platform-browser'; import {inject, provideAppInitializer} from '@angular/core'; bootstrapApplication(AppComponent, { providers: [ provideWorkbench(), provideAppInitializer(() => inject(WorkbenchLauncher).launch()) ] });
- Remove
-
workbench: Removed deprecated
WorkbenchStartup.isStartedandWorkbenchStartup.whenStartedproperties.To migrate:
WorkbenchStartup.isStartedhas been replaced byWorkbenchStartup.done.WorkbenchStartup.whenStartedhas been replaced byWorkbenchStartup.whenDone. Note that the type has changed tovoid.
-
workbench: Removed deprecated option to configure workbench splash.
To migrate, register a splash via
WorkbenchConfig.splashComponentproperty, previously viaWorkbenchConfig.startup.splash. -
workbench: Removed deprecated registration of workbench initializers.
The registration of workbench initializers has changed. The new
provideWorkbenchInitializer()andprovideMicrofrontendPlatformInitializer()functions allow for registration of initializer functions, similar to Angular'sprovideAppInitializer()function. The previous DI-based registration has been removed.To migrate:
- Use
provideWorkbenchInitializer()to register initializer functions, optionally specifying the phase for execution.
Previous DI tokensWORKBENCH_PRE_STARTUP,WORKBENCH_STARTUP, andWORKBENCH_POST_STARTUPhave been removed. - Use
provideMicrofrontendPlatformInitializer()to register microfrontend-related initializer functions, optionally specifying the phase for execution. Previous DI tokensMICROFRONTEND_PLATFORM_PRE_STARTUPandMICROFRONTEND_PLATFORM_POST_STARTUPhave been removed. - Class-based initializers have been removed. Instead, register an initializer function and inject the class-based initializer.
Before Migration
import {MICROFRONTEND_PLATFORM_POST_STARTUP, provideWorkbench, WORKBENCH_POST_STARTUP, WORKBENCH_STARTUP} from '@scion/workbench'; import {bootstrapApplication} from '@angular/platform-browser'; bootstrapApplication(AppComponent, { providers: [ provideWorkbench(), { provide: WORKBENCH_STARTUP, multi: true, useClass: SomeService1, }, { provide: WORKBENCH_POST_STARTUP, multi: true, useClass: SomeService2, }, { provide: MICROFRONTEND_PLATFORM_POST_STARTUP, multi: true, useClass: SomeService3, }, ], });
After Migration
import {provideMicrofrontendPlatformInitializer, provideWorkbench, provideWorkbenchInitializer, WorkbenchStartupPhase} from '@scion/workbench'; import {bootstrapApplication} from '@angular/platform-browser'; import {inject} from '@angular/core'; bootstrapApplication(AppComponent, { providers: [ provideWorkbench(), provideWorkbenchInitializer(() => inject(SomeService1).init()), provideWorkbenchInitializer(() => inject(SomeService2).init(), {phase: WorkbenchStartupPhase.PostStartup}), provideMicrofrontendPlatformInitializer(() => inject(SomeService3).init()), ], });
- Use
-
workbench: Removed deprecated method to switch workbench theme.
Previously, the theme was switched using
WorkbenchService.switchThememethod.To migrate:
- Use
WorkbenchService.settings.themesignal to switch and read the current theme. - Read current color scheme using
getComputedStyle(inject(DOCUMENT).documentElement).colorScheme.
- Use
-
workbench: Removed deprecated
textproperty fromMenuItemConfig.To migrate, register a text provider instead of configuring the text for each menu item.
A text provider is a function that returns the text for a translation key. Register the text provider via configuration passed to the
provideWorkbenchfunction.Before Migration
import {provideWorkbench} from '@scion/workbench'; import {inject} from '@angular/core'; provideWorkbench({ viewMenuItems: { close: {text: () => inject(TranslateService).translate('workbench.close_tab.action')}, closeOthers: {text: () => inject(TranslateService).translate('workbench.close_other_tabs.action')}, closeAll: {text: () => inject(TranslateService).translate('workbench.close_all_tabs.action')}, closeToTheRight: {text: () => inject(TranslateService).translate('workbench.close_tabs_to_the_right.action')}, closeToTheLeft: {text: () => inject(TranslateService).translate('workbench.close_tabs_to_the_left.action')}, moveRight: {text: () => inject(TranslateService).translate('workbench.move_tab_to_the_right.action')}, moveLeft: {text: () => inject(Tr...
1.0.0-beta.36 (@scion/workbench-client)
1.0.0-beta.36 (2025-11-27)
Code Refactoring
- workbench-client/view: change signature of
WorkbenchView.params$andWorkbenchView.snapshot.paramsfromMap<string, any>toMap<string, unknown>(2cb37ec) - workbench-client/view: remove deprecated API to set title and heading as Observable (b55c635)
- workbench-client/view: deprecate transient view parameters (a43db8c)
- workbench-client/dialog: remove deprecated API to set title as Observable (407cd13)
- workbench-client/dialog: remove generic from dialog handle (7e8ee5d)
- workbench-client/popup: refactor Workbench Popup API (57c5406)
- workbench-client/notification: refactor Workbench Notification API (55e451f)
BREAKING CHANGES
- workbench-client/view: Changed signature of
WorkbenchView.params$andWorkbenchView.snapshot.paramsfromMap<string, any>toMap<string, unknown>. An explicit cast may be required now. - workbench-client/view: Removed deprecated API to set title and heading as Observable. To migrate, pass a translatable and provide the text using a text provider registered in
WorkbenchClient.registerTextProvider. - workbench-client/popup: Changed signature of
WorkbenchPopup.paramsfromMap<string, any>toMap<string, unknown>. An explicit cast may be required now. - workbench-client/popup: Removed generic from popup handle as not required on type-level.
- workbench-client/dialog: Removed generic from dialog handle as not required on type-level.
- workbench-client/dialog: Removed deprecated API to set title as Observable. To migrate, pass a translatable and provide the text using a text provider registered in
WorkbenchClient.registerTextProvider. - workbench-client: SCION Workbench Client now requires
@scion/toolkitversion2.0.0or higher. For more information, refer to the changelog of@scion/toolkit. - workbench-client: SCION Workbench Client now requires
@scion/microfrontend-platformversion1.6.0or higher. For more information, refer to the changelog of@scion/microfrontend-platform.
Deprecations
-
workbench-client/popup: Refactored the Workbench Popup API to align with other Workbench APIs like Dialog, MessageBox, and Notification. Deprecated the old API and marked it for removal.
To migrate, use
WorkbenchPopupOptionsinstead ofWorkbenchPopupConfig. -
workbench-client/notification: Refactored the Workbench Notification API to align with other Workbench APIs like Dialog, MessageBox, and Popup. Deprecated the old API and marked it for removal.
To migrate:
- Pass text or qualifier as the first argument to
WorkbenchNotificationService.show. - Set duration in milliseconds, not seconds.
- Use
WorkbenchNotificationOptionsinstead ofWorkbenchNotificationConfig.
- Pass text or qualifier as the first argument to
-
workbench-client/view: Transient view parameters are deprecated. API marked for removal. No replacement.
To migrate, send large data as a retained message to a random topic and pass the topic as parameter. After receiving the data, the view should delete the retained message to free resources.
Example for sending large data
import {Beans} from '@scion/toolkit/bean-manager'; import {MessageClient} from '@scion/microfrontend-platform'; import {WorkbenchRouter} from '@scion/workbench-client'; // Define topic to transfer large data. const dataTransferTopic = crypto.randomUUID(); // Open view, passing the transfer topic as a view parameter. Beans.get(WorkbenchRouter).navigate({component: 'view'}, { params: {dataTransferTopic: dataTransferTopic}, }); // Send large data to transfer topic. const largeData = 'Large Data'; Beans.get(MessageClient).publish(dataTransferTopic, largeData, {retain: true});
Example for receiving large data
import {Beans} from '@scion/toolkit/bean-manager'; import {MessageClient} from '@scion/microfrontend-platform'; import {WorkbenchView} from '@scion/workbench-client'; // Read transfer topic from view parameters. const transferTopic = Beans.get(WorkbenchView).snapshot.params.get('dataTransferTopic') as string; // Receive large data. Beans.get(MessageClient).onMessage(transferTopic, msg => { console.log('large data', msg.body); // Delete retained message to free resources. Beans.get(MessageClient).publish(transferTopic, undefined, {retain: true}); });
1.0.0-beta.35 (@scion/workbench-client)
1.0.0-beta.35 (2025-11-12)
Features
- workbench-client: enable microfrontend to inject current workbench element (d2e4537)
20.0.0-beta.9 (@scion/workbench)
20.0.0-beta.9 (2025-11-11)
Features
- workbench/perspective: enable contribution of microfrontend parts to a workbench perspective (b6d25cf), closes #683
- workbench/part: support activating docked part when adding it to the layout (89aba48)
- workbench/dialog: add support for non-blocking dialog (28b0291)
- workbench/dialog: add support for part-modal dialog (4411246)
- workbench/notification: enable closing notification via handle (7b425bd)
- workbench/notification: prevent notification from closing on hover (903a912)
BREAKING CHANGES
- workbench: SCION Workbench requires
@scion/microfrontend-platformv1.5.0or higher. - workbench: SCION Workbench requires
@scion/workbench-clientv1.0.0-beta.34or higher.
Recommendations
- To use icons in docked parts, configure an icon provider in the workbench host application or include the Material icon font. See documentation for details.
Deprecations
- workbench/popup: Signature of
contextoption in popup config has changed from object literal to string literal. Migrate{context: {viewId: 'view.x'}}to{context: 'view.x'}. - workbench/dialog: Signature of
contextoption in dialog options has changed from object literal to string literal. Migrate{context: {viewId: 'view.x'}}to{context: 'view.x'}. - workbench/messagebox: Signature of
contextoption in messagebox options has changed from object literal to string literal. Migrate{context: {viewId: 'view.x'}}to{context: 'view.x'}. - workbench/dialog:
viewmodality in dialog options was renamed tocontext. - workbench/messagebox:
viewmodality in messagebox options was renamed tocontext.
1.0.0-beta.34 (@scion/workbench-client)
1.0.0-beta.34 (2025-11-11)
Features
- workbench-client/perspective: enable contribution of microfrontend parts to a workbench perspective (b6d25cf), closes #683
- workbench-client/dialog: add support for non-blocking dialog (28b0291)
- workbench-client/dialog: add support for part-modal dialog (4411246)
- workbench-client/text: support passing interpolation parameters via options (17718d0)
Recommendations
- workbench-client: For Angular applications, provide
WorkbenchPartfor dependency injection. See documentation for details.import {WorkbenchPart} from '@scion/workbench-client'; import {Beans} from '@scion/toolkit/bean-manager'; {provide: WorkbenchPart, useFactory: () => Beans.opt(WorkbenchPart)}
- To use icons in docked parts, configure an icon provider in the workbench host application or include the Material icon font. See documentation for details.
Deprecations
-
workbench-client/perspective: The modeling of a workbench perspective capability has changed: Parts must be modeled as separate part capabilities and views referenced from part capabilities. To migrate, refer to the documentation of WorkbenchPerspectiveCapability and WorkbenchPartCapability. Support for the deprecated model will be removed in SCION Workbench version 22.
Before migration:
{ "type": "perspective", "qualifier": { "perspective": "sample-perspective" }, "private": false, "properties": { "layout": [ { "id": "main-area" }, { "id": "navigator", "align": "left", "relativeTo": "main-area", "ratio": 0.25, "views": [ { "qualifier": { "view": "navigator" } } ] } ] } }After migration:
{ "type": "perspective", "qualifier": { "perspective": "sample-perspective" }, "private": false, "properties": { "parts": [ { "id": "main-area", "qualifier": { "part": "main-area" } }, { "id": "navigator", "qualifier": { "part": "navigator" }, "position": { "align": "left", "relativeTo": "main-area", "ratio": 0.25 } } ] } }, { "type": "part", "qualifier": { "part": "main-area" } }, { "type": "part", "qualifier": { "part": "navigator" }, "properties": { "views": [ { "qualifier": { "view": "navigator" } } ] } } -
workbench-client/popup: Signature of
contextoption in popup config has changed from object literal to string literal. Migrate{context: {viewId: 'view.x'}}to{context: 'view.x'}. -
workbench-client/dialog: Signature of
contextoption in dialog options has changed from object literal to string literal. Migrate{context: {viewId: 'view.x'}}to{context: 'view.x'}. -
workbench-client/messagebox: Signature of
contextoption in messagebox options has changed from object literal to string literal. Migrate{context: {viewId: 'view.x'}}to{context: 'view.x'}. -
workbench-client/dialog:
viewmodality in dialog options was renamed tocontext. -
workbench-client/messagebox:
viewmodality in messagebox options was renamed tocontext. -
workbench-client/popup: Referrer property on popup handle has been marked for removal. No replacement. Instead, add a parameter to the popup capability for the popup opener to pass required referrer information.
20.0.0-beta.8 (@scion/workbench)
20.0.0-beta.8 (2025-09-17)
Bug Fixes
- workbench/view: prevent stale view title after navigation (11f3226)
- workbench: prevent flickering of translated texts on re-layout (e4fdc4b), closes #255
Dependencies
- workbench: SCION Workbench requires
@scion/workbench-clientversion1.0.0-beta.33or later.