Container overview

OpenFin Container is a desktop runtime application environment that enables communication between all of your apps (web, legacy, third-party) for the enterprise desktop. It is built on top of Google Chromium and GitHub Electron and combines advanced interoperability, lightning-fast distribution, and robust security with an agile web development and deployment model.

Any web app that runs in Google Chrome can run on OpenFin OS unmodified and in a matter of seconds. With OpenFin, developers write 99% of their code with standard HTML5 and the JavaScript frameworks of their choice, including React and Angular. OpenFin APIs (usually <1% of code) enable windowing, interoperability and system access.

The Platform API is a key component of OpenFin Container. This article provides a high-level explanation of the components of the Platform API.

Platform provider

The platform provider is the communication hub that coordinates among all the windows in a platform application. The provider runs in a hidden window and enables application providers to extend or overwrite default platform behavior through platform overrides. This is where you can control how your application will look and feel to create a custom branded experience.

Platform window

Platform windows act as a “frame” for your platform views and can display UI controllers such as minimize, maximize and close. These are child windows of the platform provider and may contain one or many platform views.

Platform view

Platform views provide your application's content and they reside within a platform window. The content (a web application) is loaded into a view and attached to a platform window. Views have their own JavaScript context that is distinct and unconnected to the window’s context; they have no DOM representation within the window. This allows views to move between windows without refreshing or otherwise destroying the context. Views can be tabbed or tabless and enable the end-user to arrange the layout of a platform window. For optimal performance, it is worth noting that views can be split into as many renderer processes as needed via the processAffinity option at the view level or the processAffinityStrategy option at the platform level.

Layout management

Layout management enables applications providers to programmatically embed multiple views or “web apps” in a single platform window. Refer to Organize views with layout.

Snapshot

A snapshot defines an arrangement of platform window and view to be launched into a platform application. When a snapshot is added as a top-level option in a platform manifest, the platform launches with that snapshot by default. Application developers can replenish or restore saved configurations while the platform application is running.

Platform manifest

This is the file that defines how an OpenFin platform application works and tells the OpenFin Runtime what your workspace looks like at launch.

Process affinity

By default, all child windows of a platform provider share a single renderer process, if they use content from the same origin. You can assign views into multiple processes by providing a processAffinity option; views with the same processAffinity value share a process. So, you can have two or more views share a process separate from other views. This can be quite useful in architecting your application for views that have a heavier memory profile.

You can also define whether a platform provider tries to keep views in the same process or different ones. The viewProcessAffinityStrategy option in the platform configuration can be set to "same" or "different". Setting this preference at the platform level can be simpler and more robust than handling process affinity at the view level.