10.21
10.21.0
Release date: March 25, 2025
New Features
Maia Explain
We are introducing a new experimental feature for Maia: Maia Explain. This feature allows users to easily use Maia to explain a microflow or nanoflow.
Maia Explain is enabled by default. To launch the Maia Explain interface, either click Explain in the toolbar of the microflow or nanoflow editor, or right-click a microflow or a nanoflow in the App Explorer and click Explain from the context menu. When initiated, a message is sent to Maia, which begins an explanation session dedicated to that microflow or nanoflow. Maia will first provide an overview of the purpose and functionality of the microflow or nanoflow. Users may then ask follow-up questions to gain further clarification.
For more information on this new Maia feature, see Maia Explain.
Maia Page Generator
We are introducing a new experimental feature for Maia: Page Generator. This feature allows users to easily create a page with configured widgets based on a description of the page and an optional image, such as a screenshot or a wireframe.
To enable this feature, go to Edit > Preferences > New Features and select Enable page generator (experimental). To launch the Maia Page Generator interface, open a page and click Generate page in the toolbar. As an experimental feature, Maia Page Generator is intended only for use with empty pages. Any existing widgets on a page will be removed during the generation process.
For more information on this new Maia feature, see Page Generator.
Variables for Pages and Snippets
You can now define variables for pages and snippets. Once created, variables can be used similarly to attributes on widgets: allowing users to view and edit their values. Variables can also be passed to microflows and nanoflows as parameters, or used in expressions including expressions for conditional visibility and editability.
Variables allow you to create the same functionality with much cleaner models than before. Whether you are using a simple switch to hide a widget or a employing a complex search form, you no longer need assistance from a non-persistent entity, microflow, or data view to get the job done. So say goodbye to PageHelper and its friends. Variables are here to simplify your app modeling!
Pluggable Widget API: Action Variables
It is now possible for pluggable widgets to directly pass primitive values to actions through the execute method.
These values are presented as variables in Studio Pro when configuring arguments as an expression for the Call a microflow and Call a nanoflow client actions. They are defined in the action property as actionVariables in the widget definition XML.
This improvement simplifies widget code. Widget developers no longer need to set an attribute before calling an action. This also simplifies app modeling, as widget-generated values can be used directly without requiring extra attributes to store temporary data.
Other New Features
- We added an option to enable or disable cookie encryption for Android devices. This option was introduced in Studio Pro 9.8 and was enabled by default up to Studio Pro Version 10.21. From version 10.21, the feature is disabled by default. To learn more about cookie encryption, see the Encrypting Session Cookies in Offline Data Security.
- The modernized Entity Access Rules Editor is now released for general availability and enabled by default.
- We added evaluation guide reference support in Maia chat.
- We added the Select active document button to the modernized App Explorer. When you click it, the current active document is selected and opened.
- We added an option to choose the algorithm used for SSL certificates. This option is available in the runtime settings of the app in Studio Pro. You can choose between PKIX (recommended) and SunX509 (default, for backwards compatibility). For more information, see the SSL Certificate Algorithm section in App Settings.
- Consumed REST Services now support importing requests from OpenAPI contracts. This feature is in Beta. When you create a new Consumed REST Service, you can choose to start from a file or URL and select which requests you want to import from the contract. Request fields are then automatically populated where possible. We support OpenAPI 2.0, while we are still working on OpenAPI version 3.0. Basic authentication is the only authentication method that is automatically added.
HEAD
andOPTIONS
HTTP methods are not supported yet, and we do not automatically import parameters in base URLs or import more than one base URL. - Opportunity for big performance improvements for apps with a lot of data. We added support for an alternative way of storing associations for one-to-many and one-to-one associations. This stores associations in the same table as the parent entity instead of a separate table. This is released as an opt-in for associations, as the subsequent data migration can take a long time (depending on your app’s data). To use this feature, change the Association Storage setting on an association from Association table to Direct association. For more information, see Association Storage Options.
- The color picker in design properties now uses the CSS variable when a preview color is not specified.
- The Security Overview is now released for general availability.
- You can now use the Integration pane to search business event services that are registered in the Catalog. You can drag and drop these on the domain model to publish or subscribe to these events, just like business events that are found in business event services already present in the app. After you drop an event on the domain model for a service that does not yet exist in your app, it will import the service and add the event for you.
- In the Integration pane you can now search for OData actions and use them in microflows directly from the search results.
- We set MPRv2 as the default version of MPR file format for all new Mendix apps.
- We added mx.exe git-merge command to use as a custom git merge driver for MPRv2. For now it supports merging MPRv2 with MPRv2 and MPRv1 with MPRv1.
- We now support microflows as a parameter type for JavaScript actions. Microflow parameters work the same as the already existing Nanoflow parameters. When a microflow is called from a JavaScript action a runtime operation is used.
- We updated the version of git we install with Studio Pro to 2.48.1.
- It is now possible to directly push changes without testing after rebasing has completed as a secondary action.
- We introduced a new feature that allows users to provide feedback on their experience with Studio Pro through a periodic pop-up survey. This feedback is valuable for the Mendix team to understand user needs and improve the product. For more information, see Feedback Survey.
- We extended support for Mapping Parameter while importing Excel/CSV data using Data Importer and Import mapping. This new feature can be used to pass any Mendix object to create an association with the data being imported.
Improvements
- We mitigated CVE-2024-38374 by upgrading the CycloneDX Gradle plugin to 1.10.0. The CVE does not pose risk for Mendix customers. (Ticket 243005)
- We made the offline server calls more resilient by adding an automatic retry in case of connection errors. This is done for all offline-related independent calls, except when calling a microflow. For calling a microflow, you can capture the connection error in a nanoflow and build retry logic around that when necessary. (Ticket 224494)
- We improved the performance of published OData services that use OData version 4 and publish associations as a link. The runtime now only queries the database for associations that the client specifies in
$expand
. (Ticket 239978) - The modern entity access rules editor is now used for editing entity access in module security when enabled. For more information, see the Entity Access section in Module Security.
- We improved the design of the form to edit an access rule in the modernized entity access rules editor based on feedback.
- You can now save the filter option in the Go to dialog over different user sessions. Also, we added support for caching the searched value in that dialog (the search input stays if you reopen the dialog).
- We removed the consistency error that required the path URL in the Consumed REST Service to always begin with a slash.
- We improved the readability of description text for API elements in the Integration pane by wrapping the text and eliminating the need for scrolling.
- We reduced the default size of exclusive merges. The default size is now 40x40 instead of 90x60.
- We updated the icons for breakpoints, so that they are easier to distinguish.
- We made several improvements in the logic editors:
- We now properly update the variable when you drag a document onto an existing microflow object, eliminating the need to open the properties dialog and press OK.
- We now truncate long variable names in parameters and activities. A tooltip is provided to display the full original text.
- We increased the mouse wheel scrolling speed.
- We increased the auto scroll speed.
- Disabled activities are now styled as partially transparent, just like in Studio Pro version 9.24.
- We now filter out entities that you cannot create in an Create object action in the same Connector pane.
- We added support for jumping within or out of an interrupting boundary event path (to any activity in the parent path). If the interrupting boundary event is in a parallel split path, the boundary path must end with a Jump activity and then can jump back to the parent path (which is the parallel split path).
- We now allow nesting boundary events in other boundary event paths, meaning that if an activity has a boundary event path (interrupting or non-interrupting), this activity can be placed in a boundary event path.
- We fully support inheritance now for offline apps in the offline database.
- We added support for online objects in offline client’s microflow calls, allowing to call microflows from nanoflows with an online entity as parameter.
- We upgraded Jetty 10 to Jetty 12.
- We added context propagation for tracing to the Call REST Service and Send REST Request actions. This will enable distributed tracing, meaning that you can trace these requests between runtimes.
- We added a log subscriber which sends logs using OpenTelemetry. It can be configured with the log subscriber type
opentelemetry
. - We made the administration of running application nodes more stable and improved the logging in this area. This makes the execution of tasks from the queue more reliable.
- We enhanced the functionality to check if the current branch is tracked in Git. This update improves performance and reduces errors by leveraging Git CLI.
- We made several improvements to the Security Overview,
- We added an Anonymous label in the user role dropdown to highlight the role configured as the anonymous user. Additionally, in the Security Overview export, each sheet now includes a new Anonymous Role column, that displays
true
if the row corresponds to the anonymous user role, andfalse
otherwise. - We added an Administrator label in the user role dropdown to highlight the role configured as an administrator. Additionally, the Security Overview export now includes the new Administrator Role column in each sheet.
- The security export now includes the Create and Delete accesses for entities. In the Excel export this is included in the new Entity access tab, while the existing Entity access tab was renamed to Members access.
- We added an Anonymous label in the user role dropdown to highlight the role configured as the anonymous user. Additionally, in the Security Overview export, each sheet now includes a new Anonymous Role column, that displays
- We now throw a consistency error if your custom index.html does not contain the correct elements for the chosen client (React/Dojo).
- mx command-line tool now creates projects in MPRv2 format by default. You can specify
--use-mpr-format-v1
feature flag if you need to create MPRv1 project. - We made it possible to load Typescript-based extensions via an add-on module.
- It is now possible to create Typescript-based extensions using the public NPM package.
Fixes
- We fixed a known issue where importing a module containing workflows made all running workflow instances incompatible. (Ticket 234084)
- We fixed an issue where a user time zone failed to get converted to a SQL Server-specific time zone when used in an OQL query. (Ticket 229424)
- We fixed an issue that controls in pop-up dialogs sometimes did not resize correctly when the dialog was resized. (Ticket 238211)
- We decreased the chance for database transaction deadlocks when updating the LastActive attribute for System.Session instances. (Ticket 240094)
- We fixed an issue where an error was thrown if a change to an object was done after the object had been deleted by another process. (Ticket 240247)
- We fixed an issue that caused the bottom bar to disappear when the user was using nanoflow-based homepages with clear history. (Ticket 240586)
- We fixed the validation of OQL queries in Studio Pro. Studio Pro now accepts casting an object ID to a different data type. (Ticket 240854)
- We changed when we send back hash updates for object changes. This should solve the hash conflict errors when running flows in parallel with a microflow that both Read/Write the same object. (Tickets 241168, 240696, 240118)
- We fixed an issue that was causing scrolling to be disabled on pop-up pages in Design mode. (Ticket 241293)
- We fixed an issue in a data grid with the Select all button and pagination set to Yes (without total count), where calling a microflow action resulted in a No selection available pop-up error. (Ticket 241513)
- We fixed the navigation profile selection. When using an iPad, it will now correctly use the tablet navigation profile if available. (Ticket 241824)
- We fixed an issue where the modernized access rules editor gave a rendering error when opening an access rule of an entity that is a generalization of System.User. (Ticket 242667)
- We fixed several issues in the logic editors:
- We fixed an issue where loops were difficult to select by clicking them.
- We fixed an issue where it was not possible to drag an entity from the Connector pane onto a selected Create object or Create list activity.
- We fixed an issue where dragging an entity from the Connector pane did not set the default variable name and you had to open the properties dialog to set it.
- We fixed an issue where return variables did not validate types while the pop-up window remained open, even after changing the type (e.g., from Boolean to string).
- We improved the stability of Studio Pro when debugging nanoflows.
- We fixed an issue for external entities in Studio Pro, where having an entity type with an unsupported key showed an exception pop-up window. It now gives a consistency error.
- We fixed an issue where closing an app while the Integration pane was loading an error pop-up window appeared.
- We resolved a potential crash when moving a folder into its child folder. It is now not possible to move a parent folder into any of its child folders.
- We fixed an error that occurred when using keyboard navigation in a tree control.
- We fixed an issue that in Studio Pro on macOS the Check all and Uncheck all toolbar buttons did not work.
- We fixed an issue where parameter encoding for Send REST Request activities was not consistent with parameter encoding in Consumed REST Services. This sometimes resulted in double encoding of parameter values when sending from microflows, leading to unexpected results. With the fix the Send REST Request microflow activity uses the parameter values as provided. This is consistent with sending a request in a Consumed REST Service in Studio Pro. For backwards compatibility, existing projects that use Consumed REST Services will keep working the same as before. We added an option in App settings > Miscellaneous tab to disable the encoding of URL parameters for the Send REST Request microflow activities. This option will be deprecated in Mendix 11.
- We fixed an issue where using a view entity in a subquery within an OQL
FROM
clause was not working correctly, as inSELECT Attribute FROM (SELECT Attribute FROM ViewEntity)
. - We resolved an issue in the View entity dialog box where autocompletion in the OQL editor did not work correctly when the
SELECT
clause appeared before theFROM
clause, and the cursor was positioned after a comma separating selected attributes. This fix ensures the editor will provide accurate suggestions in these scenarios. - We fixed an issue where a view entity with a Long attribute showed Integer for that attribute in the live preview.
- We fixed an issue when checking the OQL query for view entities, where correctly selecting an attribute from a joined subquery resulted in an error about the type of the attribute being unknown.
- We fixed an issue in Studio Pro where the Integration pane went back to search view after clearing searched keyword.
- We fixed an issue in the Integration pane which seemed to allow the use of an OData entity type with an unsupported key as a non-persistable entity, but showed an error afterwards.
- We fixed an issue with view entities that prevented them from being sent to the client.
- We fixed an issue where an invalid documentation URL on the Errors pane caused an error.
- We fixed an issue in consumed OData services where the HTTP response from downloading metadata from a URL was not cleaned up correctly.
- We made the connection between Studio Pro and the Catalog more robust, ensuring that network issues when downloading images from the Catalog no longer trigger an error pop-up window.
- We fixed an issue where an unexpected exception occurred when you closed the app while Studio Pro was checking it for consistency errors.
- We fixed an issue in the microflow editor where a Maia recommendation was not placed correctly.
- We fixed an issue in offline apps that caused an error when a non-persistent entity was included in a query to the offline database. The error appeared because non-persistent entities do not have a table in the offline database.
- We modified how runtime reports errors when a non-existing entity is used when instantiating or querying objects.
- We fixed an issue that caused the commit operation to take approximately 30% longer.
- We fixed an issue with updating module roles in the Module Security dialog box. The issue occurred after moving a document between modules.
- We have fixed an issue where applications using the React client got cached incorrectly causing new deployments to work incorrectly.
- We fixed an issue where a false positive warning for unreplaceable usages was triggered when converting between nanoflows and microflows.
- We removed the border inside the New features tab page in the Preferences dialog box.
Deprecations
- We removed support for Java 11 and Java 17, please use Java 21. For more information, see the Java section in System Requirements.
Breaking Changes
- We removed the
PhoneUserAgentRegEx
andTabletUserAgentRegEx
custom runtime settings as today user agents are no longer enough to identify the type of device. We moved the device type detection to the client which can use more than just the user agent to determine the type of device.