Welcome to Vuu. For full documentation, architecture diagrams, and deep dives, visit our documentation site: 👉 vuu.finos.org
This repository contains the source code for the Vuu server and a suite of UI library packages.
We have recently decoupled the web hosting layer from the core Vuu engine to provide greater deployment flexibility:
- WebSocket Layer: This remains built-in to the Vuu server to handle high-performance, real-time data streaming.
- HTTP Server: Vuu no longer includes a built-in HTTP server for REST endpoints or static file hosting.
To establish a complete client session (e.g., from a UI), you need an external HTTP layer to supplement the Vuu WebSocket service. For a quick-start experience, we provide a reference implementation using Vert.x in the examples/http2-server folder.
The UI scripts all run from the vuu/vuu-ui directory.
# Clone the repository
git clone [https://github.com/finos/vuu.git](https://github.com/finos/vuu.git)
cd vuu-ui
npm install
npm run build
npm run build:appThe first build step (npm run build) builds the UI library packages, the packages are written to the dist folder.
The second step (npm run build:app) builds the sample application. Application bundles are written to deployed_apps. The UI library packages are dependencies of the application.
- Java 17+
- The example client code has already been installed and is ready in
deployed_apps
# From the root folder, build both the core project and the examples
./mvnw install -DskipTests
# Navigate to the reference implementation in the examples folder
cd example/main
# Start the example server (with HTTP REST endpoints and Vuu WebSocket)
../../mvnw exec:exec# From the root folder, build both the core project and the examples
mvnw.cmd install -DskipTests
# Navigate to the reference implementation in the examples folder
cd example\main
# Start the example server (with HTTP REST endpoints and Vuu WebSocket)
..\..\mvnw.cmd exec:execYou may prefer to run the backend using the IntelliJ IDE instead of from the command line.
- Install the Scala plugin: file -> settings -> plugins
- Set project SDK version to 17: file -> project structure -> select an SDK -> require version 17
- Enable 'Use plugin registry': file -> settings -> build, execution, deployment -> Maven
- Open Maven tab on the right and click install on vuu-parent -> lifecycle -> install
- In IntelliJ, select the 'SimulMain' run configuration config and click run.
Once launched using one of the methods above, the demo app can be accessed at https://localhost:8443/index.html
While serving the Sample UI application directly from the Vuu server is convenient for initial testing, real-world deployments typically decouple the UI from the server.
The Sample UI is designed with a modular, metadata-driven architecture. This allows the client to connect to any active Vuu server instance, making it an ideal setup for testing new server implementations or mimicking production environments.
Before running the UI in decoupled mode, ensure you have the following:
- Active Vuu Server: A running Vuu server instance (ensure it is not locked behind a production-grade authentication solution for this demo).
- Built Client: The UI must be built and located at
./deployed_apps. - Network Access: The Vuu server can be on a separate machine; it is not required to serve the client UI code.
Execute the following command to serve the application locally and target your Vuu server.
Note: This example assumes the Vuu server is running on
localhostusing default ports. Adjust the URLs accordingly for remote deployments.
npm run launch:app -- --authurl https://localhost:8443/api --wsurl wss://localhost:8090/websocketThe application follows a standard handshake process to establish data streams:
- Sign-In: A login screen will be displayed upon launch.
- Auth Request: The credentials entered are sent to the --authurl.
- Token Exchange: The Vuu server (using the default example implementation) validates the request and yields an Auth Token.
- WebSocket Handshake: This token is then used to authorize and open a persistent websocket connection at the --wsurl.
To avoid "Same-Origin Policy" (CORS) issues during the authentication phase, the local HTTP server serving the UI proxies the auth request to the Vuu server.
Cross-domain WebSocket requests are not subject to the same same-origin restrictions as standard HTTP requests. Therefore, the UI can establish a direct connection to the Vuu server's websocket port without additional proxy configuration.
Work In Progress!
For any questions, bugs or feature requests please open an issue.
To submit a contribution:
- Fork it (https://github.com/finos/vuu/fork)
- Create your feature branch (
git checkout -b feature/fooBar) - Read our contribution guidelines and Community Code of Conduct
- Commit your changes (
git commit -am 'Add some fooBar') - Push to the branch (
git push origin feature/fooBar) - Create a new Pull Request
NOTE: Commits and pull requests to FINOS repositories will only be accepted from those contributors with an active, executed Individual Contributor License Agreement (ICLA) with FINOS OR who are covered under an existing and active Corporate Contribution License Agreement (CCLA) executed with FINOS. Commits from individuals not covered under an ICLA or CCLA will be flagged and blocked by the FINOS Clabot tool (or EasyCLA). Please note that some CCLAs require individuals/employees to be explicitly named on the CCLA.
Need an ICLA? Unsure if you are covered under an existing CCLA? Email help@finos.org
Copyright 2022 venuu-io
Distributed under the Apache License, Version 2.0.
SPDX-License-Identifier: Apache-2.0