Modelix Update 24.2

This article gives you an update on what happened in the Modelix project since the Modelix Platform release 24.1.

Firstly, we have decided not to release any more platform versions. There is so much development in between that we don’t want to encourage users to use outdated versions of infrequent releases of the platform versions. When you start using Modelix, get the latest versions of the components and keep them up to date. Our components use semantic versioning and changes are released on a daily basis.

We still want to keep you informed with blog posts like this. The following summarizes the highlights since the last update.

Features

Model-Server: Support for authorization

You can now enable authorization on the model-sever to give users limited access to model data. You can limit a user’s access to specific repositories and branches or also specify whether they can only read data, write data or even rewrite the history of a repository.

The authorization requires JWT tokens that specify a user’s permissions in a specific claim. Such JWT tokens can be created by appropriately configured OAuth providers or by custom services.

Model-Server: Indices and Caching for ModelQL

To reduce the runtime of complex queries and to reduce resource consumption, indices and caching were built into ModelQL.

The following example shows how to cache the count of nodes that match a complex filter in ModelQL.

val countOfNodes = client.query { rootNode ->
   rootNode.memoize { rootNodeInner ->
       rootNodeInner.descendants(true).filter { it.someComplexFilter() }.count()
   }
}

Example for caching the count of nodes that match a complex filter in ModelQL

Model-Server: View for changes between model data versions

The model-server now provides a UI to explore changes between versions of data in a repository.

UI showing changes in between versions

Optimizations for bulk synchronization

The synchronization of data from a model-server to MPS can now be done faster. When you know the version you synchronized to MPS the last time, you can now specify it as a base revision. In that case, the bulk synchronization utilizes efficient diffing between versions to only synchronize changed nodes.

Improvements

Rework and stabilize API for Vue.js

After incorporating user feedback, we declared the API Vue.js as stable and will avoid breaking changes.

Refactoring execution of ModelQL queries

To achieve better performance in ModelQL queries even without indices and caches, the ModelQL execution was refactored.

Experimental Features

Projectional text editors for the browser

Modelix is working on rendering projectional text editors in the browser.
For that an internal Kotlin-based DSL to define such editors was built and open sourced under the Modelix organization.

In June, the Modelix team gave a webinar about building modeling tools with Modelix. At the end of the webinar, those new components for web editors were demonstrated. You can request access to the recording on the website of itemis.