All articles

Jmix 2.4 Is Released

The Jmix team is announcing the release of Jmix 2.4, packed with new features designed to make your applications more interactive, flexible, and easy to integrate. This update introduces powerful add-ons and improvements that address different development requirements, from UI enhancements to integration capabilities. For a detailed overview of all changes and upgrade information, check out the What's New page in the documentation.

Let's take a closer look at the key features of Jmix 2.4.

Calendar Add-on

The new Calendar add-on provides a FullCalendar UI component based on the popular FullCalendar JavaScript library. The FullCalendar component allows for different display modes such as day, week, and month. Users can interact with events by dragging events to reschedule them and resizing events to adjust their duration by dragging the edges.

calendar.png

The FullCalendar component allows you to add different data providers, for example ContainerDataProvider to create calendar events from your JPA or DTO entities.

This feature allows developers to add a modern and highly functional calendar to their Jmix applications.

PivotTable Add-on

The PivotTable add-on introduces a PivotTable component to the Jmix UI, powered by the PivotTable.js library. This component is perfect for data analysis and visualization, allowing users to:

  • Create interactive pivot tables that summarize and explore data visually.
  • Use drag-and-drop functionality to easily restructure and group data.
  • Perform data aggregation with sums, averages, counts, and more.

pivot-table.png

With its intuitive UI, the PivotTable add-on makes working with complex data a seamless experience.

Kanban Add-on

The Kanban add-on adds a visual project management tool to Jmix. Built on the Smart Kanban JavaScript library, this add-on allows users to track and manage their tasks effectively. Key features include:

  • Customizable Kanban board that integrates easily with any Jmix view.
  • Task management including user assignment, deadlines, and priorities.
  • Stage management with columns to represent different phases of the workflow.
  • Drag-and-drop support for easy task movement.
  • Customization options for the appearance and behavior of the board.

kanban.png

With this add-on, project workflows can be efficiently managed directly within your Jmix application.

UI Constraints Add-on

The UI Constraints add-on allows developers to control the visibility and accessibility of UI components based on declarative policies defined in resource roles. This means that UI elements can be shown or hidden without writing code, based solely on user permissions. This makes implementing role-based UI control much simpler, saving developers time and enhancing security.

REST DataStore Add-on

The REST DataStore add-on provides an easy way to integrate with external Jmix applications. External entities from a remote Jmix instance can be accessed through the DataManager interface, just like local entities. This means developers can display, update, and save data from remote applications seamlessly, without writing custom code for CRUD operations.

Examples of using this add-on can be found in the following guides:

Data Binding for HTML Components

HTML components such as div, span, and headers can now be declaratively bound to your data model entities using the dataContainer and property attributes in XML. This reduces the need for programmatically setting values in view controllers, simplifying your code and improving readability.

<layout>  
    <h3 id="nameField" dataContainer="departmentDc" property="name"/>  
    <div id="hrManagerField" dataContainer="departmentDc" property="hrManager"/>  
</layout>

Fragment Renderer

Renderers for components like virtualList and dataGrid can now be defined using UI fragments. This means you can use fragments to customize how items are rendered, giving you greater flexibility in designing your UI.

The new fragmentRenderer XML element specifies the fragment Java class, for example:

<virtualList itemsContainer="usersDc">
    <fragmentRenderer class="com.company.onboarding.view.userfragment.UserFragment"/>
</virtualList>

An example of the fragment used as a renderer:

<fragment xmlns="http://jmix.io/schema/flowui/fragment">
    <data>
        <instance id="userDc" class="com.company.onboarding.entity.User">
            <loader id="userDl"/>
        </instance>
    </data>
    <content>
            <formLayout id="form" dataContainer="userDc">
                <textField id="usernameField" property="username" readOnly="true"/>
                <textField id="firstNameField" property="firstName"/>
                <textField id="lastNameField" property="lastName"/>
                <textField id="emailField" property="email"/>
            </formLayout>
        </hbox>
    </content>
</fragment>

The fragment renderer class should extend the FragmentRenderer base class with type parameters indicating the root component and rendered entity, for example:

@FragmentDescriptor("user-fragment.xml")
@RendererItemContainer("userDc")
public class UserFragment extends FragmentRenderer<FormLayout, User> {
}

The @RendererItemContainer annotation is used to specify the data container that accepts the rendered entity.

Asynchronous Tasks

The new UiAsyncTasks bean allows developers to run operations asynchronously using the current user's security context and then update the UI with the result. This lightweight mechanism, based on CompletableFuture, is perfect for simple asynchronous operations, complementing the more complex background task framework.

@Autowired
private UiAsyncTasks uiAsyncTasks;

private void loadCustomersAsync() {
    uiAsyncTasks.supplierConfigurer(this::loadCustomers)
            .withResultHandler(customers -> {
                customersDc.setItems(customers);
                notifications.create("Customers loaded").show();
            })
            .supplyAsync();
}

private List<Customer> loadCustomers() {
    return customerService.loadCustomers();
}

Search Improvements

Search functionality has been enhanced with the new @ExtendedSearch annotation, enabling "Starts with" searches for indexed fields. The updated searchField component allows users to open a search settings window to customize search strategies and result sizes, improving the flexibility of search operations.

search.png

Studio Component Inspector

The Jmix Studio component inspector now organizes properties into categories like General, Data Binding, Size, Position, and Look & Feel. This categorization makes it easier for developers to find the properties they need, enhancing productivity. Additionally, there is improved support for selecting icons using the icon property.

Studio Support for OpenAPI

Jmix Studio now offers enhanced support for OpenAPI integration, including configuration of the OpenAPI client generator and automatic generation of DTO entities, mappers, and intermediate services. These features simplify the integration of external REST APIs, making it easier for developers to work with external data sources.

openapi.png

An example of using these features can be found in the Integrating Applications Using OpenAPI guide.

Updated Dependencies

The Jmix 2.4 release includes updates to major dependencies:

  • Spring Boot has been updated to version 3.3.
  • Vaadin has been updated to version 24.4.

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

Future Plans

The Jmix 2.4 release introduces new features that provide developers with additional tools for building applications. We’re already looking forward to the next release in February 2025.

Our plans for the next release include the following:

  • Completing the development of the Tabbed Main Window mode, which allows views to be opened in tabs within the main window instead of using browser tabs.
  • Introducing a Message Templates add-on with a Flow UI, similar to the Email Templates add-on for Classic UI, but designed to be more flexible and accommodate a wider range of use cases.
  • Adding the ability to edit elements of the map provided by the Maps add-on.

We will also collect feedback on the new features of Jmix 2.4 to make enhancements. This primarily relates to the experimental integration features: OpenAPI support and REST DataStore.

As always, we will dedicate significant time to bug fixing, minor feature additions, and performance improvements.

Our detailed roadmap for future releases is available as a GitHub project. Patches for the current version 2.4 will be released approximately once a month to ensure regular updates.

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

Jmix is an open-source platform for building enterprise applications in Java