11.0
Last modified: May 8, 2025
For details on upgrading to Studio Pro 11, see Upgrading from Mendix Studio Pro 10 to 11.
11.0.0 Beta 1
Release date: May 8, 2025
New Features
- We enabled the OpenAPI Documentation pane for Published REST services. Just like when creating a Published OData service, this pane helps you to build the REST service showing a preview of what the resulting OpenAPI document will look like.
- You can now use the mx tool to see which private values Studio Pro has stored on you local app data, and delete these values.
- We added a CLI command to
mx.exe
to export the Security Overview to both JSON and XLSX formats. Usemx export-security-overview --export-format [json|xlsx] [--exclude-appstore] [--output-file OUTPUT_FILE_PATH] PROJECT
. The--export-format
option specifies which export format to use, eitherjson
orxlsx
. The optional--exclude-appstore
flag can be used to exclude Marketplace modules from the export. The--output-file
option specifies to which file the export should be written. This option can be omitted when exporting to JSON, in which case the output will be printed to the console. ThePROJECT
placeholder should contain the path to the .mpr file of the project. - We introduced a new message for Maia generation sessions. It allows to either navigate back to the document related to a session or create a new Generate session for the currently active document.
- We added a new option Contact Support into the Help > Support Tools menu. This allows users to reach Mendix’s support website directly from Studio Pro.
- We enabled history navigation to use arrow keys by default, and moved the navigation settings to the Work Environment tab.
- When opening an existing app in Studio Pro, it now automatically converts to the MPRV2 format.
- MPRv1 apps need to be converted to MPRv2 to be able to commit for .mpr files larger than 250MB. By default, conversion to MPRv2 happens automatically.
- We changed port fix to cherry pick to be more aligned with Git and added recognition of cherry pick and revert operations into the top bar.
- We introduced the OQL Query interface, a user-friendly feature that represents a view entity and allows users to define and manage OQL queries more intuitively. Additionally, this interface comes equipped with a new AI feature, Maia for OQL, making it easier to write, preview, and maintain OQL queries directly within the platform. For more information, see View Entities and Maia for OQL.
- We introduced a new API for showing modal dialogs from web extensions. It is available under
studioPro.ui.dialogs
in the web extensibility API. - We introduced a new feature that allows users to add the app folder to the Microsoft Defender exclusions list.
- We introduced a new API for accessing user preferences from web extensions, which retrieves the user’s selected theme preference (light or dark) and language settings (e.g.
en-US
). It is available understudioPro.ui.preferences
in the web extensibility API. - We introduced a new API for showing notification popups from web extensions. It is available under
studioPro.ui.notifications
in the web extensibility API.
Improvements
- We made the text in the dialog that is shown when a page could not be found translatable. (Ticket 242035)
- We improved the performance of workflow versioning conflict analysis for workflows with many nested outcome-based activities. (Ticket 242615)
- We upgraded the JDBC driver for Microsoft SQL Server to version 12.10.0. If you connect to SQL Server using integrated security in a module such as Database Connector, you may need to update the JDBC driver in
userlib
as well.
- We improved the check/uncheck behavior of the Open API request selection dialog for Consumed REST Service.
- The variables of pages and snippets are now available in XPath constraints.
- In OQL queries you can now use
NULL
inCAST
expressions when you want to cast an empty value to eitherDATETIME
,DECIMAL
,INTEGER
,LONG
orSTRING
. This was already supported in OQL execution in Java actions, but Studio Pro added an error when this was used in view entities or data sets. - We improved the live preview of view entities in Studio Pro. Columns that represent associations now show the entity name in the header, and when there is no associated object the cell is empty.
- You can now copy from the Run Query table in view entities in Studio Pro.
- We improved the layout of the OpenAPI Documentation pane. It now features a more compact layout, making it easier to view all the operations your service will publish.
- We made various improvements in the logic editors:
- We now highlight the loop border when dragging elements inside of it.
- We made connection points and resize handles only visible on the selected element.
- We made various React-related improvements:
- We updated
react-native-reanimated
to the latest version. - We updated
@react-navigation
to the latest version.
- We updated
- The
mx create-module-package
command now synchronizes and includes the managed dependencies of the module in the exported module package. This allows the module to be used in Studio Pro that has disabled Gradle synchronization. Theexclude-managed-dependencies
flag can be used to disable this behavior. - The authentication token is now rotated, ensuring a new token is generated upon session expiration to improve security.
- In the Security Overview and the modernized entity access rules editor, inherited attributes and associations from an entity’s generalization are now marked with a distinct inherited icon.
- The navigation tree menu is no longer tagged with aria-hidden when it is still visible.
- Navigation menu buttons are now reachable when they are visible.
- We added aria-expanded, aria-haspopup and aria-controls attributes to the navigation tree where relevant.
- We made it easier to use variables for pages and snippets. The variables are now available in the value selectors of conditional visibility, conditional editability, and text templates.
- The Connector pane now features page and snippet variables.
- We improved SQL parsing in the External Database Connector to correctly ignore parameters inside comments.
- We improved the context menu in the page and microflow editors to support navigation using arrow keys.
- We improved the tooltip of the capabilities of business events in the Integration pane.
Fixes
- We fixed an issue where Consumed Web Service caused a validation failure at runtime for WSDL files imported locally. (Ticket 146066)
- We reapplied a fix for an issue affecting listening between widgets. (Ticket 206642)
- We fixed an issue in Message definitions where custom names were reset on expansion of a node. (Tickets 222597, 227958, 236152, 232930, 240806, 241561, 244349)
- We fixed an issue where an app crashed when Call a microflow was selected and the Select button was clicked in the Map entity dialog. (Ticket 225433)
- We fixed an issue where fields that could not be unchecked while Export mapping an XML schema or Consumed Web Service were not checked and expanded by default when selecting the document schema source for the first time. (Ticket 232274)
- In the modernized Toolbox, we fixed an issue where the Toolbox did not refresh after synchronizing the app directory to load new widgets. (Ticket 237560)
- We fixed an issue where disabling the Multiple sessions per user setting incorrectly killed all existing user sessions and deleted all associated tokens, including the currently valid one. (Ticket 238657)
- We fixed an issue where the
Substract
,Union
andIntersect
list operations did not always return a list with unique values when used in a nanoflow. (Ticket 240695) - In the logic editors, we fixed an issue where multiple identical parameters were generated if a parameter or variable was used more than once by the selection to extract. (Ticket 242517)
- We fixed a Studio Pro crash which happened when logging a list of strings from a Java action. (Ticket 243124)
- We fixed F9 View App shortcut. It is used to view the currently running app in the browser. (Ticket 243743)
- We fixed an issue where the runtime fails to start with a
NullPointerException
if a microflow contained an invalid disabled activity. (Ticket 243931) - We fixed an issue in published REST and OData services where calling the service using active session authentication with an expired CSRF token in Javascript caused the browser to show a Username/Password pop-up window. (Ticket 243407)
- In the logic editors, we fixed the displayed data type for cross-module one-to-one associations. (Ticket 245052)
- We fixed an issue in the React client where the document title briefly was ‘Mendix’ during startup instead of the title configured in the application. (Ticket 245280)
- We fixed the behaviour of the
urlEncode
andurlDecode
functions in the client to align with the runtime. This means that spaces are now correctly encoded as%20
instead of+
.urlDecode
still supports decoding strings containing+
to ensure backwards compatibility with strings encoded in previous versions. (Ticket 245510) - We addressed a performance degradation during deployment involving widgets with text templates. (Ticket 245543)
- We fixed an issue where the Generate validation microflow in the page editor showed an error.
- We now import only one content-type header from OpenAPI contract in the Consumed REST service. This feature is in Beta.
- We fixed an issue where not all changes were correctly updated in the runtime after a local deployment. For example, when adding or removing columns to your Datagrid 2 widget.
- We fixed the generation of the JS Docs comments in JavaScript actions for enumeration values.
- We fixed an issue where an error was shown when extracting widgets that use an unknown entity type into a snippet.
- We fixed an issue where the Download Latest Version button in the app selector downloaded the latest Windows version for MacOS users.
- We fixed an unnecesary redirect when creating a new app from the Mendix Portal.
- We fixed an Oops pop-up window that appeared when clicking the button to toggle its state (e.g., from Enabled to Disabled).
- We fixed an error pop-up window that appeared after clicking Cancel in a progress window.
- The command line tools now support arm64 architectures without the need of installing the dotnet runtime x64.
- We fixed an issue where Studio Pro crashed when collecting support information without a project being open.
- We fixed an issue in OQL view entities in Studio Pro, where setting write access to an association incorrectly resulted in the consistency error CE6593.
- We fixed an issue where Studio Pro evaluated the type of a COALESCE function expression for numeric arguments to be the type that can contain the types of all provided arguments, which is not in line with the behaviour at runtime. It now evaluates to be equal to the type of the first argument.
- We fixed an issue in the live preview of view entities, where for very large values Studio Pro showed an incorrect value.
- We fixed an issue in the Published Rest Services where a published REST operation that supports both JSON and XML responded with header
Content-Type:application/xml
if either the request hadAccept:*/*
header or hadAccept:application/*
. It will now respond withContent-Type:application/json
as default - We fixed an issue in the runtime execution of the Send External Object microflow activity, which logged a warning when the remote key mapping had already been stored in the database. It does not log this warning anymore.
- We fixed an issue in the Integration pane where clicking Show details on a business event search result displayed elements from a locally existing version of the service.
- We fixed an issue in published REST and OData services which responded with a WWW-Authenticate header for all 401 (Not Authorized) responses, even when basic authentication was not enabled for the service.
- In the logic editors, we no longer truncate variable names.
- We fixed an issue in the logic editors where some automatically generated variable names were accidentally translated.
- We fixed an issue where cookies were not cleared before starting new anonymous session.
- We fixed an issue where, in offline apps, using a constraint with an association to an entity that had specializations did not return specialization results in XPath.
- We fixed an issue that causes microflow calls to fail in offline apps when there is a non-persistent entity that associates either the current user or the current session and a yet unsynchronized offline object.
- We removed the Documentation URL field from the properties of a building block.
- We improved the generation of Java code for enumerations.
- We fixed an issue where captions for enumerations did not return the caption in the default language, if no caption was available for the request language code.
- We fixed the checkbox Show inactive threads (wait/park) in the Runtime Threads window of Studio Pro.
- We fixed an issue where exporting a module gave a Unknown dependency synchronization error. This occurred if the module contained managed dependencies which had both JVM and Android versions, such as Google Guava.
- We fixed the date format preview in Studio Pro to be consistent with the actual date formatting behaviour in the runtime and client.
- We fixed associations owned by both the parent and child entity not showing up as an association in the modernized entity access rules editor for the child entity.
- We updated the Create entity right icon in the Security Overview to match the icon used in the modernized entity access rules editor.
- We fixed an issue where data sources with a default configuration triggered an Oops pop-up window when hidden by another property.
- We fixed an error that occurred when reconfiguring a data source with an invalid expression referring to it.
- We fixed an issue with editing expressions where the expected type was Not set when its target was a page or snippet variable, for example static values for a combo box widget.
Deprecations
- We deprecated the values
true
andfalse
for thecom.mendix.storage.PerformDeleteFromStorage
runtime setting. Please useNoFiles
,TemporaryFiles
orAllFiles
instead. - We deprecated the constructors of the
com.mendix.core.actionmanagement.EventActionInfo
class with areturnType
parameter. This parameter is not used internally and does not give any useful information. - We deprecated the method
com.mendix.core.actionmanagement.EventActionInfo#representsFunction()
. Please use thefunction()
method to check whether theEventActionInfo
instance represents a function. - We deprecated the method
com.mendix.core.actionmanagement.EventActionInfo#getReturnType()
. There is no replacement as this return type is not used. - We deprecated the
com.mendix.core.actionmanagement.ActionListener#createClone()
method. This method was meant for internal use only, there is no replacement. - We deprecated the
com.mendix.core.objectmanagement.member.MendixObjectReferenceSet#setValue(IContext, Set<IMendixIdentifier>, Boolean)
method. This method was meant for internal use only, please usecom.mendix.systemwideinterfaces.core.IMendixObjectMember#setValue(IContext, Object)
instead. - We deprecated
ActionListener#addReplaceEvent(String)
. Please useActionListener#setReplaceEvent(String)
instead. headerTruncatedBackTitle
was deprecated in@react-navigation
version 7. If the title is too long,@react-navigation
will handle it itself.
Breaking Changes
- The default value of the custom runtime setting DataStorage.OptimizeSecurityColumns was changed to
true
. - Following the MariaDB JDBC driver default, if you use MariaDB or MySQL with a
DatabaseJdbcUrl
we no longer acceptjdbc:mysql:
as a protocol. Please usejdbc:mariadb:
instead. - For MariaDB and MySQL, we no longer set the
sql_mode
driver parameter. Unless it is overridden inDatabaseJdbcUrl
, the database default will be used. - We removed the deprecated Java APIs
Core.retrieveXPath...
. Please use the fluent Java APICore.createXPathQuery
instead. - We no longer support the JVM parameters
-Djava.security.manager
and-Djava.security.policy
. - We removed support for the project setting System context task’. This setting was deprecated since Mendix 9.6. We now always execute queued tasks in a context equivalent to the one in which they were created.
- We removed the legacy migration of thumbnails. This was introduced around Mendix 6. If you are migrating from a Mendix 6 application, then first migrate to Mendix 10 and run the application to finish migration, before migrating further to Mendix 11.
- We removed the type parameter from the
com.mendix.core.actionmanagement.EventActionInfo
class as it only acceptsjava.util.function.Consumer
instances with type parameterIMendixObject
. - We made the constructors of the
com.mendix.core.actionmanagement.EventActionInfo
class more strict so that it only acceptsjava.util.function.Consumer
instances with type parameterIMendixObject
and a return type ofClass<IMendixObject>
. Passing other types in the past led to unexpected behavior at runtime. - We removed the deprecated
com.mendix.webui.CustomJavaAction
class. This class was not used anymore. - We removed the deprecated
com.mendix.core.actionmanagement.ActionListener#clone()
. There is no replacement, this method was only meant for internal use. - We removed the deprecated
com.mendix.core.actionmanagement.ActionListener#setTargetClass(Class<T>)
method. Pass the target class in the constructor instead. - We removed the deprecated
com.mendix.core.actionmanagement.CoreAction
class from the public api. Please usecom.mendix.systemwideinterfaces.core.UserAction
instead. - We removed the deprecated
com.mendix.core.conf.RuntimeVersion
andcom.mendix.core.conf.Configuration#RUNTIME_VERSION
from the public api. Please useCore.getRuntimeVersion()
instead. - We removed the deprecated
com.mendix.core.Core.changeAsync(IContext, IMendixObject, Map<String, String>)
andcom.mendix.core.internal.ICore#changeAsync(IContext, IMendixObject, Map<String, String>)
methods. Please usecom.mendix.core.Core.change(IContext, IMendixObject, Map<String, String>)
and execute it for example using anExecutorService
. - We removed the deprecated
com.mendix.core.Core.commitAsync(IContext, List<IMendixObject>)
andcom.mendix.core.internal.ICore#commitAsync(IContext, List<IMendixObject>)
methods. Please usecom.mendix.core.Core.commit(IContext, List<IMendixObject>)
and execute it for example using anExecutorService
. - We removed the deprecated
com.mendix.core.Core.deleteAsync(IContext, IMendixObject, boolean)
andcom.mendix.core.internal.ICore#deleteAsync(IContext, IMendixObject, boolean)
methods. Please usecom.mendix.core.Core.delete(IContext, IMendixObject, boolean)
and execute it for example using anExecutorService
. - We removed the deprecated
com.mendix.core.Core.instantiateAsync(IContext, String)
andcom.mendix.core.internal.ICore#instantiateAsync(IContext, String)
methods. Please usecom.mendix.core.Core.instantiate(IContext, String)
and execute it for example using anExecutorService
. - We removed the deprecated
com.mendix.core.Core.isSubClassOf(IMetaObject, IMetaObject)
,com.mendix.core.Core.isSubClassOf(String, short)
,com.mendix.core.Core.isSubClassOf(String, String)
,com.mendix.core.internal.ICore#isSubClassOf(IMetaObject, IMetaObject)
,com.mendix.core.internal.ICore#isSubClassOf(String, short)
,com.mendix.core.internal.ICore#isSubClassOf(String, String)
methods. Please usecom.mendix.systemwideinterfaces.core.meta.IMetaObject#isSubClassOf(IMetaObject)
orcom.mendix.systemwideinterfaces.core.meta.IMetaObject#isSubClassOf(String)
instead. - We removed the deprecated
com.mendix.core.Core.rollbackAsync(IContext, IMendixObject)
andcom.mendix.core.internal.ICore#rollbackAsync(IContext, IMendixObject)
methods. Please usecom.mendix.core.Core.rollback(IContext, IMendixObject)
and execute it for example using anExecutorService
. - We removed the deprecated
com.mendix.core.objectmanagement.member.MendixEnum#isValid(IContext, String)
method. Please usecom.mendix.core.objectmanagement.member.MendixEnum#isValid(String)
instead. - We removed the deprecated
com.mendix.metrics.Metrics#counters()
method andcom.mendix.metrics.Counters
interface. Please usecom.mendix.metrics.Metrics#createCounter(String)
instead. - We removed the deprecated
com.mendix.metrics.Metrics#gauges()
method andcom.mendix.metrics.Gauges
interface. Please usecom.mendix.metrics.Metrics#createGauge(String)
instead. - We removed the deprecated
com.mendix.metrics.Metrics#sets()
method andcom.mendix.metrics.Sets
interface. Thesets
metric type is not supported anymore. - We removed the deprecated
com.mendix.systemwideinterfaces.core.IContext#clone()
method. Please usecom.mendix.systemwideinterfaces.core.IContext#createClone()
instead. - We removed the deprecated
com.mendix.systemwideinterfaces.core.IMendixObject#clone()
method. Please usecom.mendix.systemwideinterfaces.core.IMendixObject#createClone()
instead. - We removed the deprecated
com.mendix.systemwideinterfaces.core.IMendixObjectMember#setValue(IContext, T, boolean)
method. Please usecom.mendix.systemwideinterfaces.core.IMendixObjectMember#setValue(IContext, T)
instead. - We removed the deprecated
com.mendix.systemwideinterfaces.core.IProfiler#logClientData(JSONObject, String)
andcom.mendix.systemwideinterfaces.core.IProfiler#enterRuntime(String, String, String, Set<String>, JSONObject, Long)
methods. Please use thecom.mendix.systemwideinterfaces.core.IProfiler#logClientData(String, String)
andcom.mendix.systemwideinterfaces.core.IProfiler#enterRuntime(String, String, String, Set<String>, String, Long)
methods and parse the JSON object if needed. - We removed the deprecated
com.mendix.systemwideinterfaces.core.ICoreAction#setContext(IContext)
method. There is no replacement, this method was only meant for internal use. - We removed the deprecated
com.mendix.systemwideinterfaces.core.ICoreAction#getMetaInfo()
method. Please usecom.mendix.systemwideinterfaces.core.ICoreAction#getMetaInfoJsonString()
and parse the JSON object if needed. - We removed the deprecated
com.mendix.systemwideinterfaces.core.UserAction#context()
method. Please usecom.mendix.systemwideinterfaces.core.ICoreAction#getContext()
instead. - We removed the deprecated
com.mendix.systemwideinterfaces.core.UserBlockedException
class. This class was not used anymore. - We removed the deprecated
com.mendix.webui.reporting.EnumConstant#setImagePath(String)
method. Please pass the image path in the constructor instead. - We removed the deprecated
com.mendix.systemwideinterfaces.core.meta.IMetaObject#getId()
method. This method was meant for internal use only, there is no replacement. - We removed the deprecated
com.mendix.systemwideinterfaces.core.IMendixIdentifier#getEntityId()
method. This method was meant for internal use only, there is no replacement. - We removed the deprecated
com.mendix.systemwideinterfaces.core.IMendixIdentifier#clone()
method. This method was meant for internal use only, there is no replacement. - We removed the deprecated
com.mendix.systemwideinterfaces.core.IMendixIdentifier#setObject(IMendixObject)
method. This method was meant for internal use only, there is no replacement. - We removed the deprecated
com.mendix.systemwideinterfaces.core.IContext#setExecutionId(String)
method. This method was meant for internal use only, there is no replacement. - We removed the deprecated
com.mendix.systemwideinterfaces.core.IContext#setExecutionThread(Thread)
method. This method was meant for internal use only, there is no replacement. - We removed the deprecated
com.mendix.systemwideinterfaces.core.IContext#setExecutionType(ExecutionType)
method. This method was meant for internal use only, there is no replacement. - We removed the deprecated
com.mendix.core.conf.Configuration#checkConfig()
method. This method was meant for internal use only, there is no replacement. - We removed the deprecated
com.mendix.m2ee.api.IMxRuntime
interface. Its methods were intended for internal use only, there is no replacement. - We removed most of the content of the deprecated
com.mendix.m2ee.api.AdminAction
interface. This interface was intended for internal use only, there is no replacement. - We removed most of the content of the deprecated
com.mendix.m2ee.api.AdminException
interface. This interface was intended for internal use only, there is no replacement. - We removed most of the content of the deprecated
com.mendix.m2ee.api.IAppContainer
interface. This interface was intended for internal use only, there is no replacement. - We removed the result type parameter of the methods
addBeforeEvent(Consumer<IMendixObject>, boolean)
andaddAfterEvent(Consumer<IMendixObject>)
in thecom.mendix.core.actionmanagement.ActionListener
class. This type parameter had no benefits. - We removed the type parameter from the
com.mendix.core.Core.schedule(String, Date)
method. - We removed the type parameter from the
com.mendix.core.Core.schedule(ICoreAction, long, TimeUnit)
method. - We removed the type parameter from the
com.mendix.core.Core.reschedule(RunnableScheduledFuture, ICoreAction, long, TimeUnit)
method. - We removed the type parameter from the
com.mendix.core.Core.scheduleAtFixedRate(String, Date, long, TimeUnit, String, String)
method. - We removed the type parameter from the
com.mendix.core.Core.scheduleAtFixedRate(ICoreAction, long, long, TimeUnit)
method. - We removed the type parameter from the
com.mendix.core.Core.scheduleAtFixedRate(ICoreAction, Date, long, TimeUnit)
method. - We removed the type parameter from the
com.mendix.core.Core.scheduleWithFixedDelay(ICoreAction, long, long, TimeUnit)
method. - We changed string concatenation in expressions for empty/null values. Such values are not anymore concatenated as ’null’. The old behavior can be achieved by using an if-else expression (e.g.
'Value: ' + (if $value != empty then $value else 'null')
instead of'Value: ' + $value
). - We block the start of an app when there are still file documents on the local file system which are created before Mendix 5.12. Make sure all files are migrated before upgrading to this version. Files are migrated automatically in the background when running apps on Mendix versions from 8.14.0.
- We updated the date formatting in the client to be consistent with the runtime in supporting genitive and abbreviated month names. See the table below for the changes between the old and new formatting. The runtime formatting has not changed and is equal to the new client behavior.
Token Old New MMM genitive genitive abbreviated MMMM genitive genitive LLL genitive standalone abbreviated LLLL genitive standalone - We changed the internal representation in the client of an empty value from an empty string to
null
. This fixes an issue where empty string attributes become an empty string value when an object is communicated to the client. Due to this change, bothMxObject#get
andMxObject#set
have changed to accept/returnnull
for empty attributes.