Last update: Edit

9.0.4 Beta 3

Release date: February 23rd, 2021


New Features

  • This release includes an activity for conditional looping called While. The loop activity has been extended with the ability to loop based on an expression, adding more power and flexibility to microflows and nanoflows. You no longer need to do workarounds or create placeholder lists in order to execute repeatable actions.


  • We updated the SAP HANA driver to 2.7.9. (Ticket 11311)
  • We now allow JDBC URL options to set data source properties for SAP HANA.
  • We disabled the transactionalLobs option in SAP HANA.
  • As part of ongoing maintenance, we reduced the memory footprint and improved the performance of Studio Pro and MxBuild.
  • The sign-in window no longer blocks the main window when you launch Studio Pro.
  • You can now use the input reference set selector widget inside a containment or repeatable containment pluggable widget.
  • If you get a consistency error on an outdated version of the Nanoflow Commons or Native Mobile Resources module, you can now right-click the module to update it.
  • When creating pages, the title of a page is now derived from its name.
  • We added support for PostgreSQL 13.
  • For the new merge algorithm, the accepted changes are now shown underneath the conflicts when you are reviewing or resolving conflicts. The toggles to switch to Changes in mine/theirs are gone.
  • The state of the Show purely visual visual changes toggle in the Changes pane is now remembered when switching between documents or modes.
  • We updated the splash screen, about screen, empty state background, and application icons in Studio Pro.


  • We fixed an issue in which auto-committed objects were cleaned up too early. (Ticket 99432)
  • We fixed an issue where multiple sessions did not work as expected in offline applications when Multiple sessions per user was turned off. (Ticket 113783)
  • We fixed an issue where calling a microflow from an offline-first application triggered an unnecessary reload of data sources on the opened pages. (Ticket 114660)
  • When an average of a list is calculated by the database, the result is no longer truncated. (Tickets 111779, 112782)
  • We fixed an issue where for SQL Server (only), the XPath query count(//Entity/attribute) also counted null values.
  • We fixed an issue where opening a page threw an exception if it referenced a missing layout or snippet.
  • We fixed a bug where an incorrect number of revisions was shown after a successful update.
  • We fixed the full-width row selection in the MxAssist Performance Bot pane.


  • In native apps, the Clear history option of the Show page activity can only be used in combination with target pages that are included in the bottom bar configuration (if the layout has a bottom bar) and that have a default layout type (meaning, not a pop-up). This was already enforced in Show page activities used in the page editor. We now also enforce this in nanoflows.

Known Issues

  • Creating new apps in this version will work, but upgrading and converting existing apps may fail because not all Marketplace modules and widgets have been made compatible for Mendix 9. This will be fixed for the general availability release of Studio Pro 9.0.
  • When you update a consumed OData service with a new version from Mendix Data Hub but close the document without saving, the blue arrow icon will no longer be shown to notify you about the available update for that service.
    • Workaround: Closing your app project and opening it again fixes this issue.

9.0.3 Beta 2

Release date: February 4th, 2021


New Features

Expanded Progressive Web App Capabilities

The first beta of Studio Pro 9 introduced offline-first progressive web apps (PWA). This release expands support for PWA capabilities to all web navigation profiles. Once the Publish as a Progressive Web App setting is enabled in the navigation profile, mobile browsers might start asking end-users to add your app to the home screen of their device. This can be prevented by clearing the Allow ‘Add to Home screen’ prompt setting.

When end-users try to open an online-first PWA while not connected to the internet, they will see a custom page to check their connection. Where desired, this page can be customized by adding an offline.html page to the theme folder.

When the Preload static resources option is enabled, your app will preload resources like pages, images, and widgets in the background. This makes your app feel faster when navigating to new pages. This comes at a cost, as more bandwidth is consumed initially, which is not always desired.

Native Dependency Management

With this release of Studio Pro, we made it simpler to add additional React Native modules to your native mobile app projects. Your pluggable widget or JavaScript action can now define which native modules it needs instead of relying on the modules that are provided by Studio Pro or manually added to the app source. This makes it easier to create and use more powerful pluggable widgets and JavaScript actions for native mobile apps.

You can define which native depencencies are needed in a JSON declaration file. For pluggable widgets, the latest version of the widget tooling will create this declaration file based on the dependencies you are using, and you only need to repackage your widget with the updated tooling. For JavaScript actions that make use of native modules, you must create this file manually. The Mendix Native Mobile Builder will include the modules when building a native mobile app for development or distribution.

Task Queue

This release makes the task queue available as a horizontally scalable solution for executing microflows in the background. In the microflow editor, you can set microflows to be executed in the background on a configurable queue. This enables an execute-at-least-once option that gracefully handles node restarts and keeps track of pending, finished, and failed tasks.

List Filtering by Expression

We have added support for filtering/finding by expression in List operation activities. This allows you to quickly filter a list on multiple attributes or multiple conditions without the need for a loop or multiple List operations.

Power to the Text

There are many places in pages where one can use a text template, like the text widget or the label property of input widgets. Text templates are multi-lingual and allow for inserting a (formatted) value of an attribute. However, sometimes more power is desired than using an attribute can provide. For example, what if you want to pluralize a word (for example, “You selected 1 product” versus “You selected 2 products”) or include some text only based on logic?

We have made this easier for you! From now on, you can use expressions as text template parameters. The whole power of client-side expressions are now at your disposal with logic (if-then-else), functions, the context of parent data views, and even retrieving over associations.

New Atlas UI Folder Structure

With the upcoming general availability release of Studio Pro 9.0, we will release a new version of Atlas UI. Atlas UI 3.0 will come with a refreshed look and feel, improved out-of-the-box templates, and easier customization. A lot of effort has gone into the new folder structure of Atlas UI that should greatly simplify how your theme is updated and extended. Also, module developers will find it has become much easier to share modules that bundle company-specific layouts and templates or that combine a pluggable widget with relevant design properties and styles.

New Themesource Folder

Now, every module can define its own native and web style sheets, stlyling resources (for example, images and fonts), and design properties. The only thing you need to start using these is to import a module from the App Store, and Studio Pro will take care of the rest automatically. Required files are stored in a new themesource/{module} directory that is included together with the owning module.

Of course, Atlas UI 3.0 could not pass up this opportunity and will also use themesource to deliver its core Sass and JavaScript files. This means that you can update in the future without having to manually copy/update from the theme_old folder. theme_old is dead, long live the theme!

Did we mention that the web stylesheets in themesource are defined with Sass? Because they are! And Studio Pro takes care of the mundane process of compiling them when needed, copying used resources, and correctly caching them without the need of external tools like Calypso. The compilation is triggered on file synchronization (F4), deployment, and module structure changes. There is no option to constantly monitor styling changes yet.

New Theme Folder Structure

With Atlas UI core files out of the way, we could not miss a chance to do some Spring cleaning in the theme folder. The new theme folder strcuture is now nicely split into web and native. Here you can find explicit entry points for your own styling and for your customizations of styling introduced by modules. And of course, we now allow you to use Sass in the theme as well.

Categorizing Building Blocks & Page Templates

Previously, templates from all modules except the one marked as UI resource package were combined together into one Local category. To further enable you to implement and use your own page templates and building blocks, we have introduced new Category and Category weight properties on all templates. This means you can create your own custom categorization.


  • We added more use cases for recommending fixes and auto-fixing anti-patterns in MxAssist Performance Bot.
  • Query engine 9 is now the default for XPath queries, replacing query engine 7 to offer a more stable solution that allows for optimizations in the future. It is no longer possible to enable query comparisons between the two engines.
  • We updated access rules for the user’s password attribute to prevent access to its hashed value.
  • For the new merge algorithm, inspecting conflicts is more convenient now that lines that refer to the same element are combined.
  • When adding a data view from the Toolbox on a native page, its form orientation will be set to vertical by default.
  • The Project Security dialog box is now resizable in both directions.


  • We fixed an issue where retrieving entities by association going from local to local to external entities did not work. (Ticket 112776)
  • We fixed an issue in MxAssist Performance Bot where the Limit to current tab option was broken when no document was open.
  • We fixed an issue where MxAssist Performance Bot was displaying duplicate usages for attributes repeated in an XPath where there was a non-indexed attribute in use.
  • We now encode spaces as %20 instead of + in the urlEncode() function.
  • We fixed an issue where an error occurred when a microflow activity without an action was copied and pasted.
  • We fixed an issue where the picker element of an inline native drop-down widget did not update its values when selected.
  • We fixed a bug where the branch that was checked out at the time was showing in the list when merging.

Breaking Changes

  • Studio Pro 9.0.3 requires app projects to be in at least version 8.12.0 to open them. This also applies to importing (App Store) modules.
  • To better support (security) updates and reduce the dependencies of React Native modules, we have limited the number of modules that are included by default in Studio Pro. Pluggable widgets and JavaScript actions should now define which native modules they need. Any pluggable widgets and JavaScript actions using native modules must be updated so that they declare which modules they are using.
  • We replaced every mention of CoreAction in the public Runtime API with ICoreAction:
    • Context.getActionStack now returns a stack of ICoreAction instead of CoreAction.
    • CoreAction.getUnwrappedAction now returns an ICoreAction instead of a CoreAction.
    • CoreAction.call is now final.
    • CoreAction.getUnwrappedAction is now final.
  • We changed the default setting for SameSite cookies to Strict.
  • We removed the legacy Java code generation approach. For more information, see the Java Code Generation section of Moving from Desktop Modeler Version 7 to Studio Pro 8.
  • The currentObject variable name is now a reserved name in microflows and nanoflows.

Known Issues

  • Creating new apps in this version will work, but upgrading and converting existing apps may fail because not all Marketplace modules and widgets have been made compatible for Mendix 9. This will be fixed for the general availability release of Studio Pro 9.0.
  • When you update a consumed OData service with a new version from Mendix Data Hub but close the document without saving, the blue arrow icon will no longer be shown to notify you about the available update for that service.
    • Workaround: Closing your app project and opening it again fixes this issue.

9.0.2 Beta 1

Release date: December 22nd, 2020


New Features

MxAssist Performance Bot

MxAssist Performance Bot is now available as an intelligent virtual co-developer bot that helps you improve the performance of your app project by inspecting your model against Mendix development best practices. It detects anti-patterns during the design and development, pinpoints these anti-patterns for you, suggests how to resolve them, and in many cases can automatically fix these issues.

MxAssist Performance Bot is built using the statistical analysis of thousands of anonymized Mendix app projects to learn common anti-patterns. In addition, it uses the best practices from Mendix Expert Services in the development of microflows, domain models, pages, and security. It consists of three levels of assistance:

  1. Detection – The bot inspects the app model, identifies the issue, and pinpoints the document/element causing the issue for you.
  2. Recommendation – The bot explains the identified issue, the potential impact, and how to fix it. There is also a link to a detailed best practice guide with steps for fixing the issue.
  3. Auto-fixing – After the user acknowledges, the bot can automatically implement the best practice and fix the issue.

New Merge Algorithm

In the Preferences dialog box, you can enable a new merge algorithm. This algorithm is used when doing an Update or a Merge to combine changes in the app project model. The new algorithm has the following advantages compared to the old one:

  • Fine-grained conflict resolution – When there are conflicting changes to a document, you no longer have to choose between whole documents (your whole page versus their whole page). Instead, you can resolve conflicts at the level of individual elements, such as data views, entities, attributes, and microflow activities. Also, all non-conflicting changes are accepted automatically from both sides.
  • Ability to make parallel changes to a list of widgets – Parallel changes to a list of widgets no longer lead to a conflict. For example, two developers inserting a widget in the same data view, do not result in a conflict now, while in the old algorithm, you have to choose between these changes. If the changes are too close, there is a list order conflict to remind to decide on the final order of the widgets in the list.

For more information on the new merge algorithm, see New Merge Algorithm with Fine-Grained Conflict Resolution.

Also in the Preferences dialog, we removed the option to go back to the old version of the Changes pane.

Progressive Web Apps

Studio Pro 9 adds support for building offline-first progressive web apps (PWA). PWAs offer offline-first capabilities similar to native mobile apps, but do not require you to publish your app in any app store.

You can create an offline-first PWA by adding one of these new navigation profiles to your app project: Responsive offline, Tablet browser offline, or Phone browser offline. Web browsers that support the necessary offline features (currently Google Chrome and Microsoft Edge) will load the offline profile. Other browsers will gracefully fall back on the online profile.

PWAs on a Device’s Home Screen

With the new PWA functionality, end-users can easily add a Mendix PWA to the home screen on both iOS and Android devices. This makes it easy for end-users to open the app again and gives the app a more native-mobile feel by showing a splash screen and hiding browser controls when launching.

To enable this, configure the icon in the navigation profile. When an end-user opens the app on their device for the first time, the browser will ask if the end-user would like to add the app to the home screen (this can vary per browser). The icon will be shown on the home screen and as the app starts up.


  • We improved the getCaption and getKey expression functions to not throw an error for an empty parameter. Instead, they return an empty string (just as the toString function does).
  • We improved the nanoflow execution time, including for passing lists to sub-nanoflows. (Ticket 110062)
  • When migrating files created before Mendix 6 to modern files, we now log the missing files instead of failing the migration. (Tickets 110317, 110969)
  • In the domain model editor, microflow editor, page editor (only in Structure mode), and document template editor, it is now possible to use keyboard shortcuts for zooming in/out and resetting the zoom level (via the control with +, -, and 0). The toolbars of the page editor and document template editor now also have a drop-down menu for setting the zoom level.
  • We have added a new tab to the View mobile app dialog box so that you can now easily access your web app or PWA from your phone or tablet by scanning the QR code.
  • We added support for named exported classes and functions in web widgets. You no longer need to export your widget class as a default.
  • We made it possible to use associations in the microflow expressions used in a pluggable widget’s expression properties and as a page title in the Show a page action.
  • The way we interact with binaries stored in third-party systems like AWS S3 and Azure has been improved. Now, we keep track of external changes using a two-phase commit that prevents unknown orphaned files.
  • We have made the Mendix session ID available in a web socket endpoint.
  • You can now use image uploader widget inside a containment or repeatable containment pluggable widget.
  • We improved the accessibility of action buttons like Call microflow button and Link button. You now have a configuration option to set the role of these buttons. For more information, see Button Properties.
  • We now also show error badges on elements in the page editor’s Design mode.
  • We no longer support non-persistent sessions.
  • In the Runtime API, we made the following improvements:
    • We removed the floatsEqual, currenciesEqual, parseFloat, formatFloat, and toFloat functions, because the float and currencies types no longer exist. These functions were also removed from Studio Pro.
    • We removed the deprecated IWebserviceResponse.getSaxSource and Configuration.getWebServiceCertificates methods.
    • We removed the deprecated <R> R execute(IContext context, String name, Object... params) throws CoreException, <R> R execute(IContext context, String microflowName, Map<String, Object> params), and <R> R execute(IContext context, String microflowName, boolean executeInTransaction, Map<String, Object> params) methods from the Core. Use Core.microflowCall and Core.userActionCall methods instead.
    • We removed the deprecated void setSystemAction(boolean isSystemAction) from CoreAction. The method should not be used and there is no replacement.
    • We removed the deprecated <R> void addBeforeEvent(Consumer<R> consumer, Class<?> returnType), <R> void addBeforeEvent(Consumer<R> consumer, Class<?> returnType, boolean raiseExceptionOnFalse), and <R> void addAfterEvent(Consumer<R> consumer, Class<?> returnType) methods from ActionListener. Use alternative overloads of the same methods instead.
    • We removed the deprecated void setValue(IContext context, byte[] bytes) and void parseAndStoreValue(IContext context, String value) from MendixBinary. Use setValue of IMendixObjectMember instead.
    • We removed the deprecated void commitValueAsFileDocument(IContext context) and void setLength(Long length) from MendixBinary. commitValueAsFileDocument should not be used and setLength was an optimization. There are no replacements.
    • We removed the deprecated Long getLength() method from MendixBinary. Use MendixBinary.getLength(IContext context) instead.
    • We removed the deprecated constructor RequestHandler(Object component) of RequestHandler. Use the default constructor instead.
    • We removed the deprecated getType() method from IDataValidation. Use the getValidationType method instead.
    • We removed the deprecated getRemoteSource() method from IMetaObject. This was an internal method, and should not be used. There is no alternative.
    • We improved the performance of the Core.getActiveSession(userName) method.
    • We improved the type-checking on Core.evaluateExpression(). It now accepts exactly the same expressions as Studio Pro and no longer accepts other expressions that were wrongly accepted in previous versions. Concretely, the following constructs are no longer accepted (these changes apply only to Core.evaluateExpression(), as Studio Pro already does this):
    • ceil and floor previously accepted any type. They converted the value to a string, tried to parse the string into a decimal, and then rounded it. Now, only decimals and integers are accepted, and all other values are considered runtime errors, because applying ceil and floor does not make sense for non-numeric types.
    • max and min previously accepted either integers, integers mixed with decimals, or integers mixed with decimals and strings. In the latter case, it converted all values into a string and then did a lexicographical comparison. Strings will no longer be accepted. Strings can still be compared to each other using <, <=, >=, and >.
    • round previously accepted either integers or decimals for the precision argument. Decimals are no longer accepted, only integers are accepted, as it does not make sense to round to a non-integer number of digits.
    • The add (+) operator previously allowed any value to be concatenated to a string. It converted the value to a string and then concatenated it. This is no longer allowed, and concatenation of strings is only allowed with strings or strings with decimals or integers. If date/times, Booleans, or enumerations need to be added to a string, use the toString() function to convert them to a string first. Note that an empty/null value is still concatenated as 'null'.
    • The equality (=) and inequality (!=) previously allowed enums to be compared with strings. This is no longer accepted, and only enums are allowed to be compared to enums. Comparing them to strings can still be done by first converting the enumeration to a string using the toString() or getKey() function.
    • The equality (=) and inequality (!=) previously also allowed binary values to be compared. This is no longer allowed. Note that comparing with empty is still valid (for all types).
    • The dateTime and dateTimeUTC previously allowed integers and decimals as its arguments. Decimals are no longer accepted, only integers are accepted, because it does not make sense to initialize a date/time from floating point numbers.
    • Most string functions previously allowed any type for the first argument. The value was converted to a string and then the operation was performed. Now, only string values and theempty value that we treat as an empty string ('') are accepted.
    • The toString function previously accepted all types and converted them to strings. Binary values, objects, and lists are no longer accepted, only strings, integers, decimals, Booleans, enumerations, date/times, and an empty value (that results in an empty string) are accepted.
    • The toDecimal function was removed as well, since it does not exist in Studio Pro at all.


  • We fixed a faulty conversion that caused Close page activities in native mobile apps to not close any pages after your app project had been upgraded from Studio Pro 8.11 or above. (Ticket 111576)
  • We fixed an issue where using an attribute over an association in the sort order of a pluggable widget’s data source caused an exception or an incorrect sorting.
  • We fixed an error that occurred in the client when retrieving data after a fast redeploy.
  • We fixed an issue where closing multiple pages in a native mobile app caused the Back button text to display the page title of the page that was being closed. In addition, if closing multiple pages removes all pages, the back button will no longer be shown during animation.
  • We fixed an issue regarding the Change list microflow activity where if a list was set to itself, the contents were cleared. (Ticket 109243)
  • Deployment is now aborted before synchronization starts on MySQL if the combined length of attributes or the count of attributes of an entity exceeds the maximum supported amount. (Ticket 90823)
  • We added a warning to indicate when the Synchronize to device microflow activity is being used in unsupported flows such as synchronization.
  • We fixed a problem with the Show page and Close page microflow activities when the target page has the Bottom bar property set to Yes but there are no visible bottom-bar items.
  • We fixed an issue where it was not always possible to move widgets from pluggable containment widgets in Design mode.
  • Microflow execution behavior has been modified to handle interruptions more consistently. Previously, when a microflow was interrupted, the commits executed up to the interruption were retained, but the microflow was canceled, as if an error had happened. With this fix, we ensure that interruptions are handled the same way other errors are handled.


At Mendix, we want to provide our customers with a future-proof platform, a significant part of which is always determined by underlying technology. We believe that native mobile apps and progressive web apps (PWAs) are the future for mobile apps, in that they deliver a best-of-breed approach for building app store- and browser-based mobile apps. For more information, see the Establishing Your Mobile Architecture Strategy session from last year’s Mendix World.

We do not consider hybrid mobile (which is based on Cordova) to be future-proof technology anymore. Therefore, hybrid mobile apps are deprecated in Studio Pro 9. It is no longer possible to create new navigation profiles for hybrid apps.

In addition, the report grid widget has been deprecated and will be removed in a future version. We advise against using it in your app projects.

Breaking Changes

  • We now fail the synchronization if it is unable to set the Read Commit Snapshot Isolation in SQL Server.
  • We removed support for the runtime uniqueness validation. This means that from now on, attributes and associations will be validated for uniqueness in the database.
  • It is no longer possible to add mathematical expressions in an XPath outside of tokens. Mathematical expressions should be calculated outside of the XPath expression.
  • The previously deprecated API for globally styling the status bar and header of native pages has been removed. Use the Page and Layout classes instead.
  • We have removed app services, which were deprecated in Mendix 8.
  • The version of big.js library available for widgets has been updated from 5 to 6. The changes between versions are minimal, so we do not expect that your code is affected.
  • Native mobile apps now use React Native version 0.63.3. The libraries that are exposed to native mobile apps have been updated as listed in the React and React Native section of Client APIs Available to Pluggable Widgets. Any pluggable widgets or JavaScript actions that use React Native APIs should be updated accordingly.
  • Studio Pro 9 removes support for Internet Explorer 11. Welcome to the new era! You can check the updated System Requirements documentation to see the list of supported devices and browsers.
  • Deprecated hybrid mobile applications cannot be run anymore in Android emulators. However, on real (up-to-date) devices, they will still successfully run.
  • We removed the special handling of the Contents binary attribute of System.Image. Image rotation, validation, and thumbnail generation now only happens when using the user interface, not when accessing it as MendixObjectMember through the Java API.

Known Issues

  • Creating new apps in this version will work, but upgrading and converting existing apps may fail because not all Marketplace modules and widgets have been made compatible for Mendix 9. This will be fixed for the general availability release of Studio Pro 9.0.
  • When you update a consumed OData service with a new version from Mendix Data Hub but close the document without saving, the blue arrow icon will no longer be shown to notify you about the available update for that service.
    • Workaround: Closing your app project and opening it again fixes this issue.