uiextensions

Last modified by Lucas Charpentier on 2026/10/27 10:30

Audit

Macro ID
uiextensions
Source
XS
Type
Generator
Classification reason
The macro has no content and its output is the rendering of the UI extensions registered on the given extension point, so it is classified as a generator.
Status
Reviewed
Criteria version
15.20
XWiki version
18.8.0
Audit date
2026-10-20
Auditor
Compared macros
include translation

Sources

Where to gather the information the criteria are checked against, see Gather the sources.

SourceWhat it givesUsed forWhere
DocumentationParameters, default values and examples, including the most common exampleL2, L3, and the criteria measured with the most common examplehttps://extensions.xwiki.org/xwiki/bin/view/Extension/Extension%20Module/UI%20Extensions%20Macro/#HUsage
Source codeHow the macro declares its parameters and content: types, groups, features, advanced and hidden flags, constraints, content type, inline supportC4, C5, C7, C8, C9, C13, E4, E6https://github.com/xwiki/xwiki-platform/blob/xwiki-platform-18.8.0/xwiki-platform-core/xwiki-platform-uiextension/xwiki-platform-uiextension-api/src/main/java/org/xwiki/uiextension/internal/macro/UIExtensionsMacro.java
Macro descriptorWhat the Edit Macro dialog is built from, on design.xwiki.orgD1, D2, C1 to C9, E4Descriptor, list of macros with their categories
TranslationsThe name, description and parameter names in each languageD1, D2, D4, C1l10n.xwiki.org
Uses in XWiki pagesHow XWiki itself uses the macro, a realistic example when the documentation has noneL3, C2, C3, C6, C8, C9Search the xwiki organization on GitHub
Compared macrosThe audits of the macros of the same typeL1, D3include, translation
Other sources specific to this macro
CriterionResultNotes
D1 wordingOK"UI Extensions" is the name XWiki gives to the feature, the UI extension points that applications fill, so it is right for a macro of the Development category, like "UI Extension" for its sibling.
D2 summaryKO"Insert UI extensions." repeats the name and does not say what the macro adds to the page: the output of every UI extension registered on the given extension point, rendered where the macro is. The French and German descriptions repeat the name the same way. To reproduce: open the Insert Macro dialog and select UI Extensions.
D3 categoryOKDevelopment, the category of the macro, where a developer who wants to render the UI extensions of an extension point looks for it. The compared macros include and translation are in Content, which fits their user use; this macro needs the identifier of an extension point, which only developers know.
D4 quick-actionOKQuick Actions finds the macro first for "uiextensions", "UI Extensions", "extensions" and "ui extensions", each time with UI Extension, the sibling macro, second, and for the French name "Extensions UI". The synonyms "extension point", "uix", "plugin" and "hook" give no result. The macro is named after its technology, so the few synonyms are OK.
L1 consistencyOKcompared with include and translation. Like them, the macro has no content, one mandatory target and no other parameter, so its Quick Action and the Insert Macro dialog open the Edit Macro dialog, which is by design.
L2 doc-parametersKOthe only parameter, extensionPoint, is documented only on the legacy extensions.xwiki.org page, https://extensions.xwiki.org/xwiki/bin/view/Extension/Extension%20Module/UI%20Extensions%20Macro/, not in the new documentation. It says nothing on what an extension point is or where to find the identifiers of the ones XWiki Standard offers.
L3 doc-exampleKOthe only example of the documentation, {{uiextensions extensionPoint="org.xwiki.platform.search"/}} , renders an empty output: no UI extension of XWiki Standard is registered on that extension point, so a user who copies it sees nothing and cannot tell a working macro from a wrong identifier. The audit uses the extension point org.xwiki.platform.template.information, which has an extension in XWiki Standard and renders the "Required rights" block of a page that enforces no right. The identifiers of XWiki Standard are not consistent, some are spelled "plaftorm", like org.xwiki.plaftorm.drawer, which makes them hard to guess without a list.
I1 patternOKcompared with children, the reference generator, and with include and translation. From Quick Actions, the "UI Extensions" entry opens the Edit Macro dialog, since the extension point is mandatory, the generic behavior of a generator that needs a target. The Insert Macro dialog opens the same dialog.
I2 zero-configOKsubmitting the Edit Macro dialog with the empty mandatory field keeps the dialog open with no message, the generic behavior of the dialog. {{uiextensions/}} typed in the source gives "Invalid macro parameters used for the [uiextensions] macro. Cause: [Property [extensionpoint] mandatory].", acceptable for a generator that needs its target. An extension point with no extension is a normal case and renders nothing, with only the generic "macro:uiextensions" text in the editor, like include for an empty page, as for the sibling uiextension.
I3 instantN/A
I4 cursorN/A
I5 focusOKthe mandatory ExtensionPoint field is alone in the dialog, visible without scrolling, and has the focus when the dialog opens.
E1 wysiwygOKthe example shows the rendered "Required rights" block in the editor as in view mode, under a small "Uiextensions" label. An extension point with no extension, like the one of the documented example, shows only the generic "macro:uiextensions" text in the editor, also after reopening the page, the same as for the sibling.
E2 errorsKOan empty extension point, a value with a space, an unknown point, a wrong case and a quoted value are all accepted silently: {{uiextensions extensionPoint="org.xwiki.nosuch.Point"/}} renders nothing, with no message. An extension point is just a string that extensions refer to, so the macro cannot tell an unknown point from one with no extension, but the result gives no way to find a typo, the more so since the identifiers are case sensitive and not consistent. The dialog refuses an empty value, but a page can hold it.
E3 nestingOKthe example renders with no error in a list item, a table cell and a box. It is a block output that stays usable, and the macro has no content.
E4 inline-supportOKthe macro declares inline support. Before {{uiextensions extensionPoint="org.xwiki.audit.two"/}} after. , for an extension point of two UI extensions, renders the blocks of both inside the sentence, which depends on the chosen extension point, like the sibling uiextension.
E5 emptyN/A
E6 inplaceN/A

Parameters

ParameterC1 clarityC2 mandatoryC3 defaultsC4 input-assistanceC5 groupsC6 orderC7 alternativesC8 advancedC9 technicalC13 constraintsNotes
extensionPointKOOKOKKOOKOKN/AOKOKN/A

C1: the dialog shows the label "ExtensionPoint", the ID written in camel case, because the English translation of the name is the ID itself, while French and German have "point d'extension" and "Erweiterungspunkt". The description, "The ID of the Extension Point to retrieve the {@link UIExtension}s for.", shows the raw Javadoc tag {@link UIExtension} in the dialog, and does not say what an extension point is or where its identifiers come from. Technical terms are OK for a developer macro, the raw tag and the label are not.

C2: mandatory with no default, which is right: without an extension point, there is nothing to render.

C3: no default makes sense, the extension point names the place whose extensions are rendered.

C4: a plain text field, so the developer has to know the exact identifier, case included, and a typo renders nothing, see E2. A picker of the extension points that have extensions on the wiki could be used, like the one asked for id of uiextension.

C5: a single field in the dialog.

C6: the only field of the dialog.

C8: the field is essential and mandatory, so it is not advanced.

C9: the field is shown and used by every call.

C13: N/A, an extension point identifier is any text, checked when the macro renders; the missing picker is counted under C4, as for id of uiextension.

Other notes

Other notes: the macro renders all the UI extensions of an extension point, one after the other, where the sibling uiextension renders one by its identifier. Both share the Development category, the description pattern and the documentation page style. The documented example and the English description of extensionPoint have text problems, see L3 and C1.

KOs and tickets

Every KO needs a ticket covering it, see Report the KOs. One ticket can cover several KOs. Known issues filed for this macro are suggested in italics: link them as existing tickets when they cover the KO.

KOCriterionExisting ticketsNew tickets
D2D2 summaryXWIKI-25477
L2L2 doc-parametersXINFRA-525
L3L3 doc-exampleXINFRA-526
E2E2 errorsXCOMMONS-3847 (partial), XRENDERING-823 (partial), XWIKI-25578 (partial)
C1:extensionPointC1 clarity, extensionPointXWIKI-25477
C4:extensionPointC4 input-assistance, extensionPointXWIKI-23045 (partial)XWIKI-25501
Success

Every KO is covered by a ticket.

Tickets

TicketOriginKOs coveredKOs partly covered
XCOMMONS-3847NewE2
XRENDERING-823NewE2
XWIKI-25477NewC1:extensionPoint D2
XWIKI-23045ExistingC4:extensionPoint
XWIKI-25501NewC4:extensionPoint
XINFRA-525NewL2
XINFRA-526NewL3
XWIKI-25578NewE2

Known issues of this macro

No known issue is specific to this macro.
68 more known issues affect every macro: see the Known issues.

Get Connected