ComposeUI

ComposeUI is a .NET based general UI Container and Unified UI and App host which enables the hosting of Web and desktop content. It supports desktop and web applications in order to provide an evergreen alternative to Electron, OpenFin and similar by the use of WebView2.

Lifecycle Active CI

Project Repo

Background

ComposeUI is a .NET based, WebView2 using UI Container for hybrid web-desktop applications. Our goal is to fill the feature gaps with respect to UI components, layout management, and subpar native hosting in other industry container solutions by providing a standard container as an open desktop platform. It is a hybrid solution that meets the needs of a diverse application catalog as well as a compelling opensource alternative.

Use cases

  • Supports desktop and web applications
  • Unified UI and App Host
  • Open source UI Container
  • WebView2’s evergreen distribution model
  • Cross-process messaging
  • FDC3 Support

Alternatives

Progressive Web Apps

  • Support for desktop is mostly non-existent beyond simple scenarios.
  • There is no support or roadmap for hosting native content.

Electron

  • Releases are pinned to Chromium and Node.js releases.
  • History of security issues
  • There is no integration with native window applications.

OpenFin

  • Releases are pinned to Electron releases.
  • Native integration, while existing, is more for interoperability at the messaging level only
  • incur licensing cost

Finsemble

  • Releases are pinned to Electron releases.
  • The pluggable core services can only be written in JavaScript.

Glue42

  • The core product is based on PWA
  • Same-origin restrictions
  • Limited window management

Getting Started

The javascript dependencies are managed by a lerna monorepo.

Run scripts

In the root folder

npm i

Build all modules

npx lerna run build --stream

Test all modules

npx lerna run test --stream

Building a sepecific module

npx lerna run build --stream --scope=@morgan-stanley/composeui-messaging-client

List all modules in the workspace

npx lerna list