Skip to content

ALTER STYLING cannot set design properties on widgets in pages and snippets #631

@peterjumpnl

Description

@peterjumpnl

Summary

There is no working write path to change a widget's design properties on a page or snippet. ALTER STYLING rejects pages and snippets with unsupported container type: PAGE/SNIPPET, and the two alternative paths (ALTER PAGE ... SET DesignProperties and UPDATE WIDGETS) also fail or do not target design properties. Design properties can be read (they show up in DESCRIBE PAGE/DESCRIBE SNIPPET), but not written.

This blocks an otherwise highly automatable task: bulk-migrating Atlas 3 design properties to their Atlas 4 equivalents after a theme upgrade (e.g. Display FlexFlex container, Justify contentAlign items X, Gutter sizeItem gap). The mapping is deterministic and the values are readable, but they cannot be applied through mxcli.

Environment

  • mxcli version: v0.11.0 (2026-05-21T18:04:46Z)
  • Mendix project version: 11.6.6 (Atlas 4 theme)
  • Platform: Linux (WSL2)

Steps to Reproduce

Given a page with a container that carries design properties, e.g. DESCRIBE PAGE UxWeb.AanvraagTypeAanpassenPopup shows:

container container2 (
  Class: 'inter-popup-button-container',
  DesignProperties: ['Display Flex': on, 'Justify content': 'Space between', 'Align items': 'Space between']
)
  1. ALTER STYLING on a page

    ALTER STYLING ON PAGE [page name] WIDGET container2 SET 'Flex container' = 'Horizontal (row)'
    

    Error: unsupported container type: PAGE

  2. ALTER STYLING on a snippet

    ALTER STYLING ON SNIPPET [snippet name] WIDGET container21 SET 'Flex container' = 'Horizontal (row)'
    

    Error: unsupported container type: SNIPPET

  3. ALTER PAGE ... SET DesignProperties (passes mxcli check, fails at execution)

    ALTER PAGE [page name] {
      SET DesignProperties = ['Flex container': 'Horizontal (row)'] ON container2
    }
    

    Error: failed to set: failed to set DesignProperties on container2: property "DesignProperties" not found (widget has no pluggable Object)

    On a pluggable widget the message differs but still fails:
    Error: failed to set: failed to set DesignProperties on comboBox1: pluggable property "DesignProperties" not found

  4. UPDATE WIDGETS does not target design properties (the CATALOG.WIDGETS table has no design-property column), so a design-property name in the SET clause matches nothing.

Expected Behavior

A supported, documented command can set/clear a design property on a named widget inside a page or snippet, round-tripping with the DesignProperties: [...] output already produced by DESCRIBE PAGE/DESCRIBE SNIPPET. For example, either of these should work:

ALTER STYLING ON PAGE Module.Page WIDGET container2 SET 'Flex container' = 'Horizontal (row)'

or

ALTER PAGE Module.Page {
  SET DesignProperties = ['Flex container': 'Horizontal (row)'] ON container2
}

Ideally a dry run option is supported and design property keys/values are validated against SHOW DESIGN PROPERTIES for the widget type.

Actual Behavior

  • ALTER STYLING ON PAGE|SNIPPET ... SET '<design property>' = ...unsupported container type: PAGE/SNIPPET.
  • ALTER PAGE ... SET DesignProperties = [...] ON widget → passes mxcli check but errors at execution with property "DesignProperties" not found (core widget) / pluggable property "DesignProperties" not found (pluggable widget).
  • UPDATE WIDGETS SET '<design property>' = ... → no match; design properties are not catalog columns.

Net result: design properties are readable but not writable through any current command.

Impact

Migrating widgets after an Atlas 3 → Atlas 4 theme upgrade currently requires manual right-click "see more options" per widget in Studio Pro. In one real project this affects 114 occurrences (CE6083) across 35 documents. A working write path would make this a scripted, validated bulk operation.

Additional Notes / Suggestions

  • That ALTER PAGE ... SET DesignProperties passes mxcli check but fails at execution suggests the parser accepts a property the executor does not implement; aligning the two (either implement it, or reject at check time) would help.
  • A read-completeness gap may be related: DESCRIBE PAGE appears to omit design properties on deeply nested widgets (e.g. inside table cells / layout-grid columns), so a fix should ensure the same traversal is used for both read and write.
  • Happy to provide a full sample project and the complete Atlas 3 → Atlas 4 design-property mapping table if useful.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions