Concepts

Jmix is a development platform that includes the framework, add-ons, and the Studio IDE.

If you just want to get a high-level overview of Jmix, look at the diagrams below and watch the 7-minute video on YouTube.

To learn about the ideas behind Jmix and get to know its capabilities, as well as answer questions like "why does it work like this?", read the Principles and Feature Overview sections. This will help you make informed decisions and use the platform more effectively.

Architecture Overview

Below you can find a few diagrams in C4 Model notation that show a birds eye view of the Jmix landscape.

Containers

First, let’s divide a typical information system built with Jmix into containers. A container here is a separately runnable/deployable unit that executes code or stores data.

architecture containers.drawio

As you can see, the main part of the system includes a web application running on JVM and a relational database. 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 Elasticsearch for full-text search through the application data, and with an OIDC (or LDAP) server for external authentication and SSO.

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 with 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.

Components

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

architecture jmix application.drawio

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.