Mendix Version Compatibility
Supported Mendix Studio Pro versions, feature availability matrix, and known limitations.
Supported Versions
mxcli supports Mendix Studio Pro versions 9.x through 11.x. Development and nightly testing targets five versions:
| Studio Pro Version | MPR Format | Nightly Tested | Status |
|---|---|---|---|
| 9.x | v1 | No | Read-only support |
| 10.0 – 10.17 | v1 | No | Supported |
| 10.18 – 10.23 | v2 | No | Supported |
| 10.24 (LTS) | v2 | Yes | Supported |
| 11.0 – 11.5 | v2 | No | Supported |
| 11.6 | v2 | Yes | Primary development target |
| 11.7 – 11.11 | v2 | No | Supported |
| 11.12 | v2 | Yes | Supported |
| 11.13 | v2 | Yes | Supported |
| 11.14 | v2 | Yes | Latest tested |
The exact patch versions are in the mendix-version matrix in
.github/workflows/nightly.yml,
which is authoritative – this table names the minors only.
MPR Format Versions
v1 (Mendix < 10.18)
- Single
.mprSQLite database file - All documents stored as BSON blobs in the
Contentscolumn of theUnittable – there is no separate contents table - Self-contained – one file holds the entire project
v2 (Mendix >= 10.18)
.mprSQLite file for metadata only – theUnittable has noContentscolumnmprcontents/<XX>/<YY>/<UUID>.mxunit– one file per document- Better suited for Git version control (smaller, per-document diffs)
The library auto-detects the format. No configuration is needed.
Feature Availability Matrix
The tables below show exactly which features are available on each Mendix version. Data is sourced from sdk/versions/mendix-{9,10,11}.yaml.
Domain Model
| Feature | MDL Syntax | 9.x | 10.0+ | 10.18+ | 11.0+ |
|---|---|---|---|---|---|
| Persistent entities | CREATE PERSISTENT ENTITY | Yes | Yes | Yes | Yes |
| Non-persistent entities | CREATE NON-PERSISTENT ENTITY | Yes | Yes | Yes | Yes |
| Calculated attributes | CALCULATED BY Module.Microflow | Yes | Yes | Yes | Yes |
| Entity generalization | EXTENDS Module.ParentEntity | Yes | Yes | Yes | Yes |
| ALTER ENTITY | ALTER ENTITY ... ADD/DROP/RENAME | – | Yes | Yes | Yes |
| View entities | CREATE VIEW ENTITY ... AS SELECT | – | – | Yes | Yes |
Microflows
| Feature | MDL Syntax | 9.x | 10.0+ | 10.6+ | 11.0+ |
|---|---|---|---|---|---|
| Basic microflows | CREATE MICROFLOW ... BEGIN ... END | Yes | Yes | Yes | Yes |
| Loop in branches | LOOP inside IF/ELSE | Yes | Yes | Yes | Yes |
| SEND REST REQUEST | SEND REST REQUEST Module.Service.Op | – | 10.1+ | Yes | Yes |
| Execute database query | EXECUTE DATABASE QUERY ... | – | – | Yes | Yes |
| Show page with params | SHOW PAGE ... WITH PARAMS | – | – | – | Yes |
| REST query parameters | SEND REST REQUEST with QUERY params | – | – | – | Yes |
| DB query runtime connection | EXECUTE DATABASE QUERY CONNECTION ... | – | – | – | Yes |
Pages
| Feature | MDL Syntax | 9.x | 10.0+ | 10.18+ | 11.0+ |
|---|---|---|---|---|---|
| Basic pages | CREATE PAGE ... { ... } | Yes | Yes | Yes | Yes |
| ALTER PAGE | ALTER PAGE ... SET/INSERT/DROP | – | Yes | Yes | Yes |
| Pluggable widgets | DATAGRID, GALLERY, COMBOBOX, IMAGE | – | Yes | Yes | Yes |
| Conditional visibility | Visible: <expression> | – | – | – | Yes |
| Conditional editability | Editable: <expression> | – | – | – | Yes |
| Responsive column widths | TabletWidth: 6, PhoneWidth: 12 | – | – | – | Yes |
| Page parameters (entity) | Params: ( $Item: Module.Entity ) | 9.4+ | Yes | Yes | Yes |
| Page parameters (primitive) | Params: ( $Qty: Integer ) | – | – | – | 11.6+ |
| Page variables | Variables: ( ... ) | – | 10.20+ | 10.20+ | Yes |
| Design properties (Atlas v3) | DesignProperties: (...) | – | – | – | Yes |
- ::: tip Widget Templates Pluggable widget templates are currently extracted from Mendix 11.6. When used on 10.x projects, the MPK augmentation system reconciles property differences. Some CE0463 (“widget definition changed”) errors may still occur.
- ::
Security
| Feature | MDL Syntax | 9.x | 10.0+ |
|---|---|---|---|
| Module roles | CREATE MODULE ROLE | Yes | Yes |
| User roles | CREATE USER ROLE | Yes | Yes |
| Entity access rules | GRANT READ/WRITE ON ... | Yes | Yes |
| Demo users | CREATE DEMO USER | Yes | Yes |
Integration
| Feature | MDL Syntax | 10.0+ | 10.1+ | 10.4+ | 10.6+ | 11.0+ |
|---|---|---|---|---|---|---|
| OData client | CREATE CONSUMED ODATA SERVICE | Yes | Yes | Yes | Yes | Yes |
| Business events | CREATE BUSINESS EVENT SERVICE | Yes | Yes | Yes | Yes | Yes |
| REST client (basic) | CREATE CONSUMED REST SERVICE ... ( ... ) { OPERATION ... } | – | Yes | Yes | Yes | Yes |
| REST client headers | Headers: ('Name': 'Value') | – | – | Yes | Yes | Yes |
| Database Connector | CREATE DATABASE CONNECTION | – | – | – | Yes | Yes |
| REST client query params | QUERY $param: Type | – | – | – | – | Yes |
Workflows
| Feature | MDL Syntax | 9.x | 10.0+ |
|---|---|---|---|
| Basic workflows | CREATE WORKFLOW | Yes | Yes |
| User tasks | USER TASK ... OUTCOMES (...) | Yes | Yes |
| Parallel splits | PARALLEL SPLIT | Yes | Yes |
Navigation
| Feature | MDL Syntax | 9.x | 10.0+ |
|---|---|---|---|
| Navigation profiles | ALTER NAVIGATION ... | Yes | Yes |
| Menu items | MENU ITEM ... | Yes | Yes |
| Home pages | HOME PAGE Module.Page | Yes | Yes |
OQL (View Entity queries)
| Feature | MDL Syntax | 10.18+ | 11.0+ |
|---|---|---|---|
| Basic SELECT | SELECT, FROM, WHERE | Yes | Yes |
| Aggregate functions | COUNT, SUM, AVG, MIN, MAX, GROUP BY | Yes | Yes |
| Subqueries | Inline subqueries in SELECT/WHERE | Yes | Yes |
| JOIN types | INNER/LEFT/RIGHT/FULL JOIN | Yes | Yes |
MPR Format & Infrastructure
| Feature | Minimum Version | Notes |
|---|---|---|
| MPR v2 (mprcontents/) | 10.18 | Per-document files for Git compatibility |
| Association storage format | 11.0 | New BSON encoding for associations |
| Portable app format | 11.6 | New deployment format |
BSON Differences Across Versions
The Mendix metamodel evolves across versions. The reflection data shows ~42% type growth from Mendix 9.0 to 11.6. Key structural differences:
View Entities (10.x vs 11.x)
View entities exist in both 10.18+ and 11.x, but the BSON structure differs. In Mendix 10.x, the OqlViewEntitySource object has an Oql field that stores the OQL query inline (in addition to the separate ViewEntitySourceDocument). Mendix 11.0 removed the inline Oql field. The writer detects the project version and includes the inline field for 10.x projects.
Page Parameters (9.4+, with an 11.5 tail)
Page parameters are not an 11.x feature. Pages$PageParameter and Page.parameters were introduced in 9.4.0, and Pages$PageSettings.parameterMappings — the arguments a SHOW PAGE passes — in 9.7.0 (measured from the Mendix Model SDK’s StructureVersionInfo records). mxcli refused them on 10.x until mendixlabs/mxcli#1121; the 11.0 floor in the version registry came from an illustrative sample table in a proposal, not from a measurement.
What is version-specific is the optional/default-value half: PageParameter.IsRequired and PageParameter.DefaultValue arrived in 11.5.0. MDL cannot express either — every parameter it writes is required with no default — so the writer omits both below 11.5. Emitting them anyway is the “never invent a key” failure: mxbuild accepts unknown properties, and Studio Pro throws InvalidOperationException at MprProperty.cs.
Design Properties (Atlas v2 vs v3)
Atlas UI v3 (Mendix 11.0+) introduced new design properties like “Card style” and “Disable row wrap” for containers. These don’t exist in the Atlas v2 theme bundled with 10.x, causing CE6083.
Widget Type Definitions
Pluggable widget PropertyTypes change between Mendix versions. A widget template extracted from 11.6 may have more or fewer properties than the widget installed in a 10.24 project. The widget augmentation system handles this by reconciling templates against the project’s .mpk files.
Widget Template Versions
Embedded widget templates are extracted from Mendix 11.6 and cover:
| Widget | Template | Widget ID |
|---|---|---|
| Combo box | combobox.json | com.mendix.widget.web.combobox.Combobox |
| Data grid 2 | datagrid.json | com.mendix.widget.web.datagrid.Datagrid |
| Gallery | gallery.json | com.mendix.widget.web.gallery.Gallery |
| Image | image.json | com.mendix.widget.web.image.Image |
| Text filter | datagrid-text-filter.json | com.mendix.widget.web.datagridtextfilter.DatagridTextFilter |
| Number filter | datagrid-number-filter.json | com.mendix.widget.web.datagridnumberfilter.DatagridNumberFilter |
| Date filter | datagrid-date-filter.json | com.mendix.widget.web.datagriddatefilter.DatagridDateFilter |
| Dropdown filter | datagrid-dropdown-filter.json | com.mendix.widget.web.datagriddropdownfilter.DatagridDropdownFilter |
MPK Augmentation
When opening a project, mxcli checks the project’s widgets/ folder for .mpk packages. If a widget’s installed version differs from the embedded template, the augmentation system:
- Extracts the XML property definition from the
.mpk - Adds properties found in
.mpkbut missing from the template - Removes properties in the template but not in the
.mpk - Preserves the BSON structure (IDs, nesting, cross-references)
This reduces CE0463 (“widget definition changed”) errors from widget version drift. See Widget Templates for details.
Version Gates in MDL Scripts
MDL scripts can use -- @version: directives to conditionally execute features based on the target Mendix version. This is used in the doctype integration tests to skip features incompatible with older versions:
-- Runs on all versions
CREATE ENTITY MyModule.Customer (Name: String(200));
-- @version: 11.0+
-- Only runs on Mendix 11.0 and later
CREATE VIEW ENTITY MyModule.ActiveCustomers (...) AS
SELECT c.Name FROM MyModule.Customer AS c WHERE c.IsActive;
-- @version: 10.6..10.24
-- Only runs on Mendix 10.6 through 10.24
CREATE ENTITY MyModule.LegacyConfig (...);
-- @version: any
-- Resets to unconditional (runs on all versions)
CREATE ENTITY MyModule.Universal (...);
Directive formats:
-- @version: 11.0+– minimum version (run on 11.0 and later)-- @version: 10.6..10.24– version range (inclusive)-- @version: ..10.24– maximum version only-- @version: any– reset to unconditional
The directive applies to all lines until the next -- @version: directive.
MxBuild Compatibility
The mx validation tool must match the project’s Mendix version:
# Auto-download the correct MxBuild version
mxcli setup mxbuild -p app.mpr
# Check the project
mxcli docker check -p app.mpr
MxBuild is downloaded on demand and cached in ~/.mxcli/mxbuild/{version}/.
Platform Support
mxcli runs on:
| Platform | Architecture |
|---|---|
| Linux | amd64, arm64 |
| macOS | amd64, arm64 (Apple Silicon) |
| Windows | amd64, arm64 |
No CGO or C compiler is required – the binary is fully statically linked using pure Go dependencies.