Changelog

3.13.2

Release 1-9-2020

  • (19777) - There was a race condition preventing the Linker pill from displaying correctly for .NET components. This has been fixed.
  • (19137) - There was an issue switching workplaces while running windowless Java or WPF components. This has been fixed.

Release 12-16-2019

This release exclusively impacts the .NET module.

  • (19777) - There was a race condition preventing the Linker pill from displaying correctly for .NET components. This has been fixed.

3.13.1

Release 11-22-2019

  • (15194) - Previously, the window title bar could cover up content on the page if preloaded. Now, it appropriately nudges the content of the page down.

Note: Because of the new way Finsemble preloads the window title bar, you may notice issues related to how content loads under the window title bar. If this is the case, you will need to adjust some configs to ensure that the content loads correctly. See the instructions on setting the FSBLHeader config to an object in the Config Reference.

3.13.0

Release 11-15-2019

This release provides changes to Finsemble seed. Updating requires updating the seed. To see which files have been modified, compare your version of Finsemble with Version 3.13.0.

New UX features

  • Windows and monitor management (14806, 16393, 15691, 15690, 15692, 15468, 14802, 15776, 15465, 15961, 15699, 16854) - We refactored monitor management so we are now fully aware of the location of all windows after monitor plug/unplug. Previously, it was possible to lose windows or groups of windows when unplugging monitors, changing scaling, connecting to RDP, etc. Finsemble now acts like a shepherd to these lost windows and guides them home.

New Developer Features

  • Process management - Finsemble gives you the ability to balance performance and resource usage through configuration. This is done by using process affinities to group several windows into a single renderer process. Learn more about Finsemble's process models by reading the new process management tutorial.
  • concurrentSpawnLimit (16223) - You can now limit the number of windows spawned in parallel during the workspace load. See the config concurrentSpawnLimit in Config Reference for more details.
  • chromiumFlags (15616) - New configs have added support for the remote-debugging-port Chromium flag. Setting a remote debugging port will assist in your collaboration with Client Success. See chromiumFlags in the Config Reference for more details.
  • Signed installers (15320) - You are now able to create signed installers with your own security certificates. This ensures that your Finsemble installers can conform to your internal security standards (whatever they may be). See certificateFile, certificatePassword, and signWithParams in the Config Reference for more details.
  • Hide the floating title bar for native applications (14780) - You can now hide the floating title bar for native applications. Doing so removes their ability to tab together (though they still snap, dock, and group together). See hideTitleBars in the Config Reference for more details.

UX Improvements

  • (15945) - Windows aerokeys (WINDOW + Direction buttons) now work while running on Electron.
  • (15920) - Previously, moving a Windows taskbar from the bottom of a monitor to the top would incorrectly move the Toolbar to a secondary monitor. Now, the Toolbar just repositions itself under the taskbar.
  • (15897) - Fixed issues that would occur if an end user attempted to tile a window with itself.
  • (15157) - Previously, when windows were snapped together (but not in groups), and another window is placed on top of that configuration, resizing the interior borders of the snapped windows would not move them to the front of the stack. As this proved confusing, windows are now brought to front when a user resizes a configuration's interior borders.
  • (16721) - Finessed the ability for Finsemble to handle window resizing when an end user changes the size or orientation of the Windows taskbar.
  • (16716) - Fixed an issue where clicking "Bring to Front" would initially only reveal HTML windows.
  • (16711) - Fixed an issue minimizing groups containing native components.
  • (18061) - Fixed a bug where the auto-arrange tooltip would display incorrectly after the toolbar was moved to a new monitor.

General Improvements

  • (15127) - The App Launcher menu would sometimes become blank if configs it expected to be there were missing. It is now more robust and will display appropriately.
  • (15366) - Finsemble is now more resilient to problems in the manifest.
  • (16299, 15725) - Resolved a bug where certain cross-domain components failed to connect to Electron's IPC.
  • (16759) - Fixed a spurious error when maximizing native windows in tabs while running on the OpenFin container.
  • (15937) - We fixed spurious errors in the log from the Router Client that occurred if you published to a non-existent responder.
  • (16791) - Fixed a bug where Finsemble would sometimes spawn several instances of AssimilationMain.EXE.

Central Logger

  • (15139) - Previously, defaulting the log capture level to "off" did not work correctly: new components still had their logs displayed in the Central Logger. Now, the default capture level of "off" works as expected.
  • (14317) - Logging for the Electron Adapter can now log to both file and to the terminal. This is configurable by setting finsemble-electron-adapter.logger.logLevel.transports.console to true. When logged to the terminal, the Electron Adapter logs are colored differently.
  • (16809) - Fixed an issue where sometimes logs weren't being recorded appropriately by the Central Logger.

Launcher

  • (15119) - Having your Windows taskbar set vertically sometimes created misbehavior in window movement when using LauncherClient.showWindow. This API call now works appropriately with this configuration.
  • (14549) - Fixed a bug with the slave parameter in LauncherClient.spawn.

Linker

  • (17826) - Fixed an issue wherein the Linker window would not show up if component name contains more than one “.”
  • (15926) - Resolved a timing error in the Linker Service.

Native

  • (16070) - The .NET implementation of RouterClient.Publish had an issue that was resolved.
  • (15812) - When Assimilation spawned an application component, it used to make that component's working directory in the same location as Assimilation. Now, it spawns that component's working directory where the component lives.
  • (14912) - For native applications, the path property is now read from the config. Previously, it was read from the workspace, which could confuse the Workspace Service since it never had the correct path.
  • (15651) - WPF windows had lagging issues when docked. This has been fixed.
  • (14725) - Native windows can now benefit from the configs alwaysOnTopIcon and alwaysOnTop (see the Config Reference). If set to alwaysOnTop, the application component will be spawned at the front of the stack (like a sticky note). The icon allows the end user to toggle this functionality.
  • (17078) - Previously, Finsemble would spawn certain native application components invisibly, which would lead to problematic behavior for certain binaries (e.g., Microsoft Paint). Finsemble now spawns all native windows visibly, allowing them to be loaded correctly.

Workspaces

  • (15797) - Workspace stability has been enhanced. Non-existent components or timed-out components no longer cause workspace closing to hang.
  • (15377) - Previously, if your start-up workspace was missing, Finsemble wouldn't load. If storage is corrupted during startup, Finsemble will still load the default workspace.
  • (15438) - Resolved issues related to reloading windows overlapping with the docked Toolbar.
  • (16780) - Now, when importing a workspace that shares a name with an already existing workspace, a number is appended to the end of the workspace name to avoid an error.

3.12.1

Release 10-18-2019

  • (16567) - Fixed an issue where Finsemble was not waiting appropriately during shutdown before it killed component processes. Now, Finsemble waits a number of miliseconds equal to shutdownTimeout to shut down services, and two seconds less for application components. See the Config Reference for full details.

3.12.0

Release 09-13-2019

This release provides changes to Finsemble seed. Updating requires updating the seed. To see which files have been modified, compare your version of Finsemble with Version 3.12.0.

General Improvements

  • (15475) - An issue was preventing the toolbar from being brought to the front with hotkeys. Now, using CTRL+ALT+F to search will also show the toolbar.
  • (14512) - A window would become unresponsive if you tried to tab it with itself. Now, it works!
  • (15917) - There was an issue with how native windows arrested focus from Finsemble, causing Finsemble menus to stay open when new components launched. This was fixed.
  • (14703) - Previously, if you quickly opened and closed a large workspace of native components the workspace might get into a bad state. This is because the components would not have had time to register with FSBL. To fix this, a workspace will not display application components to the end user until the workspace is completely loaded.
  • (15440) - Reloading workspaces with components that had been auto-arranged would sometimes load windows in the wrong position. Now, pixel rounding has been fixed to solve this issue.
  • (14771) - Fixed a timing issue that sometimes caused problematic behavior during workspace reload.
  • (15673, 15674) - Previously, if you saved a workspace with a single maximized window, that window would not reload as maximized. This has been fixed.
  • (15678) - Closing workspaces with large docked groups used to take a long time. Previously, Finsemble would close one window at a time and reform the group. By closing all windows at the same time during workspace shutdown, it dramatically speeds up the shutdown of large workspaces.
  • (15572) - In Finsemble, you can spawn windowless WPF components. Since windowless WPF windows didn't have bounds, Finsemble would throw an error when the Launcher Client API was used inside the component. These errors have been handled.
  • (14559, 15650) - Previously, WPF windows would overlap the toolbar when maximized. This has been fixed.
  • (14885) - There were sometimes unhandled exceptions in WPF components. These have been fixed.
  • (15656) - Fixed an issue wherein AssimilationMain.EXE would occasionally fail to shut down on Windows 7.
  • (14722) - Sometimes, AssimilationMain.EXE would try to run multiple times. This would cause bad behavior. Assimilation now checks to make sure that only one instance is running at a time.
  • (15538) - We previously used two different algorithms to convert the names of components into the keys for workspace storage. They worked slightly differently, which led to some hiccups. We now use one implementation for consistency.

3.11.0

Release 08-09-2019

This release provides changes to Finsemble seed. Updating requires updating the seed. To see which files have been modified, compare your version of Finsemble with Version 3.11.0.

General Improvements

  • (15150) - Previously, cross-domain components would use WebSockets for communication. Now, they'll use Electron's IPC. This improves Finsemble's performance!
  • (12638) - Now, when closing a tabbed window by selecting "Close" from the window's taskbar icon, the entire tabbed group will close. Essentially, when you close a tabbed window, the entire tabbed group closes (just like a browser!). Note that there is an exception for tabs hidden in the drop-down title bar. If you close a window with tabs hidden in the drop-down title bar, the rest of the tabbed group pops out; only the visible window closes.
  • (14699, 14619, 14479, 14798, 14907, 15328) - Squashed a collection of bugs related to how Finsemble responds to changes to monitor setups.
  • (13560, 14545, 14144, 14689, 14915, 15088, 15289) - Removed a variety of spurious errors for the Central Logger.
  • (14483) - WPF components that were linked did not reload as linked. This has been fixed.
  • (14869) - The .NET version of the Window Client gained getComponentState and setComponentState methods.
  • (11556) - The scheduled restart option now saves the current workspace automatically.
  • (13853) - We removed the taskbar icon that would pop up for the loading splash screen.
  • (14842) - Previously, a bug would cause the Electron Adapter to crash if the logger property was not defined. This has been fixed.
  • (14047) - Occasionally, after reloading workspaces, tabs weren't able to be clicked on. This has been fixed.
  • (14562) - Fixed a bug in the calculation of the mouse's location that could cause an end user to sometimes get stuck in a "tabbing and tiling" state.
  • (14889, 14504) - Previously, the end user would be prompted to save a new workspace configuration even if they hadn't done anything to trigger this dialog. This has been fixed for many cases.
  • (15138) - Previously, imported log files were not read in order, causing log timestamps to be out of order in the Central Logger. This has been fixed.
  • (15198) - For our sample .NET projects, we ensured that we were always targeting .NET v 4.5.2.
  • (15285, 15305) - Fixed a few bugs causing docked groups to undock during workspace reload.
  • (15294) - Fixed a bug that would prevent you from pinning multiple workspaces to the toolbar.
  • (15295) - When a single window is auto-arranged, it functionally works as maximizing the window. (Testing has revealed that this is the end user's expectation. We're always testing and tweaking Finsemble to match these expectations.)
  • (15309) - Finessed the way that large, auto-arranged workspaces are saved and reloaded. Previously, some bugs in fractional pixel count would cause workspaces to reload in a wonky way. This has been fixed.
  • (15330) - Fixed a bug when restarting while running on OpenFin.

3.10.2

Release 09-20-2019

  • (15961) - When initiating a Remote Desktop Connection into a monitor with a different resolution, windows were sometime lost. This has been fixed.

3.10.1

Release 07-10-2019

  • (14962) - Fixed a bug that was not properly respecting bounds passed into LauncherClient.showWindow.

3.10.0

Released 07-10-2019

This release provides changes to Finsemble seed. Updating requires updating the seed.

New Developer Features

  • Typescript Support (11709) - Finsemble now ships with a TypeScript loader and TSLint to allow the use of TypeScript in the src and in the preloads folder. This means that you can write your React components using files with tsx extensions. You can also write preload scripts using TypeScript files. (Did you know? The ChartIQ team loves Typescript and uses it develop Finsemble!)
  • The src Folder Now Builds (12318) - Previously, Finsemble would build files only inside of the src/components directory. We now build all files in the src directory.
  • Display Name (7714) - Developers now have the ability to specify a window's display name using a config entry. See displayName in the Config Reference
  • Restrict Chromium Permissions (13203) - By default, Electron gives access to any Chromium permission that a website requests (e.g., geolocation, audio). Developers can now use permissions to restrict access to these APIs. Read more here!

UX Improvements

  • (12785) - Fixed a bug where changing monitor resolutions would break docked groups.
  • (13745) - Electron, Finsemble's container, was bringing in some unintentional behavior. Previously, hitting CTRL + PLUS would zoom in all Electron windows, but CTRL + MINUS would not restore them. We've disabled Electron's default zoom behavior. Zoom is now handled by a preload (zoom.js) which behaves as users expect.
  • (12662) - Previously, if you closed tabbed windows while a workspace was loading, it would disrupt the workspace loading process. To better manage user expectations, windows are not displayed until all its children are finished loading.
  • (12742) - Previously, the toolbar could be dragged in a way that would cause it to maximize. (Did you know? The toolbar is really just an HTML window styled to look like a common UI element!) This has been fixed.
  • (12736) - There was an issue on Windows 7 where an end user's mouse could become detached from the window during movement. This has been fixed.
  • (11795) - Previously, when clicking on a mailto link, there would be errors. This has been fixed.
  • (13493) - A bug was causing search results to remain on screen in certain circumstances. This has been fixed.
  • (12294) - Fixed a bug where automatic restart wasn't working.
  • (13468, 14532) - Native windows can now move across monitor boundaries and Assimilation.exe can deal with different monitor scaling sizes correctly. Previously, end users sometimes noticed some funky behavior with native windows when they tried to move them to new monitors.
  • (13862) - Fixed a bug where the Linker window sometimes would not autohide when another window gained focus.
  • (14344, 14669, 14670, 14675, 14676, 14705, 14913, 14025, 12150) - Fixed a series of bugs related to how windows dock and groups move together.
  • (14538, 14680, 14718, 14750) - Fixed a series of bugs related to how windows tab together.
  • (14713) - Fixed a bug where, when unlocking a computer, Finsemble thought the CTRL key was stuck in the pressed state. This caused some undesired behavior when windows docked and undocked. To fix this bug, we disabled the ability to dock via the CTRL key for applications using Finsemble.dll and timed out key presses after one minute.
  • (14757) - Previously, if you clicked the reveal button, certain grouped components would break apart. This has been fixed.
  • (14772) - The splash screen is now unable to be resized. (It's just a splash screen after all.)
  • (14810) - Previously, when you double-clicked the title bar on native windows, the windows would maximize and overlap the toolbar. This has been fixed so that double-clicking to maximize appropriately cedes space to the toolbar.

General Improvements

  • Storage Service Config is Now at the finsemble.servicesConfig Level (10896) - The Storage Service config was moved to the finsemble.servicesConfig level for consistency with other services: finsemble.defaultStorageAdapter and finsemble.storage. The old locations will continue to work for backwards compatibility.
  • Electron Adapter Logging Improvements (12796-12799) - The Electron Adapter now logs to a file. Previously, it would display to the console window. We instrumented the entire system so developers can export the log files for field support.
  • Cross-domain Components Now Work on Different Ports (14496) - Previously, different components hosted on the same domain would not work on different ports. This has been fixed.
  • Electron Adapter Now Filters Remote Modules (13114) - The remote module allows renderer processes to access APIs that are otherwise only available to the main process. The Electron Adapter now filters the remote modules that Finsemble does not use.
  • (14738) - We removed the icons in tabbed windows. Icons were causing some undesirable behavior. Icons will be added back in a future release.
  • (12678) - Fixed a problem wherein Finsemble.dll would crash when incorrectly configured.
  • (11476) - Significantly improved the time to shut down Finsemble.
  • (13546) - Previously, the system tray icon would not update if the file changed after it had been cached. Now, the system tray icon is fetched on each run of Finsemble.
  • (13378) - When calling getComponentState using the fields parameter, exceptions were previously thrown. This has been fixed.
  • (13098) - If an asset defined in the manifest failed to download, Finsemble would simply fail to load. Now, Finsemble will start and continue to try to download the required asset.
  • (12971) - Previously, preload scripts were injected into the page on the window "load" event. Now they're injected immediately upon window creation.
  • (13741) - Pressing CTRL+C from a terminal previously caused Electron processes to hang. This has been fixed.
  • (14688, 14748) - Pinned apps on the toolbar previously couldn't unpin if the displayName changed or if the config entry was removed. Now these pins are removed in these circumstances.
  • (14697) - Previously, the user would be prompted to save a new workspace configuration even if they hadn't done anything to trigger this dialog. This has been fixed for many cases.
  • (14698) - The Electron Adapter would fail to load if a particular asset specified in the application manifest could not be downloaded. Now, Finsemble will start and report an error.
  • (14723) - Fixed a bug in our sample authentication component. Previously, the component wouldn't initialize correctly.

Central Logger

  • (13273) - The Central Logger now has a taskbar icon.
  • (12631) - A variety of errors were being shown erroneously by the Central Logger. This cluster of bugs has been fixed.
  • (14603) - Fixed an error where the Central Logger was occasionally going blank.

WPF components

  • (13563, 14406, 13684) - The parent-child relationship between windows in our .NET example was causing timing problems during workspace switches and restarts. That has been fixed with a new architecture.
  • (14405) - WPF components that made heavy use of some third-party grid controls were experiencing performance degradation. Event handling in Assimilation.exe has been significantly improved to handle this situation.
  • (13541) - Fixed a bug that caused grouped WPF windows to not move together.

3.9.1

Release 07-11-2019

  • (14962) - Fixed a bug that was not properly respecting bounds passed into LauncherClient.showWindow.

3.9.0

Released 06-03-2019

This release provides changes to Finsemble seed. Updating requires updating the seed.

New features

  • Pop-up Windows and Loading Screens (12170) - Finsemble now supports applications with loading screens and pop-up windows. Previously, Finsemble's Assimilation program was designed to handle single windows. Applications with loading screens, like those in the Office suite, were out of scope. Developers can now use the new configs windowTitleWhiteList and windowTitleBlackList to pinpoint which windows they wish to integrate and exclude by name. For example, this configuration allows a user to launch Microsoft Outlook via Assimilation:
    "windowTitleWhiteList": ".*(Inbox|Outbox|Today).*",
    "windowTitleBlackList": "Opening.*",
  • New Window Client Method: removeComponentState (12340) - removeComponentState has been added to allow developers to remove a component's persistent state. Previously, they could change a component's state using the Window Client, but not remove a field.

  • Electron Adapter Security (12786) - Developers can now limit navigation to web pages based on protocol or domain. Through the Electron Adapter's permissions, they can ensure their smart desktops only load secure content and known domains. Read how here.

  • Configurable Search Results (12807) - Two new config entries control what results are returned when end users perform a search. If workspaceSearch or componentSearch are false, the search providers will not return results for workspaces or components, respectively. See the Config Reference for more details.

Improvements and Bug Fixes

  • Drop-Down Title Bar Changes (14222): We are always polishing Finsemble's user experience. As of this update, closing a window with a drop-down title bar does not close any other windows it was tabbed with. The drop-down title bar (aka the companion window) is often hidden, which obscures the tabs which it manages. In the previous iteration, it was assumed that end users would interpret closing a tabbed window like closing a browser window; they would expect all of the tabs to close. However, testing revealed that end users would occasionally close windows they did not intend to close. Now, if you close a window that has a drop-down title bar with tabbed windows, only the active window closes.

  • Workspace Client Refactor: We’ve significantly simplified the Workspace Service data model. Previously, workspace data was duplicated in two places in storage—individually, and then again under fsblWorkspaces. Now, workspace data is stored only once—under a key with its respective name. fsblWorkspaces has been replaced with the key finsemble.allWorkspaces, which stores the name of all Finsemble workspaces as an array. Note: This is backwards compatible. Old workspaces in storage will automatically be converted to the new format.

    • (11252) - Workspaces specified in the config can now accept the same format as an exported workspace. If an end user deletes or renames a workspace that was specified in config, the workspace defined by the config will be reloaded into Finsemble.
    • (11639) - When Finsemble is asked to launch a component of which it is unaware, it will launch a special "unknown" component in its place. As of this version, Finsemble will replace the unknown component with the actual component if the user regains access to it.
    • (14035) - Previously, if a user imported a workspace with native components that they did not have access to, it would cause the workspace to hang. Now, an unknown component is shown.
    • (11841) - Finsemble can now be launched even if no default workspace is specified: it simply launches with an empty workspace devoid of any application components.

Electron Adapter Improvements:

  • (12872) - Trusted preloads now support a full URL match instead of just a filename. Note: Using full URL matches will be required as of 4.0.
  • (12646) - Fixed a bug where auto arrange wasn't working properly after closing windows.
  • (12630) - Fixed a bug where Finsemble's splash screen only showed on the first launch.
  • (12380) - Fixed a bug where alwaysOnTop sometimes did not work properly.
  • (13539) - When you click on the name of a process in the process monitor, the process's window flashes. Previously, there was a bug where this would fail to re-hide invisible windows. This has been fixed.
  • (13446) - Fixed a bug where devtools wouldn't open a second time after closing them once.
  • (13817) - Injection was broken in the Electron Adapter. It has been fixed.
  • (13942) - Fixed a bug where Finsemble.dll couldn't connect to Finsemble if a non-default IAC server address was being used.
  • (14003) - Previously, it was possible for windows to remain offscreen when changing monitor configurations. This has been fixed.
  • (14026) - Previously, if a component was configured with windowType: "application" and an affinity, it could destabilize the system. This is now fixed. If a component is configured with windowType: "application", the component will be isolated in its own process, regardless of the affinity configuration.

Assimilation Improvements:

  • (12626) - Assimilated windows now have a heartbeat.
  • (13465) - If Assimilation fails to spawn a WPF window, it will now return errors to Finsemble.
  • (13150) - Previously when removing an assimilated window, the Central Logger would throw the error "trying to remove non-existent handler bounds-change-end." This has been fixed.
  • (13464) - Fixed a bug where enabling logging in Assimilation would crash AssimilationMain.EXE.
  • (13380) - Previously, if a native window was stacked with an HTML5 window, you could destabilize the workspace by unstacking the native window. This has been fixed.
  • (13242) - Previously, window.options.autoShow was not respected for native windows. This is fixed.

Central Logger Improvements:

  • (11549) - Fixed a bug where calling bring to front on a group of tabbed windows would throw an error in the Central Logger.
  • (12805) - Previously, the Central Logger would crash when exporting very large logs (30k+ entries). This has been fixed.
  • (12164) - Fixed a bug in the Central Logger where all windows appeared crashed when coming up from sleep.
  • (12841) - Groups of windows were erroneously producing a "Callback was already called" error in the Central Logger. This issue has been resolved.

Miscellaneous Improvements:

  • (14098) - The toolbar is now saved to storage. It was previously saved to the active workspace.
  • (12606) - Fixed a bug where windows were not moved out of a toolbar's claimed space when it was docked to the monitor.
  • (12477) - Added better error logging to the toolbar component.
  • (12174) - Previously, components of the same kind would be spawned on top of one another. Now, their top-left corner will stagger.
  • (7816) - Fixed a bug where a window's taskbar icon would disappear in some circumstances.
  • (12914) - Fixed a bug on Windows 7 where grouped windows would not restore after being maximized via double clicking on the title bar.
  • (13980) - Fixed a bug where double-clicking a window’s title bar caused the window to maximize to the wrong dimensions.
  • (13318) - Fixed a bug on Windows 7 where npm install would fail.
  • (12921) - Previously, WPF windows grouped together might not restore as grouped during a workspace switch. This has been fixed.
  • (13954) - Fixed a bug that was preventing all windows from being restored and brought to the front with a click of the taskbar icon.
  • (13967) - Previously, hitting enter after using the arrow keys to explore search results caused the search menu to appear after spawning the component. This has been fixed.
  • (13798) - The Workspace Client API call isWorkspaceDirty(cb) now appropriately returns true or false, depending on if the workspace has been modified or not. A bug was causing an undefined return.
  • (13823) - Fixed an issue where grouped windows were displaying individual taskbar icons. Now, appropriately grouped windows share a taskbar icon.
  • (13855) - Fixed a bug where docked windows were not moved out of the toolbar's claimed space.
  • (13975) - Previously, window maximize would fail after certain monitor changes.
  • (13977) - Fixed a bug where workspace names could not be edited in the preferences component.
  • (13386) - Previously, the act of loading a stacked window would cause the workspace to be made "dirty", i.e., it would signal that something had changed in the workspace and prompt the user to save. This has been fixed.

3.8.6

Release 07-11-2019

  • (14962) - Fixed a bug that was not properly respecting bounds passed into LauncherClient.showWindow.

3.8.5

Release 06-21-2019

Bug Fixes and Improvements

  • (14649) - Fixed a bug where, when unlocking a computer, Finsemble thought the CTRL key was being pressed. This caused some undesired behavior when windows docked and undocked. To fix this bug, we disabled the ability to dock via the CTRL key for applications using Finsemble.dll and time out key presses after one minute.

3.8.4

Release 05-17-2019

Bug Fixes and Improvements

  • (13286) - Fixed a bug where tabbed windows were saved incorrectly to the workspace under certain circumstances.
  • (13318) - Fixed a bug introduced in 3.8.1 that was preventing clients on Windows 7 from using npm install.
  • (13097) - Previously, the Finsemble build process would fail if you removed the Finsemble Electron Adapter. This has been fixed.
  • (13327) - Fixed a bug where calling getStackedWindow would result in an error even when it worked properly.
  • (13403) - Previously, under some circumstances, a window dragged out of a tabbed group would come back invisible.
  • (13333) - Finsemble seed tutorial had a typo while listening for the FSBLReady event.

3.8.3

Release 05-01-2019

Breaking Change - Cross-domain Component Security

A change to the security policies while running on Electron in 3.8.0 introduced additional restrictions to cross-domain components. To learn more about these security policies and how to make sure your Finsemble smart desktop operates safely and smoothly, please read the Security Policy tutorial.

New Features

  • Session Cookies (12179) - Finsemble now supports session cookies to facilitate preload script downloads.

Bug Fixes and Improvements

Assimilation/WPF Improvements:

  • (7576) - Assimilation now has per monitor DPI awareness.
  • (12218) - Assimilation's Folder config variable that determines where its log file is written was not working correctly; the log file was only writing to its default location. This has been fixed.
  • (12625) - Fixed a bug where WPF Windows weren't docking with HTML5 windows correctly when display scaling was enabled.
  • (12663, 13057) - Fixed a bug where reloading a workspace with large numbers of WPF or native components would cause Finsemble to hang.
  • (12715) AssimilationDLL64.dll was previously crashing on Windows 7 when large numbers of components spawned at the same time. This has been fixed.
  • (13077) - Previously, Assimilation had a limited use case wherein applications that spawn secondary windows became unusable. Assimilation can now handle secondary windows.

Electron Adapter Improvements:

  • (12646) - Fixed a bug causing gaps in auto arrange when using it on a single window.
  • (13284) - Fixed a bug where Finsemble was spawning spurious invisible floating title bars while using the Electron Adapter.

Miscellaneous:

  • (12898) - The default server address is now ws://127.0.0.1:3376 (previously wss://localhost.chartiq.com:337). This change was made to allow Finsemble to work on a client's network out of the box. For the purposes of version 3.8.3, you must use one of these two server addresses. You can change your serverAddress using manifest-local.json.

3.8.2

Release 04-25-2019

  • (13135) - Fixed a bug with LinkerClient.subscribe()

3.8.1

Release 04-19-2019

Upgrading/Big Fixes The 3.8.1 release squashes a bunch of bugs.

  • User Preferences component update (12618) - Fixed a bug in the User Preferences component where you couldn't delete a workspace unless it was highlighted. A workspace may now be deleted by clicking the "Trash" icon, regardless of what workspace is highlighted.
  • (12641, 12697) - Fixed a quirk in the Electron Adapter's permissions where you could force a window closed in spite of a restriction.
  • (12644) - Fixed a bug wherein restricting a window's forceClose permissions via the Electron Adapter would cause unexpected behavior in the window.
  • (12632) - Fixed a bug where the name of a quick component was not displaying correctly.
  • (12627) - Fixed a bug that was causing an error dialog when relaunching Finsemble on Electron.
  • (11949) - Fixed a bug that caused window position to be off by a pixel or two when using setBounds.
  • (12307) - LauncherClient.spawn() forceOntoMonitor argument was broken. It's now fixed.
  • (11519) - dockOnSpawn argument was broken. It's now fixed.
  • (12661) - LinkerClient.getLinkedWindows() failed if no parameters were passed. These should be optional. It's now fixed.
  • (12561, 12714) - The Electron Adapter was listed as an optional dependency, but it was actually not optional. This has been fixed so that it is, indeed, optional.
  • (12702) - DisentangledUtils.clone had a logger error that conceals other errors. This is fixed.
  • (12560) - Aerosnap capabilities formerly encountered issues if the WINDOWS key was held down for more than ten seconds. This is fixed.
  • (12703) - Fixed a bug where invisible native windows were preventing the toolbar from docking properly.
  • (12329) - Finsemble components cannot have periods in their name. Now, when naming a component via the native overrides preload, any period added will now be converted to an underscore.

3.8.0

Released 03-29-2019

New Features

  • Electron Support - We are proud to announce support for Electron. Electron is the industry leader, with Slack, Spotify, Microsoft Teams, and thousands of other apps all running on Electron. Our engineers spent years discovering and solving for development issues to create Finsemble. Now with Electron support, we gain improved performance and access to a deeper set of functionality.

  • Our new Electron Adapter allows Finsemble to run on Electron. The Electron Adapter ensures rigorous security through the following practices:

    • The Electron API is removed by default from all windows. This architecture ensures that windows are insulated from the desktop and from each other, communicating only through well-defined, intermediated messaging APIs.

    • All of Electron’s extensive security recommendations are implemented; most notably, Chromium sandboxing is turned on and node integration is turned off.

    • For information on deploying your Finsemble based app on Electron, see Deploying Your Finsemble Application.

      How to switch to Electron:

      • Run npm install. This will automatically install the Electron Adapter.
      • Electron can then enabled through either a JSON setting or by setting an environment variable.
        • JSON: In the file finsemble-seed/configs/other/server-environment-startup.json set "container" : "electron"
        • ENVIRONMENT VARIABLE: set container=electron
  • React Upgrade (12183) - Finsemble's UI controls (found in presentation components) now use React v. 16.8.3. 16.8.x is backwards compatible with code built for previous React versions. See our tutorial about our controls for more information. If you use our controls in your own applications, it might be helpful to use the React Development Tools. You can read our tutorial on how to get working with these tools here.

  • Search Relevancy Improvement (12311) - Previously, Finsemble's component search features provided generous allowance for typos, but short search strings sometimes returned spurious results. With this update, a better balance is struck so that search results are relevant to end users.

Upgrading/Bug Fixes In version 3.8 we've changed the mechanism that loads the Window Title Bar. The new method uses a preload function rather than injected JavaScript. This change allows firms to completely eliminate the use of injected JavaScript, a mechanism that was necessary in older versions of OpenFin. If you've customized the Window Title Bar component you'll need to merge in changes from the newest finsemble-seed version (src-built-in/components/windowTitleBar) with particular care to implement the "ready" event pattern in windowTitleBar.jsx.

if (window.FSBL && FSBL.addEventListener) {
	FSBL.addEventListener("onReady", init);
} else {
	window.addEventListener("FSBLReady", init);
}
  • (11878, 11967) - With some minor UI updates to dialogs, we've created more consistency in expected behavior throughout Finsemble.
  • (12282) - Fixed a bug wherein windows on a disconnected monitor remained in unreachable space (off screen). Now, Finsemble's display awareness has been fixed and windows will relocated appropriately to the available monitor.
  • (12319) - Fixed timing bug in the Linker Service that was interfering with finsemble.services.linkerService.channels.
  • (12321) - Fixed a bug where windows could be accidentally docked to the toolbar.
  • (11980) - Fixed a hotkeys service bug where keys got stuck in a pressed state while computer went into sleep, lock, or hibernate modes.
  • (12001) - Window Title Bar is now preloaded rather than injected into application components. See deliveryMechanism in the Config Reference for information on how to configure injection if necessary.

3.7.1

Released 05-01-2019

  • (13286) - Fixed a bug where sometimes a reloaded workspace would display a tab header erroneously.

3.7.0

Released 03-08-2019

  • Process Affinity (11575): Services can now be run as process, window, or script. This is set via the new config parameter spawnAs. Use this to fine tune concurrency vs. memory footprint. Service configs can now generally be overridden via the finsemble.servicesConfig config entry. Electron's "affinity" flag can also be added to service configs to take advantage of process affinity on that platform. Managing processes through process splintering has been deprecated in favor of process affinity.
  • WebSockets (11408): The underlying transport for Inter-Application Communication (IAC) has been migrated from socket.io to WebSockets. This eliminates an unnecessary dependency, streamlines the protocol, and opens up IAC to a wider range of non-JavaScript applications.
  • Assimilation Expansion (11090): Both 32 bit and 64 bit native apps can be simultaneously assimilated.
  • (11566) Non .EXE applications can now be spawned by Assimilation. This includes protocol handlers and jar files.
  • New Window Management Parameters (9777): New parameters are available for fine grain control of window behavior. These can be set as either parameters to LauncherClient.spawn or set in a component's config: see the Window Service in the Config Reference for details.

Upgrading/Bug Fixes

  • (11502) Auto arrange now works on grouped windows.
  • (11529) Fixed aesthetics of the toolbar's resize handle when the toolbar is very small.
  • (11151) Fixed a race condition that was sometimes causing the toolbar to not display when running on Electron.
  • (11730) Added support for configurable Finsemble IAC websocket server URL and certificates paths.
  • (12278) Fixed an issue when trying to bring to front an application using the CTRL + ALT + UP hotkey.
  • (12095) Fixed an issue when trying to apply hyperfocus for children of tabbed windows.
  • (10483) Fixed an issue where the bring to front window management does not properly select componentType.
  • (11876) Fixed an issue when calling getSpawnData.
  • (11358) Fixed an issue where duplicate close events were received after closing native applications.
  • (11632) Added default value (true) for dockableWindow.allowTiling.
  • (11875) Added Router Publish support for the Openfin protocol handler.
  • (12069) Added default for serverAddress (localhost.chartiq.com) when running on Electron.
  • (12031) Better support for restoring from minimized and maximized windows.
  • (12030) Added configurable support for window aero hotkey movement.

3.6.3

Released 02-22-2019

  • Window management improvements (11534) Maximized windows can now be dragged from a maximized state.
  • (11761) (experimental) Windows can now be moved through aero keyboard combinations, e.g., WINDOWS KEY + UP, DOWN, LEFT, RIGHT. See serviceConfig.docking.enableWindowsAeroSnap in the Config Reference.

Upgrading/Bug Fixes

  • (10044) Fixed an inconsistency in scheduled restart.
  • (11867) Fixed an issue wherein paths were being duplicated in certain conditions when launching a WPF app via a URL.
  • (11776) Finsemble now transmits heartbeat failures of frozen components on a specific channel for custom handlers.
  • (11903) Fixed an issue where maximized windows were being snapped at their previous position.
  • (11916) Fixed an error when exporting from the Central Logger.
  • (11567) Tabs now resize properly when restoring from a maximized state.
  • (11984) Fixed an issue with minimizing a window that was removed from a tabbed state.
  • (11653) Fixed an issue that occurred when attempting to maximize the toolbar.
  • (11934) When tabbed windows become unresponsive, the end user now receives a notification stating that the window has crashed.
  • (11947) Improved performance when closing tabbed windows.
  • (11800) Fixed a bug where minimizing a maximized window caused the window to become un-maximized when restored.
  • (12031) Fixed an issue with maximizing windows by double-clicking the title bar.

3.6.2

Released 01-29-2019

Upgrading/Bug Fixes

  • (11845) Fixed a bug where workspace configuration changes were not always applied
  • (11542) A callback had previously created a console error message in the Central Logger on startup.
  • (11566) By default, Finsemble now uses Assimilation to spawn URLs
  • (11502) Fixed the scale code in Auto Arrange
  • (11658) Fixed duplication of parameters for WPF applications
  • (11650) Docked components now reclaim space appropriately when monitor layouts change at runtime.
  • (11637) Fixed a bug regarding tabbed windows existing off-screen when monitor layouts changed
  • (11636) Fixed a bug regarding snapping to monitor edges after monitor layouts change at runtime
  • (11645) Fixed a bug regarding maximizing windows after monitor layouts change at runtime
  • (11410) Assimilation: add ability to disable hotkey listeners completely

3.6.1

Released 01-15-2019

  • (11496) Fixed race condition when restoring stacked windows of windowType: application.

3.6.0

Released 01-08-2019

This version includes a performance overhaul of finsemble.dll that will result in improved usability of .NET/WPF applications managed by Finsemble as well as hardening and refactoring of key internal services to improve reliability, debuggability, and performance.

  • (10841) Improved window movement performance for WPF/.NET applications that use finsemble.dll to create a native header by offloading window processing to Assimilation.
  • (11130) "Chromelike" zoom pop up is displayed when using the zoom.js preload.
  • (11181) Resizing of Tetris-shaped window groups is now proportional, with a scrim that matches the outer boundaries of the group.
  • (11168) Added TSLint.

Upgrading/Bug Fixes Assimilation version 3.6.0 is required when running native applications.

TSLint has been added to the dependencies for finsemble-seed in order to support our ongoing conversion to Typescript. You should run npm install after upgrading. A default TSLint configuration, based off of Airbnb, has been published here.

  • (11275) Numeric keypad keys can now be mapped as hotkeys.
  • (11175) The draggable icon on the toolbar is hidden when it is not in floating mode.
  • (11229) Workspace JSON has been streamlined, with the result of much smaller workspaces. This change is backwards compatible with the previous workspace format.
  • (11498) Topic-based get configuration is no longer ignored on storage adapters.
  • (10955) The Launcher Service has been merged into the Window Service. This reduces the risk of race conditions caused by asynchronous operations.
  • (11238) The Workspace Service has been hardened with promises and Typescript.
  • (11071) The Finsemble client API has been migrated from JavaScript to Typescript for robust type checking in the library code.

As of version 3.6, Assimilation version numbers are synced with Finsemble version numbers. Previous versions of the Assimilation changelog are archived here.

3.5.0

Released 12-11-2018

  • (11015) Native applications running finsemble.dll now work with Electron based Finsemble.
  • (10711) Alternatives are now available for window grouping/docking.

servicesConfig.docking.requireRectangularityForGroupResize - When false, allows "tetris" shaped groups to be resized by dragging on any exterior corner. When true, only rectangular groups are resized (dragging on a corner will resize the individual window). When this is false, grabbing an exterior edge will always resize the individual window rather than the group as a whole.

servicesConfig.docking.undockDisbandsEntireGroup - When true, clicking on the undock icon will disband the entire window. The window that was clicked will not pop out.

servicesConfig.docking.fillHolesOnUndock - When false, rectangular groups will not maintain their size when a window is popped out.

Upgrading/Bug Fixes

  • (11077) Corrected problem where the linker wouldn't communicate until a page was refreshed.
  • (11123) nonConfiguredComponent is now a system component. This prevents it from accidentally getting caught up in workspaces.
  • (11172) Multiple data sources can now be used with the storage service.
  • (10985) Caught case where monitorRect was not available in OpenFin fin object. Will use availableRect in that circumstance.
  • (10920) UserNotification is now available to custom services.
  • (10844) Handle race condition when using finsemble.dll
  • (10045) Removed duplicate entry for Floating Titlebar in presentationComponents.json.

3.4.2

Released 12-07-2018

  • (11077) Fixed linker bug that required a refresh of the page receiving linker data
  • (10985) Fixed bug in getClaimsOffset for use with DockableMonitor instances

3.4.0

Released 12-05-2018

Upgrading/Bug Fixes

  • (10837) Improved error handling and reporting of faults in storage adapters. This helps developers assess problems with network connections and remote databases.
  • (10629) Improved the rectangular group detection algorithm for docked windows.
  • (10775) Spawning external apps with assimilation now accepts command line arguments.
  • (100924) Removed EXE and Zip files from the core library so that tarballs can be accepted by third parties with stringent security filters.
  • (10901) The IAC (Finsemble router transport that communicates with Electron's IPC) is automatically used as the cross domain transport when running on Electron.
  • (10693) Fixed a bug wherein window title bars would lose draggability if the user vertically scrolled the page before it finished loading.
  • (10531) Improved error checking, reporting, and timeout handling in workspace switches.
  • (10827) Improved "off monitor" window relocation algorithm.
  • (10548) Disallowed snapping to "ephemeral" components.
  • (10781) Fixed bug where double-click on the title bar failed to maximize the window.
  • (10769) Fixed race condition bug with restart where responder was not found.
  • (10767) Eliminated false dirty states that caused prompts to save workspaces when no changes had been made.
  • (10533) Fixed bug where tabs could get stuck in hidden state.
  • (10455) URL changes are now always preserved in the workspace when persistURL is set.
  • (10557) Component state is now saved to workspaces. This means that linker state can now be set when sharing workspaces.

3.3.0

Released 11-20-2018

This version contains performance improvements and architectural refactoring of the underlying docking, tabbing and tiling code.

New Naming: The Docking Service has been renamed Window Service. No changes are necessary. Removed Stacked Window Manager: The Stacked Window Manager Service has been removed. Workspace Saving Change: When a user declines to save their active workspace, the initial pristine workspace is now loaded on session restart.

Upgrading/Bug Fixes

  • (10325) Previously, workspaces containing non-existent window names (e.g., if a user lost entitlements to that component) would fail to close and prevent Finsemble from opening other workspaces.
  • (10268) Fixed bug where a workspace would crash if it contained no windows.
  • (10098) Resizing a rectangular group to the left past a certain threshold previously caused the group to shrink.
  • (10081) Fixed a race condition in IndexedDBAdapter storage.
  • (10026) Ensured that injections (used in integrating HTML applications) were re-injected on page reloads.
  • (10036) Assimilated windows are now always restored properly in workspaces.
  • (10124) Fixed a bug where the docked toolbar menu was displayed up on the primary monitor, even if moved by the user.
  • (10117) The default splinter agent now behaves like any other splinter agent in regard to capping maximum number of processes.
  • (10200) Finsemble now catches invalid HTML5 drops on tabs.
  • (10281) Support OpenFin security realms.
  • (8380) Search Client "unRegister" has been renamed "unregister".
  • (10271) IndexedDBAdapter was previously inadvertently setting any null or undefined values to an empty object {}.
  • (10368) Config "variables" weren't being picked up if they were delineated by whitespace. This prevented a variable from being used within a config. For instance, foo:$bar would properly expand the $bar variable but foo:$bar wow would not. This has been fixed.
  • (10038) Dealt with edge case where the docking icon didn't deactivate when dragging a tab out of a group.
  • (10377) Fixed a nativeOverrides window.open regression failure.
  • (10087) Windows could not snap to the top of a monitor that did not contain a docked toolbar. Now they can.
  • (10415) Fixed a bug where crashed OpenFin/Electron windows weren't being detected, which caused orphaned references that affected tabbing and tiling scrim.
  • (9652) The companion window could disappear after a workspace reload and moving a multi-tabbed window.
  • (10278) We removed false positives for dirty workspaces.
  • (10626) Refactored shutdown and restart to work around issues introduced with OpenFin 9.
  • (10625) Windows that are off monitor are now moved to the closest edge of existing monitors.
  • (10628) Added a spinner in workspace menu when loading large workspaces.
  • (10624) MS Windows left/right arrow keys are now captured so that MS Windows desktop management doesn't confuse Finsemble's window position map. MW Windows left/right is therefore overridden for Finsemble components.
  • (10637) Cancelling "switch workspace" dialog was previously causing the menu to lock.
  • (10620) A missing component config entry for a workspace window would cause workspaces to enter an undefined state, causing lockups. Now the "nonConfiguredComponent" presentation component will be displayed whenever a workspace contains a window that has no config. This displays a message to the end user and allows the end user to close the window gracefully.
  • (10021) Linker was sometimes initialized to the wrong size

3.2.0

Released 11-01-2018

This version contains performance improvements and architectural refactoring of the underlying docking, tabbing, and tiling code.

3.1.2

Released 10-12-2018

Upgrading/Bug Fixes

  • Requires [email protected]* Please be sure to update your package.json and download the latest.
  • (9822) Fixed hover issues on menu "pins" and "trashcans"
  • (9791) CSS formatting issue with pins on toolbar.
  • (9814) Error preventing tabs and notepads from moving.

3.1.1

Upgrading/Bug Fixes Requires [email protected] Please be sure to update your package.json and download the latest.

(9490) Fixed hover state on dockable toolbar. (9631) Windows that are snapped to the edges of adjacent monitors no longer represent a contiguous group. Pressing the group icon will not link windows that are snapped across monitors.

component.window.dockedHeight now determines the height of a dockable component when docked.

3.1.0

Released 10-09-2018

Major UI Improvements

  • Dockable Components: Finsemble now supports "dockable" components. When snapped to the edge of a monitor, a dockable component will fill up the edge. Other components will then snap up against the dockable component. Dockable components support the following config:

    	window.dockable: ["top","bottom"] // The allowable docking positions.
    	docked: "top" // The initial docking position. Leave empty to float the component by default.
    	canGroup: false // If canGroup is "false," the component can't be snapped to another component when floating.
    
  • Floating Toolbar: The Finsemble Toolbar is now a dockable component. End users can grab the toolbar to undock it from the top of the screen, converting it into a "floating" toolbar. The toolbar can be redocked to the top or bottom of any monitor. In order to enable the dockable toolbar, the following changes should be made to the Toolbar component config. See presentationComponents.json in the latest finsemble-seed project.

    		"Toolbar": {
    			"window": {
    				"dockable": [
    					"top",
    					"bottom"
    				],
    				"maxHeight": 39,
    				"minHeight": 39,
    				"minWidth": 99,
    				"docked": "top",
    				"canGroup": false,
    				"options": {
    					"smallWindow": true
    				}
    			},
    			"component": {
    				"spawnOnAllMonitors": false,
    				"canMinimize": false
    			},
    			"foreign": {
    				"services": {
    					"dockingService": {
    						"isArrangable": false,
    						"ignoreSnappingRequests": true
    					},
    					"workspaceService": {
    						"global": true,
    						"ignoreTilingAndTabbingRequests": true
    					}
    				},
    			}
    

    The Toolbar can now be hidden or shown using hotkeys. CTRL+ALT+H hide the Toolbar. CTRL+ALT+T will show the Toolbar. If the Toolbar is floating but hidden behind other windows, pressing CTRL+ALT+T will bring the Toolbar to the front of the screen, positioned directly under the mouse pointer.

  • Smarter Workspaces: Finsemble is much smarter now when restoring or importing workspaces. If you have a different monitor configuration (fewer monitors, different resolutions, different orientations) then Finsemble will intelligently place windows that might otherwise have slipped beyond the scope of your virtual workspace.

    Importing and exporting of tabbed window groups is now supported.

Upgrading/Bug Fixes This version requires finsemble-react-controls version 3.1. The finsemble-seed package.json has been updated. Please check your own package.json to ensure that it is no longer set for 1.*.

Please note that the default storage adapter in the finsemble-seed project has been changed to the new indexedDBAdapter. Your users will lose their existing workspaces and preferences if you switch from localStorageAdapter to indexedDBAdapter. You should only do so if you're experiencing serious issues with OpenFin's localStorage flush to disk. These generally occur more often in development than in production.

In order to enable the new Floating Toolbar you should make the config changes described above. If you do not change the config, then Toolbar will continue to operate as it always has.

  • (9588) Eliminated stray JavaScript error in UserPreferences.

3.0.8

  • (9351) CTRL+SHIFT+L is now the default hotkey for the Central Logger (in config). Backtick turns out to have a different mapping between US and UK keyboards, and between Windows 7 and Windows 10. It cannot be reliably used as a hotkey.

3.0.7

  • (9525) Fixed bug in localStorageAdapter and indexedStorageAdapter that was unintentionally leaving the storage prefix in responses from keys.
  • (9552) Cleaned up presentation component html that was technically invalid in order to pass linter tests.
  • (9352) Capturing history.replaceState() so that workspaces remember the last navigated page from within a component.
  • (9351) The hotkey for showing the Central Logger is now configurable through finsemble.servicesConfig.logger.hotkeyShowCentralLogger. The default is now CTRL+SHIFT+L. Formerly the default was CTRL+L and could not be disabled.

3.0.6

  • (9517) fsbl-drag-handle moved inside FSBLHeader. This fixes scaling issues when the body is zoomed.
  • (9212) Search filter was not working properly with single character in input box.
  • (9324) Added queuing to indexDBAdapter to handle requests that are received prior to IndexDB being initialized.
  • (9195) Assimilation upgraded to version 2.0.3. On some machines, launching a native application could take longer than 400ms. This caused Assimilation to assume the native app had failed. Instead, we now wait 15 seconds.

3.0.5

  • (9180) Fixed extended "ghost image" when dragging tabs.

3.0.4

  • (7829) Added indexDBAdapter. localStoragedapter is no longer the default because of flush to disk issues with OpenFin. indexedDB does not suffer this same problem.
  • (9132) Components that were vertically scrolled lost the ability to be moved by end users.

3.0.3

  • (8749) Added default splash page to manifest.
  • (8745) Modified toolbar config so that icon has relative path.
  • (8750) Removed unused image assets.

3.0.1

Released 09-05-2018

Removed stray, unused mocha references.

3.0.0

Released 07-25-2018

Version 3.0 represents a significant step toward realizing Finsemble as the integration layer for finance. The build improvements, improved native support, and easier white labeling bring Finsemble closer to being a real production-ready solution for "assemblers," versus an SDK for developers. Simultaneously, the new UI-centric features offer a versatile and powerful toolset to the end user.

Major UI Improvements

Tabbing and Tiling: Finsemble now offers tiling and tabbing as turnkey UI features.

  • Powerful UI for Power Users: Tiling and tabbing join existing window management features such as snap, dock, group, hyperfocus, bring all to front, minimize all, and auto-arrange features. All of these features automatically function alongside one another, interchangeably. While Finsemble already offers a far more extensive UI than the containers it sits atop, this is now an order of magnitude more so.
  • Move Over, Phidias: Finsemble’s tiling algorithm takes a page from the Golden Layout. With tiling, users can quickly arrange pieces of workflow into shapes that are both beautiful and functional.
  • The Desktop, Infinitely Extended: While many existing Finsemble features help address the problem of limited screen real estate, the introduction of tabbing adds an entire new dimension to Finsemble’s UI. Completely separate applications can now exist as tabs within a single window—either alone ala browser tabs or grouped together in some other fashion. In effect, this allows for infinite extension of the workspace.

Tabbing

Tiling

Improved Process Monitor: Finsemble is fast and economical with memory, but there’s no way to guarantee that 1000+ distinct apps that can each run within a Finsemble instance will always behave. In the case where a malfunctioning app is consuming more than its fair share of memory or has become unresponsive, Finsemble now offers a user-facing process monitor as a convenience tool, much like the Windows Task Manager.

The process monitor can be found by accessing the Central Logger. Click on the Finsemble button on the toolbar, launch the Central Logger, and you'll find the Process Monitor button on the top left.

Presentation Component Redesign: Everybody likes to get a makeover every now and then. Finsemble 3.0 sports a thinner, more professional aesthetic.

  • Slicker, low-profile window title bars are now the default.
  • Window scrollbars now appear underneath the Finsemble window title bar.
  • An optional preload zoom.js can be set for components. This will allow an end user to CTRL +/- to zoom. The zoom state will be automatically saved and restored with the workspace.

Companion Window: The companion window is a small HTML5 window that tracks the location of an integrated native app and unobtrusively sits superimposed. Its normal state is that of a tiny tab. It unfurls with a click, becoming a fully functional Finsemble window title bar. The Companion Window can be styled like any Finsemble header, allowing for consistent theming, UI Controls for context sharing, etc.

  • Two Headers, No Code: The companion window solves two problems. First, it makes good on the promise that native windows can fully participate with Finsemble UI, with no code required. Second, it allows for that participation without obscuring the existing native header (which may contain critical functionality for that native app).

Note: This is an experimental feature. If you have feedback about how the companion window works or should work, feel free to let us know.

Major Framework Improvements

Build Restructuring: Finsemble’s build process has been reorganized with a focus on seamless upgrading. Customers can now take advantage of Finsemble’s rapid release cycle and incorporate the latest Finsemble improvements without disrupting the pace or trajectory of their own project.

Improved White Labeling: In tandem with Finsemble’s restyling work, white labeling has been improved. Finsemble styling is now pure CSS and is carefully abstracted; for most customers, the white labeling process is now as simple as interchanging icons and applying a color scheme. These settings propagate through the entire Finsemble instance—and even into constituent applications.

To this end, the white labeling files and variables have changed. _variables.css and _variablesWhiteLabel.css has been replaced with _theme.css and _themeWhitelabelcss. The new _theme.css file implements a core color scheme (i.e., -primary-font-color, -primary-accent-color). This allows rapid branding by modifying just a few variables. To implement your branding, copy _theme.css to _themeWhitelabel.css and then modify as appropriate. Please contact us if you'd like assistance in migrating your CSS.

Native Support: Native integration has been significantly improved.

Environment Variables: Finsemble's assimilation can now spawn native assets. Set config betaFeatures.assimilation.useOpenFinSpawn=false. One immediate advantage is the ability to set environment variables when spawning a native application. These can be set in the component's config for windowenv.

Example, spawn command prompt with the environment variable "FINSEMBLE" set to true:

	...
	"components": {
		"Notepad": {
			"window": {
				"id": "CommandPrompt",
				"windowType": "assimilation",
				"path": "cmd.exe",
				"env": {
					"FINSEMBLE": "true"
				}
			},
			...

Assimilation 2.0 + Microsoft Lync Support: Assimilation code has been largely rewritten to allow native components to visually integrate more easily into Finsemble UI. Users will also notice a big uptick in performance, particularly when moving large groups of native and Finsemble windows together. Finsemble 3.0 also supports environments that include Microsoft Lync.

WPF Library Extension: Finsemble’s WPF Library has also been extended. Finsemble’s WPF Library allows native apps to make RPC calls to Finsemble. This means that native apps can use essentially the same code for communicating with Finsemble as they do their own local code, so integration becomes easier and faster.

WPF Window Title Bar: Lastly, a layer of polish has been applied to our WPF window title bar. The WPF window title bar looks and feels like the Finsemble window title bar, and it offers the same functionality (linker, drag and drop, etc.) but is written entirely in native code. For customers who want a 100% pure native app without sacrificing any theming consistency, the WPF window title bar provides an easy path.

Persisting URLs: When a workspace reloads, components will now be re-instantiated with the URL from their config. However, the optional config entry persistURL can be used to override this behavior. For instance, you may have a component that allows user navigation. If persistURL is true, then Finsemble's workspace will remember the last navigated location and restore it. This can be useful for components who store their state as URLs with query strings or hash tabs.

Example, set a component to persist the last navigated URL:

	"components": {
		"My Component": {
			...
			"foreign": {
				"services": {
					"workspace": {
						"persistURL": true
					}
				},

Improved Central Logger: The Central Logger has gotten a big overhaul. The Logger now even includes a built in config viewer. This can be really helpful in viewing the results of dynamic config operations.

Improved VDI Support: Finsemble now has better support for environments with Virtual Desktop Infrastructure, such as Citrix or VirtualBox. VDI presents a cautionary example to any customer who might wish to build rather than buy; a good window and workspace management layer will inevitably (and rudely) jostle with virtual desktops for control of the user’s experience. Finsemble 3.0’s underlying framework has evolved to mitigate the risks posed by the VDI technology used by most institutions.

Upgrading/Bug Fixes

  • Added missing hot key entries for punctuation marks.
  • (7727) Increased size of input boxes in ad hoc (user created) components.
  • (7729) Toolbars will now appear/disappear on multiple monitors if a monitor change occurred while the computer was asleep.
  • (7653) Windows that are closed from the Windows Taskbar are now properly removed from workspaces.
  • (7644) Active "singleton" components are now brought to front if you choose them from the apps menu.
  • (7483) Tabbing or Tiling can now be optionally disabled through configs: "servicesConfig->docking->tabbing->enabled" and "servicesConfig->docking->tiling->enabled".
  • Fixed capitalization issue with MonitorsAndScaling.

Upgrade Info

The gulpfile build process has been substantially refactored. These changes should be transparent to you. You can continue to use npm run dev and npm run dev:fresh. Extending the gulpfile is now substantially easier. Please refer to gulpfile-extensions.js for instructions on how to do so.

The folder /src-built-in/components/assets has been moved to /assets. This eliminates the need to maintain two separate assets folders for src and src-built-in. The relative paths of the assets have been changed in all import, link, and img tags within src-built-in and config files. You will need to modify these paths for your own configs and custom components. To modify the paths, search across files for ../assets and then change the number of "../" as appropriate.

"finfont" files have been renamed "font-finance".

Tabbing and tiling can be disabled using the finsemble["Window Manager.showTabs"] config. This can be done both globally and per component.

When a workspace is loaded (or the app starts), windows will obtain their URL from their component config. Sometimes, however, you may have a component that should retain its former URL. For instance, if a user navigates in the component, the URL may reflect the state of the component. For such components you can set the config item component.foreign.services.workspace.persistURL to true in order to retain their prior URL. You can also set the global servicesConfig.workspace.persistURL.


2.5.11

Released 7-11-2018

Upgrading/Bug Fixes (7982) Shutdown wasn't occurring quickly enough. This caused localStorage to sometimes not update (resulting in workspaces and central logger changes not retaining state). This also caused .net/WFP applications to miss their shutdown signals. Taskbar icons were showing up as individual icons instead of as a group of icons.

2.5.10

Released 7-03-2018

Upgrading/Bug Fixes (7779) Fixes to allow native components (using finsemble.dll) to shut down cleanly (7822) config imports were limited to 10. This has been changed to 10 levels of recursion.

2.5.9

Released 6-28-2018

Upgrading/Bug Fixes (7503) Don't print assimilation version notification error if assimilation is not enabled.

2.5.8

Released 6-27-2018

Upgrading/Bug Fixes (7653) Fixed error that caused workspaces to fail when reloading an [Openfin] application

2.5.7

Released 6-22-2018

Upgrading/Bug Fixes Fixed syntax error in openfinWindowWrapper.js

2.5.5

Released 6-18-2018

Upgrading/Bug Fixes (7535) Mind control was not being injected into cross-domain components.

(7540) spawnData was not being passed to cross-domain components.

2.5.3

Released 6-06-2018

Upgrading/Bug Fixes (6963) "windowType" : "application" will now open an OpenFin application as a component.

(6963) Cross domain windows automatically open as new "applications". This allows them to display in process monitor (previously they wouldn't show up).

2.5.2

Released 5-30-2018

Upgrade Info

(7022) Notifications can now be styled with CSS variable overrides. See variables that begin with -notification-* in src-built-in/assets/css/_variables.css. Override these variables in your _variablesWhitelabel.css file.

(6773) We've cleaned up the dependency chain for Finsemble, cutting down to only fourteen runtime dependencies for the core library and seven for the seed project. For many firms, this will speed up data security sign-off.

Upgrading/Bug Fixes

(6590) Default hotkeys for bring to front and minimize all were changed from CTRL+SHIFT+UP/DOWN to CTRL+ALT+UP/DOWN. The prior key chords were overriding Excel.

(6760) Input dialogs now receive focus automatically when they are launched. This requires an upgrade to finsemble-react-controls.

(6882) User-created (ad hoc) components are now successfully saved and restored to workspaces.

(7067) Fixed a bug wherein undocking a single window from a group would cause the entire window group to undock.

(6758) Windows that are closed from the Windows taskbar weren't being removed from workspaces (they would come back next time you loaded the workspace).

(6846) Assertion code was added to prevent FSBL.onReady() from firing twice. This can occur in rare conditions where OpenFin preloads twice, or situations where a developer manually includes FSBL even when it was preloaded. This introduces subtle state bugs in many components. If this assertion violation is detected, Finsemble will make a best effort to rectify and will present a notification alerting the developer to the issue.

(6473) Connection errors to assimilation are now detected via timeout and presented to the developer as a notification. This can cause a "white toolbar" problem that is difficult to detect without proactive notification.

2.5

Released 5-16-2018

Notifications: Finsemble now supports notifications. These are the fun toast messages that pop up from the bottom right corner of your screen. We provide a semantical interface for notifications. For instance, you can specify that a particular notification should only occur once, or only occur X number of times. You can also specify that a notification belongs to a particular "topic." In future releases, we'll let you turn on or off topic streams by config; this will allow you, for instance, to load up on developer notifications in a development environment, but turn them off during production.

Notifications

We've included a snazzy notification template. Simply send a notification object containing "description" and "title" fields and our template will do the rest. You can copy this template and make your own as well. One of the cool things about these notifications is that they are plain HTML, so unlike your operating system's notifications you can make them interactive.

Finally, we've started lacing the core Finsemble code with notifications for critical errors. So if, for whatever reason, Finsemble doesn't start, you should now get a notification instead of having to pore through log files. Once we introduce topic filtering we'll provide more useful system notifications so that you can quickly spot bugs and inconsistencies.

"Always On Top" icon: This release introduces pinning capability to components by way of the "Always On Top" icon. When the icon is toggled, the window remains on top (like a sticky note). The icon is not included by default, but you can turn it on system wide by adding a global configuration:

"Window Manager" : {
	"alwaysOnTopIcon": true
}

...or you can turn it on for individual components:

"Welcome Component": {
	"foreign: {
		"components": {
			"Window Manager": {
				"alwaysOnTopIcon": true
			}
		}
	}
}

We've also added an optional "Always On Top" icon for the toolbar. It can get annoying when the toolbar slips behind other windows. Click on the pin to force the toolbar to float above all other windows. Currently the pin is enabled with a toolbar configuration. In src-built-in/components/toolbar/config.json, look for this entry:

     {
        "comment": "Change align to add AlwaysOnTop capability",
        "align": "none",
        "type": "reactComponent",
        "reactComponent": "AlwaysOnTop"
    },

Always On Top Toolbar

Change the value of align to either left or right to position it on the toolbar. We'd like your feedback on this feature to determine how to improve it.

Restart timer: Finsemble now has the ability to automatically restart itself at a particular time of day. This can be set as a config entry for all users which can be overridden by a user preference. That preference can be set in a user's preferences screen.

The config entry should be formatted:

scheduledRestart {
    "hour": 16,
    "minute": 30,
    "dialogTimeout": 10000
}

Hours should be in twenty-four hour time according to the user's local machine's time zone.

When it is time to restart, the user is presented with a dialog to confirm or cancel. Since resets often occur at night while the machine is unattended, most often the dialog will time out and Finsemble will reset. The dialogTimeout specifies how long to wait for a user response in milliseconds.

Improved window management: End users have long had the ability to pin their favorite components to the toolbar for ease of access. Now, when an end user SHIFT + clicks on a pinned item on the toolbar, all windows of that type are brought to front. For example, if a user has ChartIQ's charting component pinned to their toolbar, a simple SHIFT + click will bring all charts to the front of their screen.


2.4.2

Released 5-9-2018

Process Monitor: A new Process Monitor component is available located in src-built-in. This component acts a bit like the Windows Task Manager, except that it's focused on applications running in Finsemble. From here you can tell how much CPU and memory each application is using. Also, like Windows Task Manager, you can terminate specific windows or applications (just be careful!).

You'll see this component in the seed project's Apps menu. It's your decision whether you think it will be a good tool for end-users, but it's definitely a very handy tool for developers—a great companion to the Central Logger.

The Process Monitor

Native Overrides: This release also includes a nativeOverrides.js preload file. This can be used to "monkey patch" the browser's built in window.open and window.alert calls. The window.alert call is annoying because it creates an ugly pop-up and, because it's a synchronous call, it freezes the entire application. Most components don't use alerts, but if you encounter one, you can use the nativeOverrides.js to squash that behavior.

Likewise, some applications call window.open for pop-outs. You can use nativeOverrides.js to capture these calls and funnel them through Finsemble's API so that pop-out windows gain a header, window management, and workspace awareness.

You can find the file in src-built-in/preloads/nativeOverrides.js. Look inside for instructions on how to use the overrides.


2.4

Released 4-27-2018

The New

Java support: Finsemble now supports Java apps! This required a lot of elbow grease to work out the kinks. Wouldn't you know that every running Java app looks like "java.exe"? That makes life difficult when you're trying to restore them into a workspace. Apps opened through Java Webstart with command line arguments will now fall into place within restored workspaces.

WPF Window Title Bar: On the subject of native apps, we're proud to announce a new window title bar for native applications applications. Simply include finsemble.dll and your application will gain a window title bar that is identical to the title bar in your HTML5 components. This title bar allows your native components to participate in Finsemble’s window management (snapping, docking, grouping). It also provides direct access to Finsemble RPC, so that you can access Finsemble API commands directly from your C# application. You can get access to finsemble.dll and learn how to use it in this public repo: https://github.com/ChartIQ/finsemble-dotnet-seed

You can also set the title of a component (what appears in the title bar) from the config:

"foreign": {
   "components": {
      "Window Manager": {
          "title": "What a Cool Component"
      }
    }
}

Work/home balance: One of the big differences between desktop apps and web apps is that desktop apps tend to be long lived. Users leave them running for hours, days, even weeks. Computers are locked, put to sleep, or go into hibernation. Finsemble now revives properly when a computer wakes from slumber. It also adapts when you plug and unplug monitors. Go ahead, run your app at work, snap the clamshell closed, and reopen it at home on a different monitor. Your Finsemble app will still be running smoothly.

The Improved

CSS overhaul: In 2.4, the CSS has been totally overhauled to be semantically optimal. You will no longer find font-family scattered all over the place, or references to colors in the CSS. Everything is now derived from well defined CSS variables, all of which can be found in a single location: src-built-in/assets/css/variables.css. These variables can be overridden by copying these files to your src directory. This should make it easier for the components that you build to have consistent styling.

Additionally, we've changed the styling of header bars to be much smarter. Want a skinny header bar now? Just change the CSS and Finsemble will automatically adapt.

To that point, we've eliminated SASS! (No, that's a good thing.) Chrome now supports CSS variables which means that we no longer need to rely on a preprocessor to create semantically meaningful CSS. This has been a particularly pesky problem because the good folks who built node-sass leaned heavily on the libsass C++ module, making node-sass heavy. Good riddance we say.

Note: If you need SASS for your own project (maybe your components are built with SASS) then you'll need to add it to gulp-extensions.md and defaultWebpackConfig.js.

Improved white labeling: Branding your Finsemble application has now become super straightforward. All you need are three files in the src-built-in/assets/css directory. These are all blank, ready for you to add branding:

  • fontIconWhitelabel.css - If you'd like to override any of the Font Finance font-icons, simply use this file. Go ahead, load your own fonts!
  • variablesWhitelabel.css - This lets you quickly apply branding to your application. Just copy any styles from variables.css into this file and change them to suit.
  • styleWhitelabel.css - This is the final CSS file that gets loaded, and so you have the opportunity here to override any built-in Finsemble CSS. Want a few pixels wider margin? A splash of color? Go for it.

Check out the tutorial for more details..

This does mean that the presentation components have been overhauled to make use of the new styles. If you've modified any of these components and they no longer look right, let us know and we'll help you migrate.

Improved Central Logger: The Central Logger has received a UX upgrade. Its ease of use has been meaningfully improved.

Deprecated package-lock.json: We got rid of package-lock.json from the project. If you haven't yet been burned by this file—consider yourself lucky. When you run npm install though, it will come back. You can stop it from being generated here.

2.3

Released 4-2-2018

Upgrade with Extensibility: Finsemble 2.3 provides a path forward for upgrading your Finsemble framework while keeping all your development work intact. We now provide hooks where you can add customizations to the gulpfile build and not fear that these will be lost during future upgrades. Likewise, we've restructured the webpack build process so that Finsemble's built-in components (such as toolbar) are separated from the components that you've created. This makes upgrades seamless. Finally, we're now including migration scripts with each release so that you can automatically upgrade your build environment with minimal work. Upgrading is easy—starting now.

Go Speed Racer!: We've streamlined and parallelized Finsemble’s start-up processes. This means that your Finsemble application will now start 20% faster than it did previously.

We’ve also restructured the build process in the Finsemble seed project! Rapid iteration is a reality with a ten-fold improvement in build times (yes, seriously).

Deprecated: Hot reload has been temporarily disabled with this release as a way to improve build times. We may reintroduce this feature in a future release.

Authentication Profiles: The Authentication API been expanded to support "authentication profiles" that allow components to trigger authentication actions dynamically during the runtime of an application. An authentication profile is a config for a particular authentication endpoint and a particular authentication protocol. For instance, imagine you brought up a Salesforce component. That component can use the Authentication API to log in when the component is launched. The Authentication API now includes integrated support for OAuth2, making it super easy to connect to identity providers and OpenID providers.

Deprecated: "isAuthEnabled" - Instead, you now set up an authentication profile called "startup". See the Authentication Tutorial for information.

Native Improvements: The RPC Service has been expanded. Native components now have access to the Launcher Client and the Authentication Client. Native clients can now also serve as the initial component that performs authentication (replacing defaultAuthentication).

Flash: Finsemble now supports components written in Adobe Flash. Party like it's 1999.

Configuration Verification: Finsemble now checks for required config items, and verifies that they are valid types (string, object, etc.) during start-up. It will now spit out a helpful error that can prevent one of those multi-hour "d’oh!" debugging sessions.

Polishing the Seed Tutorial: The Finsemble seed project is the best path for developers new to Finsemble waters to get their sea legs. We spent some time providing additional refinement to the seed project tutorial, which you can see here.

2.2

Released 3-2-2018

**The New ChartIQ knows that workflows are the thing that users actually care about. With Finsemble 2.2, we bring additional tools for end users so they’re empowered with customized, elegant workflows.

Search: This release delivers the Search API Client. Since your application’s infrastructure will be unique to your organization, our search architecture and returned results are very pluggable. For instance, you could plug in an elasticsearch instance or security master to power your search. To facilitate this, the Search API Client provides federated search results: it can search each installed provider and display unified results that your users can act on.

  • This automatically includes search across apps and workspaces.

Hotkeys: We added a number of global hotkeys!

  • Components can register for a callback when a hotkey is pressed, even if the app is not in focus.
  • Finsemble provides automatic support for assigning hotkeys to launch components.

User Preferences: We’ve implemented user preferences in Finsemble. Users can now:

  • Import and export workspace templates. This allows users to create and share the configurations that are most effective for their workflows and share them.
  • Rename workspaces.
  • Create new workspaces based on a template.
  • Specify which workspace will load on start-up.

Additionally, developers can now create UI that allows users to overwrite application-level config with their own preferences.

The Improved

Native Apps: We’ve participated in an ongoing effort to have Finsemble coordinate the actions of all your apps, whether they’re native applications or HTML5. Assimilated components now have equal footing with all other components.

UX Improvements: We’re continuing to polish our UX until it’s squeaky clean.

  • App Suites: We've implemented the ability to have developer-defined groups of windows that can be brought into focus with a click.  

  • ALT+TAB: Grouped windows now possess a single icon, allowing users to ALT+TAB between groups.  

  • Bring All Windows to Front: The toolbar now has a “Bring All Windows to Front” button. Users can now bring related components to the front together, even if they are not spatially adjacent on the desktop. Groups can be summoned by Linker channel, or by shared window identifiers.  

  • Drag and Drop Pins: Pinned workspaces and components can now be reordered on the toolbar via drag and drop.  

  • Hyperfocus: Users can also minimize all windows that aren’t related by SHIFT+Clicking on the 1) Dock icon 2) Reveal App Suit icon or 3) Linker Channel color.  

  • Minimize All: The toolbar now has a “Minimize All” button.  

It’s important to note that all UX improvements work with native apps!

Storage Service: The Storage Service can now utilize “topics,” allowing developers to determine where their data is saved. This allows developers to save some data locally and other data to the network.

2.1

Released 2-1-2018

This release is certified with OpenFin version 8.56.26.50.

The New

Take a Walk on the Client Side: Finsemble breaks down the borders between windows on the desktop. With Finsemble, developers can create a deep level of interaction between disparate applications using client-side integration. Release 2.1 introduces two new tools to help developers coordinate HTML5 and native applications: the Storage Adapter and the RPC Service.

By default, calls to the Storage API save data to localStorage by way of a Storage microservice. However, the Storage microservice can be adapted to suit your purposes with, well, a Storage Adapter. If you want to utilize a data store besides localStorage—such as a cloud or network based name/value store or database—you can simply create Storage Adapter to interface with that data store and plug it in. We added the default Storage Adapter for localStorage to our seed project repo so developers can clone it and spend some time tinkering.

The RPC Service grants the functionality of the Linker Client to assimilated native applications (e.g., WPF forms, .Net components, Java apps) so that they can synchronize with HTML5 components. For instance, a native component can be linked by stock symbol with an HTML5 component. Now, interoperability is even easier between HTML5 and native desktop components.

The Ecosystem Evolves: The best in fintech is becoming available through Finsemble. Both Salesforce, a leading CRM, and Symphony, a secure chat client, are now part of the Finsemble ecosystem.

Salesforce Contacts, Accounts, Opportunities, and Leads are available within Finsemble as individual components. These components can share data with one another or external third party applications through our Linker API. Salesforce components can also be primed to listen for external activity (such as a phone call or a chat message) and can automatically log that activity as a task for the appropriate Salesforce record.

Symphony contact lists and chats have been primed with Finsemble code, allowing Symphony to serve as a central hub. Advanced charts, research reports, etc., can be shared in a Symphony window via drag and drop. Likewise, Symphony activity can trigger an event in another component—such as a request-for-quote workflow.

The Improved

  • Assimilation: We fine-tuned the behavior for snapping, docking, and moving grouped assimilated windows.
  • Workspace Service: The Workspace Service now supports restoring assimilated components.
  • Storage Service: We included support for the newly-minted Storage Adapter.
  • WindowClient: Finsemble components are injected with a Finsemble window header bar. Previously, this addition might discombobulate a component if it makes heavy used of fixed CSS styles. Now, a custom header can be injected with optional CSS to allow for better compatibility with more sites. The header can also be delayed until after startup.
  • Presentation Components: The App menu now dynamically resizes to accommodate ad hoc components added by the user.
  • Miscellaneous: Finsemble now automatically adds the "finsemble" class to the root "html" element of all components. Designers can use the existence of this class to know that their application is running on a desktop, and respond with appropriate styling and layout.

2.0

Released 12-01-2017

We’re pleased to present Finsemble 2.0. This release is a culmination of significant new features, performance improvements, and API enhancements. Though the Finsemble dev team is always iterating, this release is a significant refinement of the tools provided to create multi-window desktop applications. We've also integrated with OpenFin's V8 release, leveraging the advantages therein.

Sample Presentation Components: To show how simple it is to customize components, we’ve created a suite of UI controls built with React. Each control provides a single piece of UI functionality, like checkboxes or drop-down menus. Using these controls, we assembled an array of sample components called presentation components. These presentation components are built like every other Finsemble component, and offer a beautiful out-of-the-box UI. Use the sample components wholesale for your Finsemble application, customize them for your own needs, or use them as templates to build your own.

The New

A host of new features show off the real power that comes from using Finsemble:

  • Distributed Store: Finsemble now uses a distributed store data storage mechanism, which solves the "one to many" state management problem. With Finsemble’s distributed store, developers don’t even need to learn the Finsemble API to start building multi-window desktop apps.

  • Dynamic Configuration: Finsemble can now configure itself on the fly. For instance, menus can be configured based on the results of an authentication or entitlements process. Developers can provide component configurations entirely through API calls if they desire.

  • Central Logger: The Central Logger is a unified console for viewing messages across all components and services. The Central Logger will help engineers effectively debug operations that occur across multiple windows.

  • Native Application Integration: You can now bring any external application into Finsemble using our Assimilation technology. For situations where a deep integration is not desired or feasible, Assimilation allows you to quickly manage (launch, move, dock, and group) external desktop apps within your Finsemble application.

The Improved

We’ve fine-tuned the Finsemble framework in a number of ways:

  • Process Splintering: We’ve implemented splintering, a performance feature that lets Finsemble distribute its memory and CPU footprint across multiple OpenFin browser processes. This allows Finsemble to run lots of powerful components simultaneously. Splintering also isolates components so that the entire application can’t be affected by a single badly behaving piece of code.

  • Snap and Dock Improvements: Snapping and docking responsiveness is improved, with better real-time tracking to provide much smoother window movement along with improved snapping behavior.

  • Start-up Time Improvements: We continue to focus on performance improvements across the system. Most notable for 2.0, initialization time for the FSBL preload script has been reduced by 60%.

  • Hot Reload: We’ve added the ability to hot reload your Finsemble components, reducing your built-test cycle during development. This was implemented through Webpack by adding custom middleware to the component build process that allows your changes to appear instantly.

  • Multi-Monitor Bug: Fixed some bugs related to how Finsemble supported adding and removing multiple monitors.

  • Window Dragging Bug: Fixed an edge case where Finsemble "misses" an attempt to click and drag a window.

  • Minding our Ps and Qs: Good code is supported by good documentation. We’ve been cleaning up and improving our documentation so it’s easy for developers and code-crafty people to understand the choices we’ve made and the functionality we’ve implemented.


1.4.0

Released 11-03-2017

Drag And Drop Client: Drag And Drop Client is out of beta. Documentation. Tutorial. With very little code, users can:

  • Drag and drop data between components using the drag icon. Auto-highlight windows that can and cannot receive data.

  • Drag and drop items from within components

  • Easily share dropped data over applications like chat

  • Automatically use the linker to open linked windows or open pre-linked windows with shared data

New Beta Features

  • UI Controls - Substantial additional granularity for UI customization
  • Splintering - Allows splitting of components into separate processes
  • Hot Reload - Developers can see their changes in real time, without restarting the application
  • Dynamic Configuration - Finsemble can now configure itself on the fly (for instance, by user authentication)
  • Central Logger - Allows easier debugging and error logging across components

Core Changes

  • ConfigClient.get() parameters changed
  • Improved performance of dialogs created using DialogManager
  • LinkerClient now uses the distributedStoreClient, internally boosting performance
  • Improved workspace saving performance

Core Additions

  • Added system tray icon

CLI

  • Angular support in the CLI
  • Improved CLI error handling

Premium Component Updates

  • More consistent styling
  • Less resource intensive charting

Bug Fixes

  • Config macro (replacement of strings starting with $) bug fixes
  • Launcher Service crash on invalid URLs in config fixed
  • Fixed a minor docking edge case
  • Fixed an error with workspace restoration

1.3.0

Released 09-18-2017

Docking Docking is out of beta

  • Window edges snap to each other and the monitor edges
  • Resizing by grabbing snapped window edges and corners resizes all snapped windows together

  • Snapped windows that form a rectangle resize proportionally as a group from the outside edges

  • Snapped windows show a dock icon and clicking the icon will dock all connected windows together
  • Docked windows move as a group

  • Outer rectangular boundary of docked groups snap to other windows, groups and monitor edges

New Beta Features

  • Data Store Client Beta: A data store similar to Facebook's Flux that can be used across components, clients, and services and fires events on data changes
  • Drag And Drop Client Beta: New Finsemble Client that allows for easy dragging and dropping of data between components

Sample Component Updates

  • Fixed issues with menu automatic sizing
  • Added ability to customize toolbar and menu items via config
  • Toolbars and Menus load faster

Core Changes

  • Breaking Change: FSBL.Clients.StorageClient.get now returns what you save. If you send in a string, you receive a string back. If you save an object, you get an object back. If you are using the storageClient, make sure to remove any JSON.parse calls inside of your callbacks.
  • Breaking Change: FSBL.Clients.LinkerClient functions now require a windowIdentifier instead of a windowName to allow the linker to work across separate Finsemblized applications (different uuid).
  • Linker window performance improvements
  • Improved overall component loading performance

Core Additions

  • External OpenFin applications can be spawned using Finsemble. See the updated spawn tutorial.
  • FSBL.getVersion(cb) will now return the Finsemble Version.

CLI

  • Ability to generate mind control components using the cli

Bug Fixes

  • Several workspace saving and restoration bugs fixed
  • Fixed issues with Finsemble window header that caused some windows to not be movable from some spots on the window header.
  • Fixed focus issues with dialog manager created dialogs

1.2.0

Released 07-25-2017

  • Bug fixes.
  • Added a way to quit a Finsemble application: simply call FSBL.shutdownApplication().
  • New onShutdown event. This event allows for components to register cleanup actions to be completed on application quit. For more, see the Finsemble Lifecycle.
  • New onReady event for any client that uses the baseClient. You now can add FSBL.Clients.WindowClient.addEventListener('onReady', cb). This is unlikely to be used unless you're creating a custom component. Note: We still have FSBL.addEventListener('onReady', cb).
  • Configuration Enhancements
    • Openfin manifest now modifiable in the seed project at configs/openfin/manifest-local.json
    • Config variables (e.g. $applicationRoot) supported in JSON config files for added flexibility
    • See updated Configuration tutorial for more information.
  • Finsemble-CLI has a new command: finsemble-cli kill. This will kill node processes that our build process spins up, as well as any lingering OpenFin processes.
  • Mind control improvements:
    • Can now specify an array of files to include in your components - Documentation
  • Toolbar and App Launcher enhancements - Documentation
    • Toolbar config now has a menuItems property to customize the items on the Toolbar
    • App launcher can now filter elements shown dynamically

1.1.0

Released 07-05-2017

Changed

  • Bugfixes and performance improvements.

Added

  • Documentation updates
  • Alpha version of assimilation
  • LauncherClient improvements (e.g., better handling of monitor-connections/disconnections)
  • Allow all system components to be turned off (e.g., menus, dialogs, etc.)

Enabling Assimilation: To turn on assimilation, you will need to modify two files.

  1. First, you need to make sure that the The betaFeatures.assimilation property in configs/application/config.json matches the config below:
"assimilation": {
	"enabled": false,
	"appAssets": [
		{
			"src": "/hosted/assimilation.zip",
			"version": "1.0.2",
			"alias": "assimilation",
			"target": "CppWindowsHook.exe"
		},
		{
			"src": "/hosted/putty.zip",
			"version": "1.0.0",
			"alias": "putty",
			"target": "putty.exe"
		}
	]
}

The appAssets property is an array of external assets that are bundled and delivered with your application. The first application in the array above is our application that brings native windows programs into Finsemble's snapping and docking; it also allows you to bundle your own applications and have them participate in the workspace. The second application is simply an example. To open it, launch NativeTest from the "Apps" menu on the toolbar.

  1. Make sure that finsemble-seed/server/FinsembleConfigs.js matches what's on GitHub.

The major changes here are bandaids. Soon we will allow you unfettered access to the OpenFin manifest. Since it is currently unavailable in the seed project, the code we've added will prepend your application's baseURL to your external assets. If you want to host assets on another server, simply put the full path in the src property of your external asset. We assume that any external application without http in its src is hosted alongside the rest of the application files (e.g., http://localhost:3375/yourSubDirectory/hosted/externalAsset.zip).

  1. To add your application to the app launcher, make sure the config below is in your components.json file. Replace the alias property, the key, and the id with information related to your native application.
"NativeTest": {
	"window": {
		"id": "NativeTest",
		"native":true,
		"alias": "putty",
		"path":"",
		"url":"",
		"defaultHeight": 600,
		"autoShow": true,
		"alwaysOnTop": false,
		"resizable": true,
		"showTaskbarIcon": false,
		"contextMenu": true,
		"addToWorkspace": true
	},
	"component": {
	},
	"foreign": {
		"services": {
			"workspaceService": {
				"isArrangable": true
			}
		},
		"components": {
			"App Launcher": {
				"launchableByUser": true
			},
			"Window Manager": {
				"persistWindowState": false,
				"FSBLHeader": true
			}
		}
	}
}

If you get stuck trying to add your own application, send us a note at [email protected] or send us a message on slack.

1.0.0

Released 06-30-2017

This is the first official release of Finsemble.

New Features

  • Snapping windows: Windows now snap to monitor edges and to each other, making it quick and easy for users to assemble their ideal workspace. Snapping is automatically enabled (supported by a new service "dockingService").

  • Mind Control: Allows JavaScript to be injected at run-time into select components. You can use this JavaScript to modify the behavior of the component by interacting with the FSBL API. See the Integrating HTML Applications tutorial for more information.

API Changes

  • Support for storage adapters now allow developers to save data to locations other than localStorage. Also, the Storage Client is enhanced. See the Storing Data tutorial for more information.

  • LauncherClient has been significantly revised to make component launch more flexible. The new model uses a paradigm based off of CSS div positioning, with the capability of targeting specific monitors or launching components in positions relative to other components. A new "windowIdentifier" paradigm allows windows to be referenced more flexibly. Components can now be set to spawnOnStart and spawnOnAllMonitors. They can also generically make claims on monitor space - to support building custom toolbars. See LauncherClient#spawn and LauncherClient#showWindow API calls.

These are breaking changes from the Beta release - any calls to spawn() should be rewritten to use the new parameters.

  • The RouterClient now dynamically selects an underlying transport. For cross-domain components (i.e. components not on the same domain as the Router Service) an OpenFin-Bus transport is selected. For same-origin components a faster ShareWorker transport layer is selected. With these enhancements, RouterClient initialization is no longer synchronous, requiring a call to RouterClient.onReady() before using other Router method; however, this is transparent to components that only access the RouterClient though the FSBL object (i.e. the RouterClient is preinitialized in FSBL).

These are potentially breaking changes from the Beta release - Application should either use the RouterClient in FSBL (or for services inheriting from the Base Service, reference the preinitialized this.RouterClient) or call RouterClient.onReady() before invoking other router methods.

  • WindowClient now offers fitToDOM() method that allows a window's height to automatically be resized to fit its DOM contents. This is useful for elements such as menus that have variable height.

  • A new ConfigClient provides run-time access to Finsemble configuration. See the Configuration tutorial for more information. If you participated in the Beta and wish to retain you project, then your config files will need to be modified to the new format. See "Upgrade Steps" below.

  • The Finsemble Toolbar is no longer required. If you would like to disable, simply remove the ToolBar entry under components in configs/application/config.json.

New Beta Features

  • Window grouping: Snapped windows "fuse" to form window groups. A window group can then be moved by the end user, for instance from one monitor to another monitor. Window grouping is undergoing user testing and is released as a beta for feedback. To enable window grouping set the docking.enabled flag in the configs/application/config.json file. We're currently working out the kinks in this feature, it should be enabled by default in the coming weeks.

  • Assimilation: Allows Finsemble to launch native applications from the toolbar which participate in snapping and workspaces. See the assimilation tutorial for more information.

Other Improvements

  • Adaptable Blotter from http://www.adaptabletools.com/ is now available as a Finsemble component!
  • Auto Arrange can now be reversed with a second click.
  • The build process (npm run dev) has been improved to increase speed.
  • Application startup time has been improved.
  • Support for OpenFin version 7.x
  • Finsemble is now loaded via OpenFin's "preload" capability. This means that it is reliably available on any component, even cross domain!

Upgrade Steps

  1. Copy your custom services/components/clients that you've built during the beta period into another folder.
  2. Update your seed project. We've made many enhancements to the build process and configuration files - too many to give you a clean step-by-step upgrade process. A fresh clone from GitHub should be all you need to do.
  3. Delete from under your user directory AppData\Local\OpenFin\cache.
  4. Copy your files from your temporary folder back into their respective folders inside of ./src/.
  5. Make sure that your terminal is logged in to NPM.
  6. run npm install.
  7. run npm update -g @chartiq/finsemble-cli;
  8. run npm run dev.

If you have problems, contact us.



0.4.1

Released 05-19-2017

  • Added placeholder and hooks for authentication. See the Authentication tutorial for instructions on building your own authentication component. The tutorial also includes information on disabling authentication.
  • The authentication placeholder (i.e. the included sample code) prompts for username and password on startup. All storage is now keyed off the username, so the configuration of the application is determined by the entered username (new usernames automatically become new users). The password field is ignored in the placeholder...any password works.

0.4

Released 05-02-2017


0.3.1

Released 04-21-2017 Minor bug fixes Fixes

  • Direct chat component to the correct URL.
  • Fix some icons issues in the toolbar and windows taskbar.

0.3.0

Released 04-19-2017 You may be wondering, "Where is 0.2?" The short answer is that Brad messed up bumping the NPM version. So 0.3.0 is what we're working with. Hope you enjoy the new features!

Added

  • User defined components - Through the App Launcher, a user can now add their own components (Your own web pages,Google, CNN, etc.) and see them in the App Launcher.Currently, these do not persist in workspaces.
  • Allow developers to set UUID, Port, and host for local, dev, staging, and prod environments.
  • Added way for users to add storage adapters.
  • Added support for hosting Finsemble apps on relative paths.
  • Cleaned up top-level API responses (you should parse response instead of response.data inside of API Calls. If responding to a router request, still parse response.data).
  • Workspaces can be pinned.
  • New look and feel for the toolbar, window header, and dialogs.
  • bug fixes.

Changed

  • Documentation fixes.

Migration steps We're aware that making changes to your project's structure is a huge pain - we certainly don't intend on making this process commonplace. For this release, however, there are several changes to the underlying application bootstrapping/build process.

There are two paths to migration:

  1. Copying the components that you've already created into a fresh copy of the seed project, or
  2. Modifying your project to match the new configuration.

Copying Components

  1. Clone the seed project into a different folder.
  2. Run npm install.
  3. run npm update -g @chartiq/finsemble-cli
  4. Use the CLI to create your components.
  5. Copy src/components from your old seed into the root of your new project.

Try to run npm run dev. Contact us if this doesn't work and we'll jump on a call to figure out what isn't set up properly.

Modifying your existing project

  1. Replace src/node_fileserver/FinsembleConfigs.js with the file in the seed project on the master branch.

  2. create configs/startup.json; copy contents from the master branch of the seed project and put in the desired port/hostname configuration.

  3. Modify gulpfile.js

    • On line 9 paste var StartupConfig = require("./configs/startup");. Make sure to update any locations using a port number to the use startup config.
    • Replace line 143 (configPath inside of the launchOpenfin command) with configPath: StartupConfig[env].serverConfig.
    • In the gulp task devServer change launchOpenfin() to launchOpenfin("dev") Also, change all launchOpenfin function calls to the correct environment. The will match up to your startup config.
  4. run npm install.

  5. run npm update -g @chartiq/finsemble-cli;

  6. run npm update @chartiq/finsemble;

  7. run npm run dev. If it doesn't work, contact us and we'll jump on a call with you.

We apologize for the extensive changes. It's unlikely that we'll do this to you again.

The Finsemble Dev Team.

Misc Integration notes:

  1. If you have components from a previous release, that you based on our tutorial on building an application, make sure to remove this rule from your CSS.
* {
	display: block;
}

If you don't, you'll get some lovely CSS plastered on the background of your component's DOM. 2. If you're playing with accountList/accountDetail from the tutorial, make sure your call to LauncherClient.getActiveDescriptors parses response instead of response.data.