Skip to content

Navigation profile application title (AppTitle) and icon have no MDL form: describe omits them, APP TITLE / AppTitle: do not parse, translations refuse the source language #1664

Open

Description

@MohamedElNady

mxcli v0.28.0 (2026-10-23) · Mendix 11.14.0 (blank repro project) — first hit in an 11.15.0 app · OS Windows Server 2025

Summary

A navigation profile's application title (Studio Pro: Navigation → profile → Application title; stored as
Navigation$NavigationProfile.AppTitle, a Texts$Text whose default en_US text in a new project is Mendix) has no MDL
form. The runtime shows it in the browser tab as Mendix - <page title>, so every generated app keeps "Mendix" in the tab
unless someone opens Studio Pro. describe navigation does not print it, three natural spellings fail to parse, and the
translations statement cannot reach it in the source language (it refuses en_US by design). The profile's
application icon (AppIcon, an image reference, Atlas_Core.Content.Mendix by default) is likewise not described and has
no clause.

Minimal repro

Blank project, unchanged navigation:

-- spelling 1
CREATE OR MODIFY NAVIGATION Responsive APP TITLE 'EWO' HOME PAGE MyFirstModule.Home_Web;
-- spelling 2
CREATE OR MODIFY NAVIGATION Responsive TITLE 'EWO' HOME PAGE MyFirstModule.Home_Web;
-- spelling 3 (the stored property name)
CREATE OR MODIFY NAVIGATION Responsive AppTitle: 'EWO' HOME PAGE MyFirstModule.Home_Web;

-- the translations route, source language
CREATE OR MODIFY TRANSLATIONS WITHOUT MARKETPLACE FOR en_US ( 'Mendix' AS 'EWO' );

(each statement was run on its own, in a freshly reset project)

Expected

describe navigation Responsive prints the title (and the icon), and some clause writes them, so a describe → exec round trip
keeps them. Studio Pro stores (read from the blank project's navigation unit):

profile Responsive Navigation$NavigationProfile
  AppTitle:
    $Type: 'Texts$Text'
    Items:
      0: 3
      1:
        $Type: 'Texts$Translation'
        LanguageCode: 'en_US'
        Text: 'Mendix'
  AppIcon:
    'Atlas_Core.Content.Mendix'

Actual

$ mxcli -p Repro.mpr -c "describe navigation Responsive"
create or modify navigation Responsive
  home page MyFirstModule.Home_Web
{
  menu item 'Home' ( OnClick: show page MyFirstModule.Home_Web with (DisabledDuringExecution: false), Icon: glyph 57377 )
};

$ mxcli check <repro>/scripts/ewo_apptitle_a.mdl -p Repro.mpr
  - line 2:39 extraneous input 'APP' expecting the start of a statement (create, alter, drop, show, describe, …)

$ mxcli check <repro>/scripts/ewo_apptitle_b.mdl -p Repro.mpr
  - line 2:39 extraneous input 'TITLE' expecting the start of a statement (create, alter, drop, show, describe, …)
  'Title' is a keyword in MDL. Quote it to use it as a name …

$ mxcli check <repro>/scripts/ewo_apptitle_c.mdl -p Repro.mpr
  - line 2:47 no viable alternative at input 'AppTitle:'

$ mxcli exec <repro>/scripts/ewo_apptitle_tr1.mdl -p Repro.mpr
Error: en_US is the project's source language — writing translations into it would overwrite the strings the rest of the model is keyed on

(the same refusal without WITHOUT MARKETPLACE; mx check passes throughout — nothing is written)

What narrows it down

Variant Result
describe navigation home page and menu only; no title, no icon
APP TITLE 'x' parse error at APP
TITLE 'x' parse error at TITLE (keyword hint)
AppTitle: 'x' parse error at AppTitle:
translations for en_US ('Mendix' as 'x') (source language), with or without without marketplace refused: source language
translations for nl_NL ('Mendix' as 'x') (another language) writes AppTitle's nl_NL item and Atlas_Core's layout text Mendix (warns: 1 Marketplace document)
translations without marketplace for nl_NL ('Mendix' as 'x') writes only AppTitle's nl_NL item in this blank project — but it is keyed on the text, so any own-module string Mendix changes too, and the default (source-language) title stays Mendix

So a second language can be reached indirectly, keyed on a string that is not unique to the title; the source-language title,
which is what most apps show, cannot be set at all.

Suggestions

  • A navigation-profile clause, e.g. create or modify navigation Responsive app title 'EWO' app icon MyModule.Images.Logo home page …,
    writing the source-language item of AppTitle (as captions are written in the project's language, Captions written via MDL always land as en_US — breaks projects whose only/default language isn't en_US #970), and describe navigation printing both back. A property-style AppTitle: 'EWO' would fit equally well if the grammar prefers it.
  • Translations of the title through the existing create or modify translations … for <lang> keyed on the new source text
    (that already works once the source text is no longer the shared word Mendix).
  • Until then, describe navigation could print the title and icon as comments so the gap is visible.

Workaround we use

The shell's start-up JavaScript action rewrites a document.title that starts with Mendix to the app name (a few lines
plus a MutationObserver on <head>). It works, but it is runtime code standing in for one model property, and until the
action has run the tab still reads Mendix. Our second language (Arabic) gets its own title through the translations route
above. The alternative is setting the English title by hand in Studio Pro after every regeneration.

Session log (isolated HOME, paths redacted)
{"time":"2026-10-27T23:58:16.0331936+03:00","level":"INFO","msg":"session_start","version":"v0.28.0","go":"go1.27.3","os":"windows","arch":"amd64","mode":"batch","args":["mxcli","-p","Repro.mpr","-c","describe navigation Responsive"]}
{"time":"2026-10-27T23:58:16.0817477+03:00","level":"INFO","msg":"connect","mpr_path":"Repro.mpr","mendix_version":"11.14.0","mpr_format":2}
{"time":"2026-10-27T23:58:16.263839+03:00","level":"INFO","msg":"execute","stmt_type":"DescribeStmt","stmt_summary":"describe NAVIGATION Responsive","duration_ms":160}
{"time":"2026-10-27T23:58:16.2662717+03:00","level":"INFO","msg":"session_end","commands_executed":2,"errors_count":0,"duration_s":0}
{"time":"2026-10-27T23:58:17.1663807+03:00","level":"INFO","msg":"session_start","version":"v0.28.0","mode":"mxcli check","args":["mxcli","check","<repro>/scripts/ewo_apptitle_a.mdl","-p","Repro.mpr"]}
{"time":"2026-10-27T23:58:17.8270646+03:00","level":"INFO","msg":"session_start","version":"v0.28.0","mode":"mxcli check","args":["mxcli","check","<repro>/scripts/ewo_apptitle_b.mdl","-p","Repro.mpr"]}
{"time":"2026-10-27T23:58:18.5153425+03:00","level":"INFO","msg":"session_start","version":"v0.28.0","mode":"mxcli check","args":["mxcli","check","<repro>/scripts/ewo_apptitle_c.mdl","-p","Repro.mpr"]}
{"time":"2026-10-27T23:58:20.0039068+03:00","level":"INFO","msg":"session_start","version":"v0.28.0","mode":"mxcli exec","args":["mxcli","exec","<repro>/scripts/ewo_apptitle_tr1.mdl","-p","Repro.mpr"]}
{"time":"2026-10-27T23:58:22.1286811+03:00","level":"ERROR","msg":"execute_error","stmt_type":"CreateTranslationsStmt","error":"en_US is the project's source language — writing translations into it would overwrite the strings the rest of the model is keyed on","duration_ms":5}
{"time":"2026-10-27T23:58:23.6680192+03:00","level":"INFO","msg":"session_start","version":"v0.28.0","mode":"mxcli exec","args":["mxcli","exec","<repro>/scripts/ewo_apptitle_tr2.mdl","-p","Repro.mpr"]}
{"time":"2026-10-27T23:58:25.9394106+03:00","level":"ERROR","msg":"execute_error","stmt_type":"CreateTranslationsStmt","error":"en_US is the project's source language — writing translations into it would overwrite the strings the rest of the model is keyed on","duration_ms":0}
{"time":"2026-10-27T23:58:28.6931315+03:00","level":"INFO","msg":"session_start","version":"v0.28.0","mode":"mxcli exec","args":["mxcli","exec","<repro>/scripts/ewo_apptitle_tr3.mdl","-p","Repro.mpr"]}
{"time":"2026-10-27T23:58:31.5470323+03:00","level":"INFO","msg":"execute","stmt_type":"CreateTranslationsStmt","stmt_summary":"CreateTranslationsStmt","duration_ms":728}
{"time":"2026-10-27T23:58:33.3512621+03:00","level":"INFO","msg":"session_start","version":"v0.28.0","mode":"mxcli exec","args":["mxcli","exec","<repro>/scripts/ewo_apptitle_tr4.mdl","-p","Repro.mpr"]}
{"time":"2026-10-27T23:58:36.1432059+03:00","level":"INFO","msg":"execute","stmt_type":"CreateTranslationsStmt","stmt_summary":"CreateTranslationsStmt","duration_ms":434}

Lines abridged (connect / session_end lines and pids trimmed); the check runs stop at the parser, so they log no statement.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions