Nodelab is a product for visualizing and analyzing data. It is part of the Uninode® Suite. Read More About Uninode®

Nodelab is based on 25 years of experience developing analysis products from scratch, including scenario-based and realtime financial risk analysis.
It uses insights and best practice from software development tools to enable a similar style of agile sketching of data models and visualizations during development and stability during deployment.


Nodelab uses a container environment, with a backend Java/Spring server, called Nodelab Engine, and a frontend NGINX/Angular server, called Nodelab Control. It also uses a database for storing and caching configurations and data. Read More



Nodelab uses the Edgescript® programming language for various dynamic behavior, like class definitions and visualization page definitions. Read More About Edgescript®

Since Nodelab is integrated with Edgescript®, almost all configuration is expressed as code, including

  • data models (classes),
  • parsing of complex file structures,
  • advanced queries with UNQL ( read more about UNQL ),
  • user interface building, similar to SwiftUI,
  • periodical or manually initiated complex, asynchronous server calculations,
  • storage format for no-code drag-and-drop programming,
  • wrapper for calls to remote servers and processes, including machine learning, and
  • simulations and synthetic data generation

Other data analysis products have the option to add scripting to the workflow, e.g. Python and R.
In Nodelab, Edgescript® is more like a unification of Excel cell scripting and VBA programming, but with a syntax that is similar to Swift and Java.
Read more about a complex example.


UNQL, the Uninode® Query Language, is a communication protocol between clients and server. Since the server can be utilized by other consumers than the specific Nodelab frontend, UNQL has a JSON format, with some data expressed as Edgescript® expression strings. Read More About UNQL

Access Control

Nodelab uses Keycloak for access restrictions, which is an industry standard solution.

In addition, an administrator can grant access rights based on page, package and organization. These secondary access rights can be used for page access and data access to individual properties and even data points.

Data Versions

Data access is similar to a GIT repository.

  • A deployment may have a number of repositories. It may have a main repository
  • A repository may have a number of branches. One is the master branch.
  • A branch may have a number of versions. One is the head version.
  • A version may have a number of version sources.
  • A version source associates a version with a record source, and adds some meta data like validity span.
  • A record source contains a set of records, e.g. an Excel file or realtime API access parameters.
  • A record is associated with a Uniclass.
  • A pattern defines how to parse a data feed into a set of records.

Read More

Record Sources

Each record, i.e. database row or instance, has a reference to its record source, e.g. a file or a parameterized API call. This makes everything traceable and filterable.

When a record source is replaced by an updated source, the data version includes the new record source instead of the old. If it is an update of the same version, the data of the old record source is no longer reachable, and will be removed during a cleanup operation. If the new data is part of a new version, the old data can still be reachable using the old version.

Data Layers

Data layers are used as filters of data. You can associate data with a layer in a hierarchy of layers. Data associated with child layers shadow data in parent layers. You can then specify which layer (and its parents) you want to collect data from. It resembles layers in image editing tools.

For instance, you may have a top layer with automatically generated data, a child layer with revised data, and another layer with experimental data.



The main purpose of Nodelab is to integrate and visualize data from various sources.

The interactive pages are defined with Edgescript® code, similar to how it is done with SwiftUI.
The components can be connected using state references, i.e. clicking on a component may update the content of others. Such connections are automatically setup if there are state references in Edgescript® code.

Angular Editor

There is a Edgescript editor, implemented as an Angular component.


There is a Query page for ad hoc UNQL requests.

Legacy Replacement

Nodelab can be used for phasing out legacy systems.
A Nodelab server can be installed in parallell with a legacy system, and incrementally take over tasks of the legacy system, like visualization, analysis and editing.

Edgescript® can be used for communication with other legacy systems using proprietary protocols.

When the Nodelab server has implemented all relevant parts of the legacy system, the legacy system can be retired.

State Machine

Normally, the Nodelab server is stateless, with a few caches holding data for a limited time.
However, Nodelab can be used as an advanced state machine, keeping track of a large set of states.

For instance, this is required for building a realtime financial risk analysis platform.
Realtime feeds continuously updates asynchronously calculated values, which may vary for each user and position filter. A state machine can keep track of changed dependencies and recalculate only when required.

File Structure


Each Nodelab installation has a file structure for configuration.
Parts of this file structure is stored in a repository like GIT, to allow for modification from multiple admins and to track changes. Read More


A site is the top level in the Nodelab structure. Normally, a deployment has only one site, but multiple sites are allowed, e.g. if a developer wants an overview of multiple deployments for different clients.

A site may contain multiple different packages and data repositories.


A package contains data models, patterns and user interfaces associated with those data models.

Data models are defined as Uninode® and Edgescript® classes.

Patterns are Edgescript® code to parse data sources into databases.

User interfaces are defined with Edgescript® code, similar to SwiftUI.

Usually, packages are global, versioned and shared, so changes are accessible for all relevant clients and consumers. A package may also be local and restricted to a specific site.

A project is a special package that is edited by a named editor. It may be shared for other named users. The editor may create classes and pages as well as upload files. A project may be converted to a package.

A package may contain multiple different organizations and apps.


An organization is used for dividing data and data access into separate blocks. An organization may be a client or a client department with separate access grants.


A Nodelab app is a set of page definitions. Normally, a Nodelab package contains one app, but multiple apps can be used if different groups of users have different interaction needs.


Nodelab is based on various products and insights from several decades of software development.

  • Bali, an equity, currency and interest analysis tool used by Swedbank traders 1996-2000.
  • Powerpilot, a scenario-based risk analysis tool used by Nord Pool, the nordic power clearing house, 2003-2010.
  • Positionpilot, a realtime financial risk analysis product for traders used by Pan Capital since 2010.
    Nodelab is an improvement of the Positionpilot code.
  • Castle, a POC for compliance calculations and visualization.


Contact Oak Analytics for pricing.