What’s New

This section covers new features of Jmix framework and Studio 2.6, as well as some breaking changes to be aware of when upgrading from a previous version of the framework.

How To Upgrade

To create new projects with Jmix 2.6 or to upgrade an existing project, you need Studio 2.6 or later, so update your Jmix Studio plugin first.

The minimal supported IntelliJ IDEA version is now 2024.3.

See Upgrading Project section for how to upgrade your project using Studio. The automatic migration procedure makes the following changes in your project:

  • Updates the version of Jmix BOM which in turn defines versions of all dependencies.

  • Updates the version of Jmix Gradle plugin.

  • Adds default values to editorActionsColumn buttons without assigned values in all project views. See details below.

  • Renames the id attribute of the settings.component element to componentId in all project views. See details below.

See also the full list of breaking changes that can affect your project after the upgrade.

Updated Dependencies

The following major dependencies have been updated:

New Features and Improvements

Studio Improvements

Jmix AI Assistant

The Jmix AI Assistant is now available in the Studio tool window. Open it by clicking jmix ai big icon in the IDE’s right-hand toolbar.

The Jmix AI Assistant in Studio shares the list of chats with the web-based version, allowing seamless switching between them.

New Code Snippets

Added over 20 new UI-related code snippets in the following categories: notifications and dialogs, opening views and fragments, asynchronous execution, and API examples.

Moving Views

You can now easily relocate a view to another package using the Move View context menu action in the Jmix tool window. Studio will move the Java controller and the XML descriptor together, updating relevant message keys in the message bundle.

When moving a Java controller or XML descriptor in the Project tool window using the standard move operation, Studio prompts you to relocate the corresponding controller or descriptor and update message keys automatically.

Scaffolding Renderers

When generating a renderer for a UI component (e.g., for a dataGrid column), Studio provides a wizard to scaffold a ComponentRenderer, TextRenderer, or an empty handler method.

Replacing Strings with Localized Messages

The new intention action Replace with localized message allows you to quickly replace a string literal with a localized message from the message bundle. It works in both Java and XML code.

Access this action by placing the cursor on a string literal and pressing Alt+Enter.

Lombok Support

Studio now recognizes @Getter and @Setter annotations on entities and @RequiredArgConstructor on Spring beans. If these annotations are present, Studio does not generate explicit code when adding attributes to entities and adding dependencies to beans.

Additionally, Studio displays a warning if it detects @EqualsAndHashCode or @Data annotations on entities (see the caution in the Entities section for explanation).

Performance on Large Projects

Studio’s performance on large projects has significantly improved. The project tree in the Jmix tool window and the resource role designer now work quickly, even for projects with over 1000 entities.

Switch Component

The new switch component allows users to toggle between two states (e.g., on/off or true/false). It mimics a physical toggle switch with a sliding handle.

Tabbed Application Mode Improvements

The Tabbed Application Mode add-on has been improved and now is ready for production use.

  • The mainTabSheet component is now explicitly defined in the main view layout. It can contain actions invoked through the tab context menu or using keyboard shortcuts.

  • Drag and drop of tabs is now supported.

  • The @TabbedModeViewProperties annotation lets you define parameters of the view opened in a tab.

  • The UI state is preserved when the web page is refreshed.

  • The UIRefreshEvent is fired each time a web page is refreshed.

The final version of the Tabbed Application Mode add-on requires the Enterprise subscription.

Autocompletion in CodeEditor

The codeEditor component now provides autocompletion for a specific language mode or using custom suggestion handlers.

See codeEditor: Suggestion for more information.

DataManager.saveWithoutReload method

The new DataManager.saveWithoutReload() method improves performance when the saved instances are not immediately required for further processing. You can use it instead of the verbose save(new SaveContext().saving(entities).setDiscardSaved(true)) operation.

See Using DataManager: Saving Entities for more information.

Export/Import of Message Templates

In the Message Templates add-on, the Export and Import actions allow you to transfer templates between applications.

Refreshing Data in Calendars

In the Calendar add-on, you can now refresh callback data providers using the new refetchDataProvider() methods of the FullCalendar component.

Logout in Authorization Server

The Authorization Server add-on now performs standard logout actions (invalidates HTTP session, clears security context, removes session cookie) when navigating to the /logout URL.

REST DataStore Improvements

@RemoteService Interfaces

The REST DataStore add-on now offers a simple way of invoking remote services exposed via REST API. On the client side, you only need to create an interface that mirrors the service methods and annotate it with @RemoteService.

See REST DataStore: @RemoteService Interfaces for more information.

OIDC Authentication

The REST DataStore add-on now includes the restds_RestOidcAuthenticator bean that allows you to use an external authentication provider (for example Keycloak) when integrating applications.

See REST DataStore: External Authentication for more information.

Turning Off Lazy Loading

The jmix.eclipselink.disable-lazy-loading application property lets you turn off the lazy loading for the whole application.

Note that this is an experimental feature. It can be finalized or abandoned in a future release. If you encounter a problem when using this feature, please file an issue at GitHub.

Breaking Changes

Node.js v.20

Vaadin 24.7 requires Node.js 20+. If you are using a locally installed Node, upgrade it if needed.

Removed defaults of editorActionsColumn buttons

Previously, the nested buttons within the editorActionsColumn element had default values for certain attributes. Specifically, all buttons were assigned an icon, while both the editButton and cancelButton had a text attribute assigned.

This behavior was inconsistent and prevented from removing an icon or text from the button in an application project.

Now the buttons have no default values at all.

The Studio migration procedure scans all views in the project and automatically adds previous default values to the buttons that don’t have explicit values.

See #4493 for more information.

Renamed settings.component id attribute

The id attribute of component element in the settings facet has been renamed to componentId to not confuse with the commonly used id attribute. For example:

Jmix 2.5:

<facets>
    <settings>
        <component id="genericFilter"/>
    </settings>
</facets>

Jmix 2.6+:

<facets>
    <settings>
        <component componentId="genericFilter"/>
    </settings>
</facets>

The Studio migration procedure scans all views in the project and automatically renames this attribute.

See #4412 for more information.

Changes in Dynamic Attributes Views

The Dynamic Attributes management views were significantly redesigned. If you have overridden these views, adapt your code accordingly.

Changes in in-app-notification-list-view.xml

In the in-app-notification-list-view.xml descriptor of the Notifications add-on, the create action has been removed from inAppNotificationsDataGrid. This action has been moved to the view’s actions section and renamed to createNotificationAction.

If you have overridden this view, adapt your code accordingly.

Changelog

  • Resolved issues in Jmix Framework:

  • Resolved issues in Jmix Studio: