mxcli version: v0.16.0-303-gb344f999-dirty (built from b344f999, 2026-07-30) · OS: macOS 15.6.1 (Darwin 24.6.0, Apple Silicon) · Studio Pro: 11.13.0 Beta · Mendix project: 11.13.0
Summary
Every Show Page action written by mxcli gets FormSettings.TitleOverride set to a non-null but empty Microflows$TextTemplate. Studio Pro leaves that field null.
An empty override is not the same as an absent one. mxbuild emits it as "title": selectTranslation([{ "type": "literal", "value": "" }]), and at runtime that overrides the target page's own title with an empty string. Every popup opened by an mxcli-authored button therefore shows an empty caption — just the ×.
The page itself is fine: its Title is stored correctly, survives round-trip, and reaches the client. So editing the page's Title in Studio Pro appears to do nothing, which makes this look like a lost title rather than an override. That took a while to unpick.
Minimal repro
Any page opened as a popup from an mxcli-created button.
create or modify page ContentManager.ProbePopup (
Title: 'Probe title',
Layout: Atlas_Core.PopupLayout,
Folder: 'PageHost',
PopupResizable: true
) {
layoutgrid layoutGrid1 {
row row1 {
column col1 (DesktopWidth: AutoFill) {
dynamictext text1 (Content: 'body')
}
}
}
}
/
alter page ContentManager.SomeExistingPage {
insert after someWidget {
actionbutton btnProbe (
Caption: 'Open probe',
Action: show_page ContentManager.ProbePopup
)
}
}
/
Run the app, click Open probe.
Expected
The modal header shows Probe title — the target page's title, as it does for a button created in Studio Pro.
Actual
The modal header shows only the ×. The caption element exists and is empty:
<div class="modal-header mx-window-header">
<button type="button" class="close" title="close" aria-label="close">×</button>
<h4 id="mxui_widget_Window_0_caption" role="heading" aria-level="2"></h4>
</div>
Root cause — the model
Two buttons on the same page, opening two popups that use the same Atlas_Core.PopupLayout. One button was drawn in Studio Pro, the other written by mxcli:
Studio Pro button
Forms$FormAction.FormSettings = {
Form: "ContentManager.PageFromStudioPro",
TitleOverride: null <-- absent
}
mxcli button
Forms$FormAction.FormSettings = {
Form: "ContentManager.ProbePopupNoParam",
TitleOverride: { <-- present but empty
$Type: "Microflows$TextTemplate",
Text: { $Type: "Texts$Text", Items: [] },
Parameters: []
}
}
Root cause — what mxbuild does with it
Generated client bundle for the page holding both buttons, deployment/web/dist/pages/…DebugBucketContents.js:
// Studio Pro button — no title key at all
"config": { "name": "ContentManager/PageFromStudioPro.page.xml",
"location": "modal", "resizable": true, … }
// mxcli button — empty title override wins over the page's own title
"config": { "name": "ContentManager/ProbePopupNoParam.page.xml",
"title": selectTranslation([{ "type": "literal", "value": "" }]),
"location": "modal", "resizable": true, … }
Confirmation
Removing only that "title": selectTranslation(...) key from the served bundle and reloading makes the caption render correctly:
before caption = ""
after caption = "Probe A no param"
Nothing else was changed.
Ruled out
Each tested as a single variable, in the running app:
- Page parameters — a parameterless mxcli popup is equally broken.
- Popup sizing — probe mirrored the Studio Pro page (
PopupResizable: true, no fixed width/height); still broken.
Autofocus — mxcli always writes DesktopOnly where Studio Pro had Off; patching the served bundle to off did not fix it.
- Stale build — the edited title was present in the deployed JS and
metadata.json was newer than the .mpr.
- Missing translation — the page's
Title is a normal Texts$Text with a correct en_US Texts$Translation, identical in shape to the Studio Pro page.
- The layout — both pages use the same
Atlas_Core.PopupLayout. The caption is drawn by the client's window chrome, not by the layout.
Scope in one project
Scanning every Forms$FormSettings in a project built mostly with mxcli:
TitleOverride |
Count |
Origin |
| empty (caption blank) |
10 |
all mxcli-authored |
null or a real template |
58 |
all Studio Pro / marketplace modules (OIDC, UserCommons, Administration, FeedbackModule, AWSAuthentication), including the one Studio Pro button sitting on the same page as a broken one |
The split is total — no mxcli-written Show Page action is correct, and no Studio Pro one is broken.
Suggested fix
When no title override is specified in MDL, leave FormSettings.TitleOverride as null rather than constructing an empty Microflows$TextTemplate. An empty template is indistinguishable from "override the title with nothing".
It would also be useful to expose the override in MDL — there appears to be no syntax for setting a Show Page action's title, so today it can only be cleared in Studio Pro.
mxcli version:
v0.16.0-303-gb344f999-dirty(built fromb344f999, 2026-07-30) · OS: macOS 15.6.1 (Darwin 24.6.0, Apple Silicon) · Studio Pro: 11.13.0 Beta · Mendix project: 11.13.0Summary
Every Show Page action written by mxcli gets
FormSettings.TitleOverrideset to a non-null but emptyMicroflows$TextTemplate. Studio Pro leaves that fieldnull.An empty override is not the same as an absent one. mxbuild emits it as
"title": selectTranslation([{ "type": "literal", "value": "" }]), and at runtime that overrides the target page's own title with an empty string. Every popup opened by an mxcli-authored button therefore shows an empty caption — just the×.The page itself is fine: its
Titleis stored correctly, survives round-trip, and reaches the client. So editing the page's Title in Studio Pro appears to do nothing, which makes this look like a lost title rather than an override. That took a while to unpick.Minimal repro
Any page opened as a popup from an mxcli-created button.
Run the app, click Open probe.
Expected
The modal header shows
Probe title— the target page's title, as it does for a button created in Studio Pro.Actual
The modal header shows only the
×. The caption element exists and is empty:Root cause — the model
Two buttons on the same page, opening two popups that use the same
Atlas_Core.PopupLayout. One button was drawn in Studio Pro, the other written by mxcli:Root cause — what mxbuild does with it
Generated client bundle for the page holding both buttons,
deployment/web/dist/pages/…DebugBucketContents.js:Confirmation
Removing only that
"title": selectTranslation(...)key from the served bundle and reloading makes the caption render correctly:Nothing else was changed.
Ruled out
Each tested as a single variable, in the running app:
PopupResizable: true, no fixed width/height); still broken.Autofocus— mxcli always writesDesktopOnlywhere Studio Pro hadOff; patching the served bundle tooffdid not fix it.metadata.jsonwas newer than the.mpr.Titleis a normalTexts$Textwith a correcten_USTexts$Translation, identical in shape to the Studio Pro page.Atlas_Core.PopupLayout. The caption is drawn by the client's window chrome, not by the layout.Scope in one project
Scanning every
Forms$FormSettingsin a project built mostly with mxcli:TitleOverridenullor a real templateThe split is total — no mxcli-written Show Page action is correct, and no Studio Pro one is broken.
Suggested fix
When no title override is specified in MDL, leave
FormSettings.TitleOverrideasnullrather than constructing an emptyMicroflows$TextTemplate. An empty template is indistinguishable from "override the title with nothing".It would also be useful to expose the override in MDL — there appears to be no syntax for setting a Show Page action's title, so today it can only be cleared in Studio Pro.