Mendix Studio pro

9.0.5
Stable
March 31, 2021
Mendix Studio Pro is our low-code IDE for professional developers. It's a powerful visual model-driven development environment to build apps on the Mendix Platform. With Studio Pro you can easily create, change, integrate, test and deploy your applications, all in one place. Moreover, you can manage branch lines and security as well as extend your app with custom code using the built-in editors. Click 'Download Studio Pro' to get the installer for free (Windows OS required*). Learn more about the installation and the Studio Pro capabilities in our documentation. Not a professional developer? Learn How Mendix supports different developer profiles .Before installing, please read the Release Notes to learn about improvements, bug fixes, backwards compatibility, breaking changes and known issues. *If you are using a Mac, check out these instructions first.
Release Notes - ## 9.0.5 **Release date: March 31st, 2021** ### New Features * This release includes an activity for conditional looping called [While](https://docs.mendix.com/refguide/loop#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. This is based on an [upvoted idea from Tim van Steenbergen](https://forum.mendixcloud.com/link/ideas/896) submitted to the [Mendix Idea Forum](https://forum.mendixcloud.com/link/ideas). Thanks, Tim! * You can now copy and paste multiple entities and annotations in the domain model. This is based on an [upvoted idea from Marnix Puijker](https://forum.mendixcloud.com/link/ideas/63) submitted to the [Mendix Idea Forum](https://forum.mendixcloud.com/link/ideas). Thanks, Marnix! * In this release, you can finally use Git for version control of your Mendix apps hosted on your own private Git server. This feature is currently in Beta. * We added support for files and images in the [Synchronize to device](https://docs.mendix.com/refguide/synchronize-to-device) activity. * We added support for the `getCaption` and `getKey` [enumeration functions](https://docs.mendix.com/refguide/enumerations-in-expressions) in microflow expressions used client-side (for example, in [nanoflows](https://docs.mendix.com/refguide/nanoflows) or [conditional visibility](https://docs.mendix.com/refguide/common-widget-properties)). #### Workflows As of this release, a workflow editor is now available as a [Beta feature](https://docs.mendix.com/releasenotes/beta-features/) in Mendix Studio Pro. Every organization wants to digitize their processes, but this is usually easier said than done. The new workflow capabilities in Mendix set you free to digitize any process without the complexity and lengthy projects that traditional methods require. The new visual workflow editor is available in both Mendix Studio Pro and Mendix Studio. This new language is fully integrated with existing DSLs for pages, microflows, security, and the Mendix Runtime. In addition, we have released an optional [Workflow Commons](https://marketplace.mendix.com/link/component/117066) module that gets you on your way in no time. This module provides ready-to-use task inbox and admin pages, dashboards, useful page templates, and more. All you need to do is download the module from the Mendix Marketplace, add a workflow from the [App Explorer](https://docs.mendix.com/refguide/project-explorer), and off you go. #### MxAssist Performance Bot [MxAssist Performance Bot](https://docs.mendix.com/refguide/mx-assist-performance-bot) is now available as an intelligent virtual co-developer bot that helps you improve the performance of your app 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 apps to learn common anti-patterns. Use cases for recommending fixes and auto-fixing anti-patterns have been added to the bot. 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](https://docs.mendix.com/refguide/mx-assist-performance-bot#detecting) – The bot inspects the app model, identifies the issue, and pinpoints the document/element causing the issue for you. 2. [Recommendation](https://docs.mendix.com/refguide/mx-assist-performance-bot#recommending) – 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](https://docs.mendix.com/refguide/performance-best-practices) with steps for fixing the issue. 3. [Auto-fixing](https://docs.mendix.com/refguide/mx-assist-performance-bot#auto-fixing) – After the user acknowledges, the bot can automatically implement the best practice and fix the issue. #### Task Queue This release makes the [task queue](https://docs.mendix.com/refguide/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. #### Progressive Web Apps Studio Pro 9 adds support for building offline-first progressive web apps (PWAs). PWAs offer [offline-first](https://docs.mendix.com/refguide/offline-first) capabilities similar to native mobile apps, but they 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: **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. In offline-first apps using PWAs and [native mobile](https://docs.mendix.com/refguide/native-mobile), we made it more simple to get data dynamically from a data source. You can now directly use XPath as a data source instead of using a nanoflow with a retrieve action. This is available for list views, data grids, template grids, reference selectors, and any pluggable widget. In addition, offline-first PWAs now keep users logged in for a longer period. By default, users will be logged out after 7 days of inactivity. This can be customized using the new `LongLivedSessionTimeout` runtime setting. ##### PWAs on a Device's Home Screen With the new PWA functionality, end-users can easily add a Mendix PWA to their 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. ##### Other PWA Capabilities Offline-first progressive web apps (PWA) have capabilities for 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. Please note this comes at a cost, as more bandwidth is consumed initially, which is not always desired. #### Native Dependency Management With this release, we made it simpler to add additional React Native modules to your native mobile apps. Your pluggable widget or JavaScript action can now [define which native modules it needs](https://docs.mendix.com/apidocs-mxsdk/apidocs/native-dependencies) 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](https://docs.mendix.com/apidocs-mxsdk/apidocs/native-dependencies#declaration-file). For pluggable widgets, the latest version of the [widget tooling](https://www.npmjs.com/package/@mendix/pluggable-widgets-tools) 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](https://docs.mendix.com/releasenotes/mobile/mendix-native-mobile-builder) will include the modules when building a native mobile app for development or distribution. #### List Filtering by Expression We have added support for filtering/finding by expression in a [List operation](https://docs.mendix.com/refguide/list-operation) activity. 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](https://docs.mendix.com/refguide/text) or the [label property](https://docs.mendix.com/refguide/common-widget-properties#label) 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. 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](https://docs.mendix.com/refguide/expressions) are now at your disposal with logic (if-then-else), functions, the context of parent data views, and even retrieving over associations. Thank you Rob Bartholomew for [thinking along](https://forum.mendixcloud.com/link/ideas/937). #### New Atlas UI Folder Structure With Studio Pro 9.0, we have released a new version of Atlas UI. Atlas UI 3.0 comes 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 [Mendix Marketplace](https://marketplace.mendix.com/), 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. The **theme_old** is dead, long live the [theme](#theme-folder)! It is important to note that the **themesource** directory is not only for Marketplace modules. We encourage you to use it for local modules as well, since it allows you to modularize your styles and keep them more manageable. Mendix will even scaffold a default **themesource** structure for all of your modules. 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 (via F4), deployment, and module structure changes. When running your app locally, Studio Pro will monitor the **theme** and **themesource** directories to recompile automatically when any styling changes are detected. We have also introduced a new **theme-cache** folder, which holds the compiled version of your styling. When the styling changes and is recompiled, you will see changes in **theme-cache** when uploading your app to the Team Server. This is expected behavior, as it is needed for [Mendix Studio](https://docs.mendix.com/studio/) and [Design mode](https://docs.mendix.com/refguide/page#design-mode). ##### 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. Please note that the **theme** changes are opt-in, which means you can keep using the old structure (for example, if you choose to stick to Atlas UI 2.0 for now). However, Atlas UI 3.0 requires the new structure, and the documentation explains the steps needed for conversion. ##### 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. #### New Merge Algorithm In the [Preferences](https://docs.mendix.com/refguide/preferences-dialog) 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 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 you to decide on the final order of the widgets in the list. Inspecting conflicts is more convenient now that lines that refer to the same element are combined. In addition, 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. For more information on the new merge algorithm, see [New Merge Algorithm with Fine-Grained Conflict Resolution](https://docs.mendix.com/refguide/new-merge-algorithm). Also in the **Preferences** dialog, we removed the option to go back to the old version of the **Changes** pane. ### Improvements * 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). This is based on an [upvoted idea from Ivo Sturm](https://forum.mendixcloud.com/link/ideas/290) submitted to the [Mendix Idea Forum](https://forum.mendixcloud.com/link/ideas). Thank you for thinking along, Ivo! * 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) * We updated the [SAP HANA](https://docs.mendix.com/refguide/saphana) driver to 2.7.9. (Ticket 11311) * When running an app without a license, the [Data Hub limitation on the number of objects](https://docs.mendix.com/refguide/consumed-odata-service-requirements) no longer applies. * We improved the performance of pluggable widgets that use the [ListValue](https://docs.mendix.com/apidocs-mxsdk/apidocs/client-apis-for-pluggable-widgets#listvalue) property with a database data source. These widgets no longer issue a "count" request unless they need `totalCount`. * In addition to closing one or more pages with the [Show page](https://docs.mendix.com/refguide/show-page) or [Close page](https://docs.mendix.com/refguide/close-page) activities in your native mobile app, you can now also close all the pages in the current stack at once by selecting the **All** option in the properties. * We added a default page for unsupported browsers. * The header on the login page of [Atlas UI](https://docs.mendix.com/howto/front-end/atlas-ui) can now be translated using the new `mendix.signin.loginHeader` system text. * We gave the [page editor](https://docs.mendix.com/refguide/page#structure-mode) a facelift for **Structure mode**: * Layout grids have a fresh, clean look. * Containers can easily be distinguished by their dashed borders. * The color of selecting or hovering over an element is now blue. * Drop-zones are smaller to reduce horizontal spacing. * The [App Security](https://docs.mendix.com/refguide/project-security) dialog box is now resizable in both directions. * In the domain model editor, microflow editor, page editor (only in [Structure mode](https://docs.mendix.com/refguide/page#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 now also show error badges on elements in the page editor's [Design mode](https://docs.mendix.com/refguide/page#design-mode). * 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. * The state of the **Show purely visual visual changes** toggle in the [Changes pane](https://docs.mendix.com/refguide/changes-pane#modified) is now remembered when switching between documents or modes. * In the **Changes**, we no longer use the terms **Merge start** and **Merge end**. We now use **Original**, **Mine**, and **Theirs**. Also, we reordered the columns to show "my changes" first. Finally, we improved the visualization of elements and values in this pane. * We improved the process of reverting all changes. You will no longer be asked to save before reverting. We also fixed a crash that occurred when you reverted while the app was running. * The quick fix to update renamed design properties now also recognizes drop-down options that were replaced by a toggle property. * We rebranded the sign-in window with the Mendix 9 look and feel. We also introduced a new flow where you see the sign-in window first when starting Studio Pro. However, the sign-in window no longer blocks the main window when you launch Studio Pro. * We updated the splash screen, about screen, empty state background, and application icons in Studio Pro. * 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](https://docs.mendix.com/refguide/mxbuild). * You can now use the [input reference set selector](https://docs.mendix.com/refguide/input-reference-set-selector) widget inside a [containment or repeatable containment](https://docs.mendix.com/apidocs-mxsdk/apidocs/property-types-pluggable-widgets-8#widgets) pluggable widget. * 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](https://docs.mendix.com/apidocs-mxsdk/apidocs/property-types-pluggable-widgets#expression) and as a page title in the [Show a page](https://docs.mendix.com/refguide/on-click-event#show-page) action. * You can now use [image uploader](https://docs.mendix.com/refguide/image-uploader) widget inside a [containment](https://docs.mendix.com/releasenotes/studio-pro/8.3#pluggable) or [repeatable containment](https://docs.mendix.com/releasenotes/studio-pro/8.7#capability) pluggable widget. * We improved the accessibility of [action buttons](https://docs.mendix.com/refguide/button-widgets) 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](https://docs.mendix.com/refguide/button-properties). * If you get a consistency error on an outdated version of the [Nanoflow Commons](https://docs.mendix.com/appstore/modules/nanoflow-commons) or [Native Mobile Resources](https://docs.mendix.com/appstore/modules/native-mobile-resources) module, you can now right-click the module to update it. * When creating pages, the [title](https://docs.mendix.com/refguide/page-properties#title) of a page is now derived from its name. * We added support for [PostgreSQL 13](https://docs.mendix.com/refguide/system-requirements#databases). * [Query engine 9](https://docs.mendix.com/refguide/moving-from-8-to-9#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. * When adding a data view from the **Toolbox** on a native page, its form orientation will be set to vertical by default. * 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. * We no longer support non-persistent sessions. #### Runtime API Improvements In the [Runtime API](https://docs.mendix.com/apidocs-mxsdk/apidocs/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 execute(IContext context, String name, Object... params) throws CoreException`, ` R execute(IContext context, String microflowName, Map params)`, and ` R execute(IContext context, String microflowName, boolean executeInTransaction, Map params)` methods from the [`Core`](https://apidocs.rnd.mendix.com/8/runtime/com/mendix/core/Core.html). Use `Core.microflowCall` and `Core.userActionCall` methods instead. * We removed the deprecated `void setSystemAction(boolean isSystemAction)` from [`CoreAction`](https://apidocs.rnd.mendix.com/9/runtime/com/mendix/core/actionmanagement/CoreAction.html). The method should not be used and there is no replacement. * We removed the deprecated ` void addBeforeEvent(Consumer consumer, Class returnType)`, ` void addBeforeEvent(Consumer consumer, Class returnType, boolean raiseExceptionOnFalse)`, and ` void addAfterEvent(Consumer consumer, Class returnType)` methods from [`ActionListener`](https://apidocs.rnd.mendix.com/9/runtime/com/mendix/core/actionmanagement/ActionListener.html). 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`](https://apidocs.rnd.mendix.com/9/runtime/com/mendix/core/objectmanagement/member/MendixBinary.html). Use `setValue` of `IMendixObjectMember` instead. * We removed the deprecated `void commitValueAsFileDocument(IContext context)` and `void setLength(Long length)` from [`MendixBinary`](https://apidocs.rnd.mendix.com/9/runtime/com/mendix/core/objectmanagement/member/MendixBinary.html). `commitValueAsFileDocument` should not be used and `setLength` was an optimization. There are no replacements. * We removed the deprecated `Long getLength()` method from [`MendixBinary`](https://apidocs.rnd.mendix.com/9/runtime/com/mendix/core/objectmanagement/member/MendixBinary.html). Use `MendixBinary.getLength(IContext context)` instead. * We removed the deprecated constructor `RequestHandler(Object component)` of [`RequestHandler`](https://apidocs.rnd.mendix.com/9/runtime/com/mendix/externalinterface/connector/RequestHandler.html). Use the default constructor instead. * We removed the deprecated `getType()` method from [`IDataValidation`](https://apidocs.rnd.mendix.com/9/runtime/com/mendix/systemwideinterfaces/core/meta/IDataValidation.html). Use the `getValidationType` method instead. * We removed the deprecated `getRemoteSource()` method from [`IMetaObject`](https://apidocs.rnd.mendix.com/9/runtime/com/mendix/systemwideinterfaces/core/meta/IMetaObject.html). 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 the`empty` 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. ### Limitations * In native apps, the [Clear history](https://docs.mendix.com/refguide/show-page#close-pages) 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. ### Deprecations * We deprecated `window.logger` in the [Client API](https://docs.mendix.com/apidocs-mxsdk/apidocs/client-api) in favor of `mx.logger`. * We deprecated the direct function call on properties linked to a data source in ([ListActionValue](https://docs.mendix.com/apidocs-mxsdk/apidocs/client-apis-for-pluggable-widgets#listactionvalue), [ListAttributeValue](https://docs.mendix.com/apidocs-mxsdk/apidocs/client-apis-for-pluggable-widgets#listattributevalue), [ListWidgetValue](https://docs.mendix.com/apidocs-mxsdk/apidocs/client-apis-for-pluggable-widgets#listwidgetvalue) and [ListExpressionValue](https://docs.mendix.com/apidocs-mxsdk/apidocs/client-apis-for-pluggable-widgets#listexpressionvalue)) in favor of calling `get` on these types. * We will drop support for Oracle 18 before June 30th. We will announce this again when the support is dropped. * The [report grid](https://docs.mendix.com/refguide/report-grid) widget has been deprecated and will be removed in a future version. We advise against using it in your apps. #### Hybrid Mobile 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](https://www.mendix.com/blog/mobile-apps-go-native-part-i/) and [progressive web apps (PWAs)](https://www.mendix.com/mobile-architecture/#progressive-web-apps) 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](https://www.mendixworld.com/session/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. ### Breaking Changes * Studio Pro 9.0.5 requires apps to be in at least version [8.12.0](https://docs.mendix.com/releasenotes/studio-pro/8.12#8120) to open them. This also applies to importing (Marketplace) modules. * We have removed app services, which were deprecated in Mendix 8. * Reserved property keys (`tabindex`, `class`, and `style`) will no longer be silently ignored when used in the widget XML. They will now result in an error when reading the widget package. Reserved property keys are treated case-insensitively. Please note that `tabindex` may still appear as a system property. * We fixed an issue with pluggable widgets where it was not properly checked that `name` was a reserved word and should not be used to name a top-level property of a widget. * We changed the behavior of [ListValue](https://docs.mendix.com/apidocs-mxsdk/apidocs/client-apis-for-pluggable-widgets#listvalue) in the Client API available to pluggable widgets. Now, widgets do not receive the `totalCount` value unless they explicitly request it using the new `requestTotalCount` method. * Studio Pro 9 removes support for Internet Explorer 11. Welcome to the new era! You can check the updated [System Requirements](https://docs.mendix.com/refguide/system-requirements#browsers) documentation to see the list of supported devices and browsers. * 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](https://docs.mendix.com/apidocs-mxsdk/apidocs/native-dependencies). Pluggable widgets and JavaScript actions should now [define which native modules](#native-dependency-management) they need. Any pluggable widgets and JavaScript actions using native modules must be updated so that they declare which modules they are using. * 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](https://docs.mendix.com/apidocs-mxsdk/apidocs/client-apis-for-pluggable-widgets#exposed-react) section of *Client APIs Available to Pluggable Widgets*. Any pluggable widgets or JavaScript actions that use React Native APIs should be updated accordingly. * Deprecated [hybrid mobile](https://docs.mendix.com/howto/mobile/hybrid-mobile) applications cannot be run anymore in Android emulators. However, on real (up-to-date) devices, they will still successfully run. * 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](https://docs.mendix.com/refguide8/moving-from-7-to-8#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. * 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](https://docs.mendix.com/refguide/native-styling-refguide#pages) instead. * The version of [big.js](http://mikemcl.github.io/big.js/) library available for widgets has been updated from 5 to 6. The [changes](https://github.com/MikeMcl/big.js/blob/581037601e596234f0bbc340165d62750cf7ac8b/CHANGELOG.md) between versions are minimal, so we do not expect that your code is affected. * 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. * We removed the following deprecated methods from the [Client API](https://docs.mendix.com/apidocs-mxsdk/apidocs/client-api): * `mx.data.getBacktrackConstraints` * `mx.data.release` * `mendix.lang.delay` * `mendix.lang.map` * `mendix.lang.nullExec` * `mx.server.request` * `MxContext.setTrackEntity` * `MxContext.setTrackId` * `MxObject.compare` * `MxError` * * We replaced every mention of `CoreAction` in the public [Runtime API](https://docs.mendix.com/apidocs-mxsdk/apidocs/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. ### Known Issues * When you drag Studio Pro to an external display or different monitor that is a secondary screen and you modify a document, Studio Pro appears to freeze. This is because modal dialogs are blocking the main window. * Workaround: Use Studio Pro only in your main display. * When Studio Pro is displayed on a secondary screen, it is currently not possible to select an entity from the [Data Hub pane](https://docs.mendix.com/refguide/data-hub-pane) and drag it to the domain model editor. * Workaround: On the primary screen this issue does not appear, so move Studio Pro to your primary screen to perform this action. * When you update a [consumed OData service](https://docs.mendix.com/refguide/consumed-odata-service) with a new version from [Mendix Data Hub](https://docs.mendix.com/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 and opening it again fixes this issue. * Having spaces around a user-targeting XPath constraint in the **Workflow** user task might result in an error. * Workaround: make sure there are no spaces around the constraint text. * In the workflow editor, moving an element after an undo operation might result in an error. * It is not possible to switch Studio Pro to [Full Screen](https://docs.mendix.com/refguide/view-menu#full-screen) mode. For more details, see [9.0.0 Beta release notes](https://docs.mendix.com/releasenotes/studio-pro/9.0#betas).