11.15
Last modified: September 30, 2026
For highlights of this release, see the Mendix Release 11.15 blog post.
11.15.0
Release date: September 30, 2026
11.15.0
New Features
Orthogonal Sequence Flows (Beta)
In the logic editors, we are introducing (beta) orthogonal sequence flows: flow lines that only have right corners. This is a purely visual setting and can be used to make a microflow look better. This feature can be enabled in Preferences > the New features tab > Microflow, Nanoflow, and Rule Editor. To change existing sequence flows to orthogonal, right-click them to convert several or all flows in the current document. Flows can also be converted back to be curved. You can set the default flow shape for all new sequence flows in the App settings > the Miscellaneous tab > Microflows.
Other New Features
- A new custom setting
HttpClient.ValidateAfterInactivityMsis available to enable connection validation before reuse. (Ticket 285249) - We improved the UI of the Extensions Overview to look more modern and consistent with the rest of Studio Pro.
- We added a feature flag API under
studioPro.featureFlags.isCommandLineFlagProvided("flag-name")so developers can check if a specified feature flag exists in the command-line arguments when running Studio Pro from the terminal. - We added a Register Tool API under
studioPro.ai.tools.registerTool(toolDefinition)where you can extend capabilities of Maia by letting it run your custom logic. - We added a feature allowing you to quickly trigger a comparison of parent and child revisions.
- The History pane now works for apps that use a partial (blobless) clone.
- Maia now supports working with App Settings documents.
- Maia now supports working with Security documents.
- We added rules to the Best Practice Recommender that help you limit anonymous user access. Several of these rules can automatically apply changes for you. For more information, see Security Recommendations.
- Message definitions are now standalone documents, making them easier to find, rename, and manage independently. Previously, message definitions were grouped inside a Message Definitions document. If you have apps with message definitions, they are converted automatically, each collection is replaced by a folder containing individual message definition documents.
- MCP and Skills settings are now unified in a single Maia Settings tab, accessible from the Settings menu in the Maia chat toolbar.
- Maia can now read and understand document templates and generate a page from them.
- Maia can now start, stop, check the status of, and read the logs for your Mendix runtime.
- Maia can now create and edit skills in your app, so you can ask it to write down a convention or update an existing skill for you.
- The Strict mode is now enabled by default for new apps.
- Non-interrupting timer event sub-processes now support recurrence, allowing them to trigger repeatedly at a defined interval. This behavior is consistent with the existing recurrence support for non-interrupting timer boundary events.
- Pluggable widgets can now be translated using system texts. Widgets can define their own or use existing texts.
- The Query Filter section in the Database Connection document now includes a search option, making it easier to quickly find and select relevant filter fields.
Improvements
- We optimized the task queue polling to use fewer queries on the database and fewer resources/threads overall.
- The fix to remove renamed design properties can now be applied to all design properties in a module.
- We improved the alignment between different loading states in Maia chat.
- It is now possible to wrap
SELECTstatements andUNIONqueries with parentheses in OQL, including applyingORDER BY,LIMIT, andOFFSETto an individual parenthesized branch of aUNIONin addition to (or instead of) the union as a whole. This syntax is currently only available in Java actions. - We removed the Other option for single and multiple-choice questions in Maia, since all choice questions already have custom free-text responses making the Other option redundant.
- We added the runtime setting
OpenTelemetry.MinimalMode. When set totrue, it suppresses tracing spans, keeping only the ones at entry and exit sites. For now, runtime operations, user-defined tasks, and scheduled events are considered entry points. Call REST service and Send REST request actions are considered exit points. - Maia now automatically saves documents it modifies, so changes are persisted immediately without requiring a manual save.
- Maia now asks for your permission before running tools that access external resources or make changes. You can allow a tool once, for the current session, or always. "Always allow" choices are remembered across restarts.
- Failing to download commit information for branches when attempting to open an app now no longer shows an error dialog.
- We now support navigating to the linked data transformer document directly from the context menu of the Transform JSON microflow activity.
- Maia can now see the DataTransformer transformation output, so it can verify the result and improve the script when the output is not what you asked for.
- We improved offline file storage by replacing the legacy file naming scheme with a stable, database-backed file registry. Files are no longer renamed on every synchronization, eliminating race conditions during background file access and reducing unnecessary file operations. Additionally, file contents are now only synchronized to the server when the file contents have actually changed.
- We now validate that system attributes and system associations are not assigned in
OQL INSERTandOQL UPDATEstatements. - We added support for generated folders to appear in the updated documents list and to be undone.
- Maia now receives detailed information about errors inside XPaths it generates, so it can correct them more accurately.
- The module version is now displayed next to the module name in the App Explorer for all non-System modules. For more information, see the Module Version section in Module Settings.
- We added a reminder to change the version number when exporting a module, as that version number is automatically used by the Marketplace.
- We improved the message shown during version control operations if Git is not installed in the system.
- The Studio Pro MCP server now reports the actual Studio Pro version instead of a hardcoded version number, so MCP clients can identify which version of Studio Pro they are connected to.
- The MCP server port setting now enforces a valid range (1025–65535); out-of-range values are automatically corrected to 1025.
- We improved memory usage in the modernized Find Results pane.
- The React client now always bundles with Rspack. Compared to Rollup, Rspack provides up to six times faster bundling and quicker incremental rebuilds than Rollup while using up to 70% less memory, reducing build and development feedback times. We removed Rollup bundling and the App bundler option from the App Settings.
- We improved the app bundle error dialog to show clearer error messages and the location of the full app bundle log.
- We optimized the deployment of snippets for React client. Apps that reuse snippets across multiple pages will see faster build times and smaller JavaScript bundle sizes.
- Pluggable widgets can now use external file entities for file and image properties, such as Image and Document Viewer.
- We simplified datasets further, by removing unsupported features (options our UI allowed you to use but that had no impact on running apps). For parameters you can now only configure the type and if it is a range (where applicable) and datasets with Java as source are automatically deleted.
- We added missing consistency errors for the unconfigured Call ML Model microflow object.
- The new chat button is no longer disabled when the chat is empty.
- The Ask button is now enabled when an attachment is present, even without any typed text, allowing you to send attachments on their own.
- We improved keyboard navigation in the modernized Find Results pane. You can now switch between result set tags with the Left and Right arrow keys. We also improved focus handling: when an operation opens Find Results, focus now moves directly to the results table.
- The number of open searches is now displayed as a badge in the Find Results tab, making it easier to see at a glance and more consistent with other panels.
- We improved the Data Importer experience to use a single document with both Import Mapping and the Import data from file action, allowing users to import data using either approach with the same configuration. Maia has also been updated to support the new document flow.
Fixes
- We fixed a known issue where the Skills button in Maia Chat was not visible after adding skills via Maia. The Skills button in Maia Chat now updates automatically when a skill is added or removed without requiring a manual sync.
- We fixed an issue where Eclipse showed "cannot be resolved to a type" errors for Java actions in protected modules. (Ticket 235055)
- We fixed an issue where design properties from an excluded module incorrectly triggered an error that they had been renamed. (Ticket 281790)
- We fixed an issue where a tab container did not select a tab and did not show the contents of tabs that load on first use, when the visibility expression of one of its tabs could not be computed because the surrounding data view had no object. (Ticket 282018)
- We fixed a race condition that occurred during metadata update. (Ticket 282231)
- We fixed an issue where session cleanup did not succeed and kept retrying indefinitely when an optimistic locking error occurred. (Ticket 282375)
- We fixed an issue where native pages with pop-over layouts were flickering. (Ticket 282642)
- We fixed an issue where placing a widget with a selection, such as a Combobox, inside a repeatable container widget (for example, the Gallery widget) prevented expressions from using
$currentObjector caused a client error when selecting an attribute from the data source. (Ticket 283186, 283708) - We fixed an issue in OData query parsing where OData filters with excessive parenthesis nesting led to a StackoverflowError in runtime. We now guard against deeply nested OData $filter expressions by adding a parentheses depth check in the parser and a more robust rewrite of the AST validator. The maximum allowed parentheses nesting depth defaults to 50 and can be tuned via the custom runtime setting
ODataPublish.MaxParenthesesDepth. (Ticket 284261) - We fixed an issue where passwords filled by a password manager were unexpectedly cleared. (Ticket 284395)
- We fixed a performance issue when filtering over an association with multiple selected values, for example when using a drop-down filter on a Data Grid 2. (Ticket 284484)
- We fixed an issue where configuring the image property on a widget was not correctly reflected in the widget properties. (Ticket 284848)
- We addressed situations where the page editor was not using the correct font for an icon from an icon collection. (Ticket 284860)
- We fixed an issue where importing CSV data for an icon collection failed for icons whose name starts with an underscore. (Ticket 285041)
- The file download API now returns
404 Not Foundinstead of an exception-based error code. (Ticket 285074) - We fixed an issue where a stale progress bar was displayed indefinitely when a page was opened while the home page was still loading. (Ticket 285253)
- We fixed an issue where opening the Customize offline synchronization dialog of a navigation profile resulted in an error when an entity with a custom synchronization configuration was used on a page and had specializations of its own. (Ticket 285791)
- We fixed an app startup error when a direct association from an entity to a specialization of itself was removed and the parent of the association was removed or no longer a generalization of the child of the association. (Ticket 285998)
- We fixed an issue where widgets with a very large number of assets (more than 8000) did not work with Rspack. (Ticket 286207)
- We fixed an issue where excluded Jar files were not properly respected by Eclipse. (Ticket 286628)
- We fixed an issue where the Properties pane stayed empty when an import mapping or export mapping document was selected. (Ticket 286678)
- We fixed an issue where navigating to an entity did not always bring the target entity into view when the domain model needed to be opened first. (Ticket 287620)
- We fixed an issue with the Call REST Service activity. When the response handling was set to Apply import mapping with a parameter but the provided parameter had a type that did not match what the Import Mapping expected, this led to an error message. Now it correctly shows consistency error CE0245. (Ticket 287936)
- We fixed an issue where the MCP server started notification was shown before a project was opened; it now appears only after a project has been loaded.
- We fixed an issue where data transformer documents could not be dragged from the App Explorer onto a microflow to create a Transform JSON activity.
- We fixed an issue where calling the element selector API before a project was opened resulted in an error or unexpected behavior. The API now throws a clear error stating the project must be initialized first.
- We fixed an issue where the diff of values was not shown correctly during a merge conflict.
- We increased the number of initial commits being loaded when selecting a revision for revert, cherry-pick, and deploy. We increased it from 25 to 250 due to the possibility of some commits being omitted.
- We fixed an issue where the History pane showed history for the wrong branch after closing and opening another project.
- We fixed an issue where canceling on dialogs triggered an error check.
- We fixed an issue where Java proxy classes for an entity and its related entities were not regenerated after changing the entity's generalization.
- We fixed an issue where pasting into a form, workflow, or domain model threw an error when the clipboard content no longer matched what was expected.
- We fixed an issue where the constant dialog did not update the input field after changing the constant data type.
- We fixed a pop-up warning when adding a new business event document but the extension module was not available in the app.
- We fixed the Variable name in use error that appeared in the microflow and nanoflow editors when closing the dialog box after double-clicking a Java action or JavaScript action, respectively.
- In the logic editors, we fixed an issue where sequence flows inside looped activities could not be selected.
- We fixed an issue in Maia where a previously typed custom answer took precedence over a predefined option selected afterward in a clarifying question.
- We fixed an issue where documents created by the user incorrectly appeared in the Maia changes list.
- We fixed an issue where pressing Undo All in Maia caused multiple save dialogs to flash in quick succession.
- We fixed an issue where a consistency error kept being shown in the Errors pane after deleting an import mapping or export mapping document while its tab was still open. The error only disappeared after closing and reopening the app.
- We fixed an error that caused Studio Pro to crash when trying to edit properties on some images in the Properties pane.
- We fixed an issue where Maia did not generate widgets that use a dynamic image connected to an entity.
- We fixed an issue in published REST and OData services in Studio Pro, where moving these services to a different module resulted in a consistency error about module roles even for services with security disabled.
- We fixed an issue in validation dialogs in Studio Pro, which showed an ampersand in the names of controls that had keyboard accelerators.
- We fixed an issue in published REST services where Studio Pro suggested a microflow name with a dash for operations of resources that had a dash.
- We fixed an issue in published REST services where Studio Pro did not check the parameters after you changed the authentication microflow or an operation microflow.
- We fixed an issue in published REST services in Studio Pro where, after changing the authentication microflow or changing an operation microflow with a microflow that had parameters of the same name, the dialog did not allow choosing the new microflow parameter.
- We fixed an issue that caused repeated log warnings "A MeterFilter is being configured...", even when the metrics configuration had not changed.
- We fixed an issue where the Studio Pro installer downloaded JDK 25 even if you had it installed already, and in some cases failed.
- We fixed an issue where the Java sources of protected modules were added to the Eclipse build path.
- We fixed an issue where a chat with a custom LLM whose base URL was configured incorrectly returned an empty response instead of reporting an error.
- We fixed an issue where a custom LLM base URL that already ended in
/chat/completionsor/completionswas called with that path twice. - We fixed an error that occurred when asking Maia to rename a workflow document.
- We fixed export of app-level Maia Agent Skills and Agent Instructions (AGENTS.md) in solution packages (.mxsolution) and regular app packages (.mpk).
- We fixed an authentication error that occurred when connecting to a custom MCP server configured with Mendix Identity authentication. If you added such a server in an earlier version, remove it and add it again to apply the fix.
- We fixed an issue in the modernized Find Results and Errors panes where using a global hotkey (F3/F8) to navigate to a result did not scroll the selected item into view.
- We fixed a missing right-click context menu in the Search field in the modernized App Explorer.
- We fixed an issue in the modernized Find Results where choosing Show usages during a flow conversion showed a generic result label. The result tag now shows the correct name and icon.
- We fixed an issue in the modernized App Explorer where using keyboard shortcuts (Ctrl+C, Ctrl+V, Delete) quickly after selecting a node acted on the previously selected item instead of the intended one.
- We fixed an issue where the Modernized App Explorer was in a state where the visible nodes and the cursor position were shifted after it scrolls automatically to a position.
- We fixed a startup error in the modernized Find Results pane caused by a timeout when requesting initial results.
- We fixed an issue in the modernized Find Results pane where quickly switching between result sets caused an error.
- We fixed several label and icon issues in the modernized Find Results tags. Advanced Find results for Java actions and JavaScript actions now show clear text labels, while Find Usages results for entities and parameters display the correct icons.
- We fixed an issue in the modernized App Explorer where navigating to a document not visible in the tree (for example, a hidden styling node) caused Studio Pro to become unresponsive. We also removed the Updating App Explorer dialog that appeared during certain tree operations.
- We added a notification reminding users to restart their locally deployed app after switching clients.
- We fixed an issue where source maps were generated for production builds when the Optimize bundle option was disabled.
- We fixed an issue where some files were unnecessarily included in the service worker precache.
- We fixed an issue with
onChangeclient actions for attribute and association widget properties where associated objects passed as arguments to an action were always empty. - We now prevent the use of the selection of a widget as an argument for snippet calls, as it is not supported in the client.
- We fixed a crash that happened when selecting a branch in the App Selector in Studio Pro. This crash occurred when information about the Mendix version was missing from a branch.
Breaking Changes
- Due to licensing issues, we no longer distribute the SAP HANA JDBC driver with the Mendix runtime. If you want to run an app with a SAP HANA database, see SAP HANA.
- We now automatically convert remaining long-lived browser sessions in offline-first web apps to authentication tokens when session data is refreshed. End-users do not have to sign in again during the conversion.
Authentication tokens have a default validity of one year, compared with the previous long-lived session timeout of seven days of inactivity, so users may remain signed in for longer.
LongLivedSessionTimeoutno longer applies to converted sessions, so if your app relies on the previous default or a customLongLivedSessionTimeout, review and configure com.mendix.webui.AuthTokenTimeout. Remember that this is specified in minutes, rather than milliseconds.
Known Issues
- The Maia Chat pane may appear and remain functional even when Maia is disabled in Edit > Preferences.
- Workaround: Manually close the panel when it appears.
- When using BYO LLM, switching back to the Mendix Platform provider and saving your configuration causes reasoning and caching to stop functioning.
- Workaround: Click New Chat to restore reasoning and caching. Note that New Chat is only available when the chat is not empty.
- The
mx.exe module-import replaceandmx.exe module-import updatecommands will not rescue storage GUIDs after a module update, which will result in data loss.