Architecture Overview

In this section, you can find a few diagrams that show a birds eye view of the Jmix landscape.

Jmix Scope

In the simplest case, the information system built with Jmix consists of a Java web application and a relational database:

architecture scope 1
Figure 1. Simple Jmix application

The web application is based on Spring Boot and can be written in Java or Kotlin. A relational database is used to store data of Jmix subsystems (for example, security configuration) and as a main storage of application data.

The Jmix application can connect to any number of additional data stores and use a separate file storage on a file system or in the cloud. Also, Jmix offers integrations with an OIDC or LDAP server for external authentication and SSO, and with OpenSearch or Elasticsearch for full-text search through the application data.

architecture scope 2
Figure 2. Jmix application with additional services

The Jmix application provides users with a web interface. It’s created in Java/Kotlin and XML using the Jmix UI subsystem.

You can also create a separate frontend application and connect it to the Jmix backend through the Jmix REST API or by creating custom endpoints. Note that frontend applications are out of Jmix scope, you can create them with any technology of your choice.

architecture scope 3
Figure 3. Jmix application with additional frontend

The Jmix application can be scaled horizontally using a cluster of servers and a load balancer.

architecture scope 4
Figure 4. Jmix application scaling

Jmix Components

Let’s zoom in to the Jmix application and explore its components.

architecture components 1
Figure 5. Jmix application components

A Jmix application always contains dependencies to Spring Boot and to a number of Jmix subsystems. There are two categories of Jmix subsystems:

  • Core subsystems provide system-level functionality and are included in most projects.

  • Add-ons are optional subsystems that can be included in the project on demand. The add-ons are published at Jmix marketplace.

Technically, both core subsystems and add-ons are organized in the same way. A subsystem contains one or more functional modules and corresponding Spring Boot starters, each packaged in a JAR file. A subsystem can depend on other subsystems: for example, many add-ons contain UI views that require dependency on the core UI subsystem.