Blog

This publication begins a series of articles about the hidden nuances and pitfalls of BPMN 2.0. Despite the widespread belief that the notation is intuitive, in practice, its implementation in a process engine can present several surprises.## BPMN: Beyond the Basics

This publication begins a series of articles about the hidden nuances and pitfalls of BPMN 2.0. Despite the widespread belief that the notation is intuitive, in practice, its implementation in a process engine can present several surprises. Analysts have it a bit easier: if something is unclear in the model, it can be written in comments or explained to the reader in words. Developers don’t have that luxury – the engine requires precise instructions with zero ambiguity. Therefore, it’s important to understand exactly how each element works.

Let’s start with the simplest one – the Exclusive Gateway.

At first glance, everything seems obvious: you place a diamond shape, draw arrows, and voilà! But what happens inside the engine? How does it choose the execution path? What if multiple conditions are met simultaneously? And supposing none of the conditions are fulfilled? In this article, we will address these questions and look at the specifics of implementing and using this element.

We will examine these using examples from Jmix BPM with the Flowable engine. Still, the principles are universal – BPMN 2.0 notation is consistent, and the core mechanisms for element operation are similar across all engines.

## A Familiar Concept, But Not Quite What You Think

Everyone has dealt with flowcharts of algorithms. As you may recall, a diamond shape in a flowchart represents a conditional IF statement, with only two outcomes: TRUE or FALSE. It seems that this is why analysts and developers, when placing an exclusive gateway on diagrams, automatically phrase questions so that the answers are “yes” or “no.”

This is a mistake! Because of this school habit, BPMN models often become unnecessarily bulky, as authors try to model decision-making strictly within the “yes-no” logic.

In reality, an Exclusive Gateway is more like a SWITCH statement than an IF statement; it can have multiple outgoing paths:

![1.jpeg]({{strapiUrl}}/uploads/1_a7f1acbba6.jpeg)

Here’s how an Exclusive Gateway would look in code:

“`
switch (forecast) {
case “rain” -> advise = “Take an umbrella”;
case “snow” -> advise = “Wear warm clothes”;
case “sunny” -> advise = “Wear sunglasses and sunscreen”;
case “windy” -> advise = “Hold onto your hat”;
case “storm” -> advise = “Stay indoors if possible”;
default -> advise = “Check the forecast for better advice”;
}
“`

There can be as many outgoing paths as needed – even 100 or more. this might make the diagram harder to read, the engine handles it effortlessly! The process can function without any graphical representation at all.

(Yes, that’s possible. You simply remove the section in the XML file that starts with the `` tag.)

Let’s continue with our previous example. If we follow the IF-ELSE pattern, the question about rain with three possible answers would turn into this construction:

![2.png]({{strapiUrl}}/uploads/2_a9adc7325f.png)

This seems a little bit complicated, doesn’t it? When looking at such a diagram, it’s easy to lose focus due to the identical answers. The first ‘Yes’ means it will rain, while the second ‘Yes’ means it definitely won’t. Meanwhile, ‘No’ indicates that it’s uncertain, so rain might still happen.

You can avoid the question entirely. Simply write clear continuation options on the outgoing flows, and you won’t have to sound like a person asking, “Could you please repeat the question?” – otherwise, it can be hard to understand the answer. For example, like this:

![3.jpeg]({{strapiUrl}}/uploads/3_cc8317f802.jpeg)

## Those who divide, divide; those who unite, unite

The purpose of any gateway is not to ask questions but to manage the branching of the process. In other words, it allows the process to split into multiple paths, which may later converge – or not, as is sometimes the case.

Exclusive Gateways can serve as ‘fork’ or ‘join’ types in the process. A good practice is not mixing these roles, so let each gateway focus on one task. Unfortunately, it is quite common to see a single gateway performing both roles:

![4.png]({{strapiUrl}}/uploads/4_3f73a6d348.png)

Never do this! A gateway should only have one role. Don’t be greedy –place more gateways so it’s clear what each one is responsible for.

![5.jpeg]({{strapiUrl}}/uploads/5_a683dddc38.jpeg)

Unfortunately, the notation doesn’t prohibit a gateway from having multiple incoming and outgoing flows. So even a complex structure like the one below will still work:

![6.jpeg]({{strapiUrl}}/uploads/6_73ed298be5.jpeg)

Is a ‘join’ gateway required after a ‘fork’ one? Not at all. The flow can simply end the process here if a condition is not met. There’s no need to drag an arrow across the entire diagram just to reach an end event.

Can a gateway have only one outgoing flow? The notation does not forbid it, such a process will deploy and run fine. However, there’s no reason to do this, unless you are still working on the process and know that you will need a fork at this point but haven’t yet decided exactly how.

![7.jpeg]({{strapiUrl}}/uploads/7_2f2cdc2776.jpeg)

## What’s Inside It?

Inside an Exclusive Gateway, there is nothing. That is, no properties or parameters can be set or configured. Nothing – just an ID and a name. When analysts write their questions above the diamond shapes on gateways, they essentially assign a text label to the element that has no effect on the process flow.

For example, here:

![8.png]({{strapiUrl}}/uploads/8_8e7d3bb063.png)

In the BPMN XML file, our gateway will look like this:

``

## About Conditions

Conditions are defined in the properties of the arrow, and they are not visible on the diagram:

![9.png]({{strapiUrl}}/uploads/9_f44b80e85a.png)

The result of evaluating a condition must be a boolean value (‘true’ or ‘false’), otherwise an error will occur.
“`
${orderAmount > 1000}
${price > 100 && price <= 500} ${accountant.username == "jane"} ``` How complex can a condition in a gateway be? Actually, the simpler, the better. However, if the logic is complex, it’s more efficient to package it in code and call the corresponding method in the condition like this: ```${weatherService.getForecastCondition()}``` ## How Does it Work? The gateway doesn’t do anything – it has no internal logic. All the logic happens on the outgoing arrows (or, formally, the sequence flows). But don’t confuse the text label visible on the diagram with the condition checked by the engine.

![10.png]({{strapiUrl}}/uploads/10_ea3d5bd0fe.png)

When the process reaches the gateway, it looks at the outgoing flows and evaluates their conditions. Every textbook says the first condition that evaluates as true will determine the path the process takes.

Is it trivial? But what does ‘first’ mean? After all, the flows don’t have numbers.

So how can we know?

Let’s take a look at the XML file:

“`

Flow_0hpfy8t
Flow_1dxinb9 (1)
Flow_1k36sg0 (2)

“`

Ah, now it’s clear! The first outgoing will be `Flow_1dxinb9`, and the second will be `Flow_1k36sg0`. But how do we figure out which is which?

Actually, it works differently. When the process reaches the gateway, the engine reads the list of outgoing flow IDs and starts looking for their definitions. The flow that is encountered first will be considered the first one.

In fact, the flow definitions can be anywhere in the XML file, so there’s no requirement that they immediately follow the gateway. The elements in the model are arranged in the order they were created. When you edit a process intensively, adding and removing blocks and arrows, the XML becomes quite mixed up. But the engine doesn’t mind.

Let’s return to our Exclusive Gateway and find the definitions of its flows. Here’s a life hack: if you give BPMN elements meaningful IDs, the model will be easier to read, and working with logs will be much simpler.

For example:

“`

Flow_incoming
Flow_rain
Flow_clear






${forecast == “rain”}


“`

Now it’s clear who’s first and who’s second. If we swap it, the processing order will change – the second will become the first and the first the second.

“`

Flow_incoming
Flow_clear
Flow_rain


(1)




(2)



${forecast == “rain”}

“`

As seen in this example, while BPMN is a graphical notation, there are situations where you need to look at the code, as the diagrams cannot always be interpreted unambiguously.

## Empty Condition Means “Yes.”

You probably noticed that no condition is specified for the second outgoing flow. What do you think will happen in this case?

If no condition is specified, it is considered true. In other words, when we swap the flow definitions, the engine won’t even calculate the expression `${forecast == ‘rain’}` it will simply follow the path labeled `’Flow_clear’`.

The developers often forget to set conditions on the outgoing flows from an Exclusive Gateway, causing the process to behave oddly – constantly veering in the wrong direction, even though the variable values are correct and logically it should be otherwise. Unfortunately, BPM engines like Camunda and Flowable do not check if conditions are set on outgoing flows during process deployment, so it can be hard to catch this error.

## Multiple Truths Are Possible

Can multiple conditions be true at the same time? Clearly, yes. This follows directly from what we discussed earlier about the order of processing. The engine evaluates them sequentially, and the conditions are not related to each other. But only one will trigger.

However, since it’s difficult to control this order in practice, you’d have to check the XML each time, so it’s better to make the conditions mutually exclusive.

If you need to implement logic where multiple options could truly be triggered, you might want to consider an Inclusive Gateway, that handles this scenario.

![11.png]({{strapiUrl}}/uploads/11_9f8ea354a0.png)

It’s also worth considering DMN decision tables, where you can implement almost any logic for choosing the appropriate option, even without writing code.

In general, DMN is a powerful and greatly underappreciated tool, which we will discuss separately.

## Default Flow

Of course, you know that it’s recommended to assign one of the outgoing flows as the default flow. Because if none of the conditions are true, the engine will throw an exception, and the process will stop. Therefore, it’s better to direct the process somewhere rather than having it fail due to an error.

![12.png]({{strapiUrl}}/uploads/12_e9e697a8cb.png)

By the way, what happens if a condition is set on the default flow? Absolutely nothing, the engine will ignore it.
On diagrams, the default flow is represented with a forward slash.

In general, it’s exactly the same as with the switch statement.

## Avoid Cascades

Sometimes, there are several questions. And then, the urge is to put multiple gateways. But don’t rush! Take a close look – if there are no real splits on this path but rather just refining the answer by filtering out invalid options, you don’t need to create a cascade of exclusive gateways. Instead, you can write a more complex condition.

Here we see to gateways for evaluating atomic conditions `Sky == blue` and `Sea == green`. (To be a pedant, you’d write `sky.color == ‘blue’`, but don’t care.) If both of them are true, the process goes further. But the model looks complicated.

![13.jpeg]({{strapiUrl}}/uploads/13_bb7b217275.jpeg)

As, for instance, here:

![14.png]({{strapiUrl}}/uploads/14_2b0c5b99af.png)

## Let’s summarize:

1. An Exclusive Gateway contains no internal logic.

2. Its name is just for better understanding by humans and does not affect the engine.

3. The Exclusive Gateway can have as many outgoing flows as needed. It’s more like a SWITCH statement than an IF statement.

4. Avoid cascading Exclusive Gateways – formulate comprehensive conditions to avoid asking too many questions.

5. Assign one outgoing flow as the default flow.

6. Transition conditions are in the properties of outgoing flows and are not formally related.

7. The engine does not check whether the conditions are mutually exclusive; they can be identical. This is the developer’s responsibility.

8. The engine checks the conditions in the order in which the outgoing flows are listed in the XML file.

9. As soon as one condition is true, the process moves along that branch, and the other conditions will not be checked.

10. If no conditions are true, the default flow will be selected.

That’s all for now! Now you’ve definitely got to know the Exclusive Gateway. Other BPMN elements also have their surprises, and we’ll continue to explore them in future articles.

Source: The Deceptively Simple Exclusive Gateway

In this webinar, we discussed the benefits of the Jmix Academic Program for professors, students, and academic enthusiasts.## Unlocking the Potential of Jmix in Academia: A Recap of Our Webinar

We recently hosted an insightful webinar exploring how Jmix supports the academic community — from professors and students to institutional innovators. Led by Viktoriia Klementeva, Community Manager, and Viktor Fadeev, Jmix Product Manager, the session highlighted the platform’s benefits, real-world use cases, and opportunities Jmix provides within the academic community.

For those who missed the session or wish to revisit key takeaways, this article summarizes the highlights of our webinar. You can now watch the full webinar on YouTube.

Jmix and Its Academic Journey

Since 2016 (originally as CUBA Platform), Jmix has provided **free academic licenses** to universities, helping educators cultivate skilled Java developers. Today, Jmix is used in **38 countries**, with over **200 licenses** issued to **70+ universities**. Our commitment remains unchanged: to make advanced technology accessible and empower future IT professionals.

![Map (1)1.png]({{strapiUrl}}/uploads/Map_1_1_749b09e82d.png)

Who Benefits from Jmix?

Jmix is a versatile platform that serves multiple segments of the academic community:

1. Professors: Jmix enables educators to teach Java, Spring Boot, and Vaadin with a comprehensive development framework that facilitates real-world learning.

2. Students: The platform provides an intuitive environment for developing academic projects and final papers without the complexities of frontend development.

3. Academic Enthusiasts: Institutions can leverage Jmix to create applications that enhance internal workflows, such as library management and scheduling systems.

A Case Study: University Rey Juan Carlos

During our webinar, we discussed a real-world example from the University Rey Juan Carlos. A professor sought a Java-based solution to meet diverse academic needs, from database design to frontend development. Jmix stood out due to its open-source nature, rapid development capabilities, and ease of collaboration. As a result, the university successfully used Jmix in classes.

## Why Choose Jmix?

– **Cost-effectiveness:** Universities can create customized applications without significant development costs.
– **Ease of learning:** Clear documentation, AI assistance, and visual tools make Jmix accessible for beginners.
– **Efficiency:** Streamlined development allows users to focus on research and education rather than technical hurdles.
– **Collaboration:** The platform supports multi-user projects, fostering teamwork in academic research.
– **Customization:** Flexible workflows and external tool integration adapt to specific educational needs.
– **Future-proofing:** Built on Java and Spring Boot, Jmix ensures longevity and adaptability in evolving technology landscapes.

![2025-03-27_14-38-47.png]({{strapiUrl}}/uploads/2025_03_27_14_38_47_f6ab314fbb.png)

How to Get Started

1. **Free Academic License:** Submit a request via our portal with proof of academic status.

2. **Advanced Options:** Professors collaborating on large-scale projects can explore Enterprise solutions. Share your use case with us, and upon completion, contribute to the academic community by publishing your results.

3. **Professor Training**

Master Jmix with our 21-hour comprehensive course, covering:

  • a. Introduction to Jmix
  • b. Jmix Security Subsystem Basics
  • c. Accessing the data layer in Jmix
  • d. Working with files in Jmix
  • e. Jmix UI development

Integrate the course into your curriculum to teach Jmix confidently. If you would like more information about the course, please leave your contact information here.

4. Certification

Stand out with Jmix Developer Certification, available at a special academic discount. It is ideal for students and educators to validate their skills and boost career prospects.

Join the Academic Community

Jmix is more than a tool — it’s a partnership. We offer Slack channel, forum, and developer support to ensure success.

Watch the full webinar on YouTube and connect with us at [email protected] to learn more!

Source: Unlocking the Potential of Jmix in Academia

2024 was the most fruitful year for content and learning materials creation. Jmix and the former CUBA Platform have always relied on detailed documentation, guides, and videos to deliver knowledge.## Looking back

2024 was the most fruitful year for content and learning materials creation. Jmix and the former CUBA Platform have always relied on detailed documentation, guides, and videos to deliver knowledge. Developers have said that CUBA Platform documentation could be used as a self-service learning course for software engineering. Now, developers can get even more, as we’ve delivered 3x times more technical content in 2024 vs 2023. Beyond that, the Jmix team launched 2 new learning courses on Udemy and rolled out AI Assistant. We’re proud that Baeldung, as a respective learning resource for Spring developers, published a tutorial about Jmix adoption.

We aim to simplify the first steps and let developers with various skill sets easily access the technology whenever they need to build a business data app or a digital SaaS product. In 2025, we’ll continue intensively generating new feature-focused content and delivering sample apps to give you more ideas about implementing Jmix tech in real-life business cases.

From a tech perspective, we’ve passed an important milestone – released Jmix Studio tools for consuming external REST API and rolled out a powerful REST Data Store concept. Both functionalities still need improvements, but significant tech decisions were made. Since Jmix 2.4, you can create distributed systems consisting of multiple interconnected Jmix applications with minimum effort. Generic REST API and REST DataStore add-ons enable developers to simplify data sharing across multiple applications, providing a seamless user experience when interacting with entities from different parts of the distributed system. If you still haven’t tested the REST DataStore functionality, follow this guide and find the new streamlined approach for building scalable and modular enterprise applications with Jmix.

In response to modern business requirements for the UI, we introduced brand new UI components: Kanban and Virtual List. Your apps may now deliver better interactive capabilities for team collaboration and mobile UI support.

Progressive Web Applications (PWA) have become an option for business applications since the Jmix 2.x generation. There is no need to support various mobile platforms, learn new tech stacks, and have minimum maintenance effort across the installation base, as PWAs are still web applications optimized for the mobile experience. To assist Jmix developers with PWA development, @Mario David released a series of learning materials, including a Wind Turbine sample app, a step-by-step guide, and a technical whitepaper covering the benefits and tradeoffs of building PWA business apps.

## Looking forward

While some open-source techs are switching back to proprietary (and back to open-source again), we remain consistent with our existing licensing model and deliver the Jmix framework under Apache 2.0. New business add-ons, bringing ready-made features, will be offered under a commercial license. Thus, there will be no changes. We remain confident in our current business model. Recently, we changed subscription prices to compensate for inflation and cover the growth of associated expenses. Now, everything is balanced, and the team has resources for community support and product value growth.

### For newcomers

A simple-first approach to web development is gaining traction, and we expect that to continue in 2025. The promise of reduced complexity of modern Spring Boot development with Jmix remains actual and drives the growth of our community. Thus, we know newcomers may still face difficulties when adopting the technology. As we stay keen on democratizing Java and Spring Boot web development for software engineers, we will roll out new Jmix features in 2025, helping adoption and getting the first results faster. Here is the list of top 3 priorities:
– AI Assistant integration in Jmix Studio for better prompting involving your project context.
– Improved reverse-engineering feature supporting not only DB but also OpenAPI project generation.
– New view templates in Jmix Studio providing more enterprise layouts.

Our team was impressed by the support of the Jmix AI Assistant initiative, which now runs over 800 questions weekly—many thanks to all early adopters and testers. We continue working on integrating AI Assistant in Jmix Studio and improving the quality of answers. In the end, the Jmix developer will get a contextualized assistant in Jmix Studio who knows about the business domain of your project and can help you manipulate the code instantly. They say – English is the new coding language*) Imagine – you tell Jmix Studio you need a CRM project to manage custom software project sales with UI and press generate. After that, you review the project and make some modifications. Your CRM project is ready for demonstration. Combined with the unified Jmix project structure and powerful dev toolchain, it will look brilliant! This is a vector for our future Jmix Studio engineering effort, and we’ll try to bring this to life.

### For regular developers

We plan impressive improvements for regular Jmix developers. The top priority is developing the end-to-end testing tool, aka. Masquerade 2.0. The Jmix team intends to deliver this in the next Jmix 2.6 release and transfer all the Masquerade 1.0 capabilities. With this feature, we’ll close the missing item for producing high-quality software with Jmix.

The next thing is the Jmix Studio feature named “Performance Tips.” We know it may be difficult for developers to anticipate how some Jmix framework configurations can affect the application in production. Thus, we decided to help developers avoid potential pitfalls by making some hints in the Jmix Studio about possible side effects on performance. Picture this. You make changes in the view descriptor of the list view and set the data loader read-only parameter to the false value. At this moment, Jmix Studio shows you a hint: “Well, this will let data context of the list view perform read and write operations every time you do manipulations in runtime. This may slow down the performance x10 times. Think twice!”. It will work like a guardrail for you. Sounds cool!

Finally, we will improve the Jmix security subsystem, making it the best-in-class enterprise development platform supporting all top-popular security providers. It will include updates in the role designer tool and a new SAML integration add-on. The Jmix team understands that configuring enterprise security is a real challenge and can take up to 30% of total project development time. Thus, we want to make Jmix the most productive and easy-to-use tool to do this job with fewer errors and following best practices.

### For a better look and feel

Group Table is the missing gem in Jmix 2.x. It was a pivotal point for former CUBA Platform users when deciding to adopt the technology. In 2025, the Jmix UI team plans to deliver Group Data Grid and close the gap between Jmix 1.x and Jmix 2.x in terms of beloved by the community UI features. Group Data Grid will be reworked according to the Jmix Flow UI concept, but we promise to make it awesome.

As the community finds it valuable to build e-commerce solutions, adding the Card List UI component looks beneficial. It will automatically present items as thumbnails and improve the user experience when navigating the product or some digital asset catalogs.

Finally, we plan to add the Jmix Studio tool, which will allow us to simplify the integration of new JS components. We have already provided examples in the UI Samples and documentation. But it still needs a lot of boilerplate code to be written, and thus, it is not aligned with our Less Code concept*) The new tool will automatically generate boilerplate code, reducing developer effort and errors.

### For business

Business add-ons are crucial when building enterprise applications and evaluating the platform as part of the corporate platform engineering initiative. In 2025, we plan to improve BPM and Reports, which are the top-rated business add-ons according to the 2024 statistics. In H1 2025, we’ll continue researching the enhancements list and announce it publicly in July 2025.

We also plan to bring the Entity Relationship Diagram (ERD) tool as a Jmix runtime add-on. Our customer success team gets feedback that when users start working with Jmix BPM and Report runtime tools, it is difficult to manage the entity model structure without opening additional DB tools or Jmix Studio. With the ERD tool, users will observe the whole data model in the Jmix application runtime and implement new features much faster and with fewer errors.

### For platform engineering teams

We see a growing trend across large enterprises and development teams building Internal Developer Platforms (IDP). The main thing platform engineering is trying to accomplish is to offload the cognitive burden that developers meet while attempting to ship software. Surprisingly, this is the same as what Jmix is struggling for! In past years, platform engineering was primarily focused on DevOps, but recently, the scope was extended to the dev tools.

Jmix capabilities can help developer teams standardize the dev tool sprawl in enterprise applications development, which are almost typical CRUD applications. In 2025, we’ll perform R&D to introduce a new Jmix IDP CLI concept. We plan to demonstrate a tool that will generate CRUD Jmix applications based on the OpenAPI file and DB schema without launching the IntelliJ IDEA. We’re experimenting with this feature and will keep you informed if we succeed. If you’re interested in this functionality, you can also send us a request to conduct a demo when it is ready or share your ideas.

### For CUBA Platform users

Previously, we announced that since March 2025, the free support of the CUBA Platform would be switched to commercial support until the technology EOL. In 2024, we started helping our customers with assisting migration projects, and still, we see a considerable demand in this area. Estimating the effort needed to perform migration activities and some missing UI capabilities in Jmix 2.x, we understand that more time for transition is required. Thus, we decided to prolong the free support of the CUBA Platform until March 2026 with the continuation of free support on the forum. We plan to deliver one more update of the CUBA Platform until this time. Nevertheless, the Jmix team is mainly focused on evolving the Jmix 2.x technology, and we’ve got minimum resources for CUBA Platform support. Don’t hesitate to contact our sales team to discuss possible migration strategies and consider using Jmix consulting services.

### Develop smart, not hard!
Source: Jmix 2024 Recap and 2025 Roadmap

This webinar covered the new features and enhancements in the latest version of Jmix and our roadmap for future updates.Release Jmix 2.5 is here, and we are glad to share more details about key updates to this new version with you!

We recommend reading an article about the release and watching a webinar recording below to learn about all the features.

Speakers of the webinar:

Gleb Gorelov, Tech lead
Konstantin Krivopustov, Head of Engineering
Viktor Fadeev, Product Manager

What we discussed:

– Message Templates Add-on.
Create reusable, data-driven templates for emails and in-app notifications with an intuitive drag-and-drop editor.
– Tabbed Application Mode (Experimental).
Open views in separate tabs for a more desktop-like experience.
– Editing Objects on Maps.
Interact with and modify vector-based map elements directly in your app.
– Studio Enhancements.
Hot deploy indication, smarter debugging, improved UI styling, and OpenAPI client generation by tags.
– REST API & DataStore Improvements.
More flexible fetch plans and seamless remote file storage integration.
– UUIDv7 for Entity IDs.
Optimized for better database performance.
– Updated Dependencies.
Now powered by Spring Boot 3.4 and Vaadin 24.6 for improved security and performance.

You can see the recording of the webinar on our YouTube-channel..
Source: Webinar What’s new in jmix 2.5

Overview of the new features and important changes of the Jmix 2.5 feature release.The Jmix team is pleased to announce the release of Jmix 2.5, which brings a variety of new features, improvements, and updates aimed at making development more efficient. This release focuses on enhancing productivity, expanding integration options, and introducing new application application features. For a detailed overview of all changes and upgrade instructions, visit the What’s New page in the documentation.

Here’s a brief look at the key features and improvements in Jmix 2.5.

## Message Templates Add-on

The Message Templates add-on provides a flexible and efficient way to manage and utilize reusable message templates within your Jmix application. It allows developers to define templates with placeholders, which can be dynamically populated with data at runtime. This add-on simplifies the creation of personalized messages such as emails or in-app notifications.

The message generation process leverages the widely-adopted **Apache FreeMarker** template engine. The system supports the creation of both HTML and Plain Text templates for maximum flexibility. The powerful **GrapesJS** web component has been integrated to provide a visual editor for crafting HTML templates. This editor enables you to construct templates using a library of pre-designed HTML blocks. You can easily design your templates by simply dragging and dropping these blocks from the palette onto the canvas.

![message-template.png]({{strapiUrl}}/uploads/message_template_be8b825dad.png)

The **Message Templates** add-on supports integration with other Jmix add-ons: Multitenancy, Email Sending and Notifications.

## Tabbed Application Mode

The **Tabbed App Mode** add-on, currently in an experimental state, lets you open application views in separate tabs within the main view. This provides a more integrated navigation experience and intended for building the desktop-like enterprise applications.

![tabbed-mode.png]({{strapiUrl}}/uploads/tabbed_mode_9ea7e9dcd9.png)

## Editing Objects on Map

The **Maps** add-on now supports selecting, moving, and modifying features added to vector sources. This makes it easier to interact with and edit map-based data directly within your application.

![map-edit.gif]({{strapiUrl}}/uploads/map_edit_5f9b487aa4.gif)

## Studio Improvements

### Hot Deploy Indication

Studio now shows an icon in the top right corner of files that support hot deployment, such as view controllers, descriptors, message bundles, and roles. This icon indicates the status of hot deployment, helping developers track whether their latest changes have been applied to the running application.

![hot-deploy.gif]({{strapiUrl}}/uploads/hot_deploy_41d98d61d6.gif)

### Application Log Analysis

Studio can now identify common exceptions in the application console and suggest ways to resolve them. This feature, combined with the hot deploy indicator, makes it easier to troubleshoot issues during development.

![analyze-log.png]({{strapiUrl}}/uploads/analyze_log_13c7797050.png)

### Jmix Run/Debug Configuration

A new Jmix-specific run/debug configuration has been added, replacing the standard Gradle configuration. This configuration ensures that the application shuts down smoothly without generating errors in the console, improving the development process.

![run-debug-config.png]({{strapiUrl}}/uploads/run_debug_config_becb45a9c0.png)

### classNames Editor and Autocompletion

Studio now offers better support for entering values in the `classNames` property of UI components. Autocompletion suggests available class names, and a visual editor in the Jmix UI component inspector makes it easier to select and apply class names.

![css-classes-editor.png]({{strapiUrl}}/uploads/css_classes_editor_bf21a518b6.png)

### OpenAPI Client Generation by Tags

When generating client code from an OpenAPI schema, you can now choose specific tags defined in the schema. Studio can also filter out schemas that are not used in the paths associated with the selected tags. This reduces the amount of generated code, making it easier to integrate only the necessary parts of the API.

![openapi-tags.png]({{strapiUrl}}/uploads/openapi_tags_f4ce905cd4.png)

## Advanced BPM Task List View

You can now generate an advanced BPM task list view using the *BPM: Advanced task list view* template in the view creation wizard. This view offers more features than the built-in *My tasks* view and can be customized to fit your project’s needs.

![task-list.png]({{strapiUrl}}/uploads/task_list_c609d562ca.png)

## DataGrid Empty State

The `DataGrid` component now supports `emptyStateComponent` and `emptyStateText` properties, allowing you to display custom content when no data is available. This improves the user experience by providing meaningful feedback in empty states.

![data-grid-empty-state.png]({{strapiUrl}}/uploads/data_grid_empty_state_cffcd8e636.png)

## REST API and REST DataStore Improvements

**Generic REST** endpoints can now accept arbitrary fetch plans as JSON objects, in addition to named fetch plans. This makes it easier to integrate REST APIs and reduces the need for predefined fetch plans. Also, this feature greatly simplifies the usage of REST DataStore: you are no longer required to define all fetch plans in the shared repositories on both the client and service sides. Instead, you can employ inline fetch plans within your client views and Java code as you would normally do.

The **REST DataStore** add-on now includes a specific `FileStorage` implementation that works with files located in the remote application’s file storage. This allows seamless integration with remote file storage systems.

## Using UUIDv7 for Entity Identifiers

Jmix 2.5 now by default uses **UUIDv7** for generating values for `UUID` attributes annotated with `@JmixGeneratedValue`. UUIDv7 is time-based, making it better suited for database keys due to its natural ordering. It is particularly beneficial for database indexing and query performance.

## Updated Dependencies

The Jmix 2.5 release includes updates to major dependencies:

– Spring Boot has been updated to version 3.4.
– Vaadin has been updated to version 24.6.

These updates ensure that Jmix continues to be built on a modern, secure, and performant foundation.

## Future Plans

The next feature release is expected in June 2025. We will focus on the following functionality:

– Integration of AI Assistant in Studio
– Production-ready Tabbed App Mode add-on
– SAML authentication add-on
– Switch (Toggle) UI component
– End-to-end UI testing library, similar to Classic UI Masquerade library

## Conclusion

Jmix 2.5 introduces a range of new features and improvements that enhance developer productivity, integration capabilities, and application features. We’re starting work on the next release, planned for June 2025, where we will continue to build on these improvements.

We invite you to join our forum and Slack channel to discuss these new features, share your experiences, and connect with the community. We also want to thank our community members for their valuable bug reports, pull requests, ideas, and suggestions—your contributions are what make Jmix better.

Stay tuned for more updates, and we hope you find Jmix 2.5 useful for your projects!
Source: Jmix 2.5 Is Released

My Agile Privacy

This site uses technical and profiling cookies. 

You can accept, reject, or customize the cookies by clicking the desired buttons. 

By closing this notice, you will continue without accepting. 


This site complies with the Data Protection Act (LPD), Swiss Federal Law of September 25, 2020, and the GDPR, EU Regulation 2016/679, regarding the protection of personal data and the free movement of such data.