uiextension

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

Audit

Macro ID
uiextension
Source
XS
Type
Generator
Classification reason
The macro has no content and its output is the rendering of the UI extension whose identifier is given, 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%20Extension%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/UIExtensionMacro.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 Extension" 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 Live Data for its feature.
D2 summaryKO"Insert a UI extension." repeats the name and does not say what the macro adds to the page: the output of the UI extension registered under the given identifier, 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 Extension.
D3 categoryOKDevelopment, the category of the macro, where a developer who wants to render a UI extension looks for it. The compared macros include and translation are in Content, which fits their user use; this macro needs the identifier of a UI extension, which only developers know.
D4 quick-actionOKQuick Actions finds the macro first for "uiextension", "UI Extension", "extension", "ui extension" and the French name "Extension UI", each time with UI Extensions, the sibling macro, second. The synonyms "uix" and "insert extension" 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, id, is documented only on the legacy extensions.xwiki.org page, https://extensions.xwiki.org/xwiki/bin/view/Extension/Extension%20Module/UI%20Extension%20Macro/, not in the new documentation. That page describes it as "The identifier of the UI extensions to insert" and says nothing on what a UI extension is or where to find the identifiers.
L3 doc-exampleKOthe only example of the documentation, {{uiextension id="org.xwiki.platform:xwiki-platform-search-ui"/}} , renders the error "Failed to find an extension id id [org.xwiki.platform:xwiki-platform-search-ui]": it gives the Maven identifier of an extension of the Extension Manager, not the identifier of a UI extension. So no example shows the most common use, which in XWiki Standard passes the identifier of an extension found in a loop over an extension point, like {{uiextension id="$services.rendering.escape($uix.id, 'xwiki/2.1')"/}} . The audit uses the literal call of XWiki Standard that renders, {{uiextension id="org.xwiki.platform.security.requiredrights.ui.RequiredRightsInfoUIExtension"/}} , which shows the "Required rights" block of a page that enforces no right.
I1 patternOKcompared with children, the reference generator, and with include and translation. From Quick Actions, the "UI Extension" entry opens the Edit Macro dialog, since the identifier 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 identifier keeps the dialog open with no message, the generic behavior of the dialog. {{uiextension/}} typed in the source gives "Invalid macro parameters used for the [uiextension] macro. Cause: [Property [id] mandatory].", acceptable for a generator that needs its target. A UI extension that exists but renders nothing gives an empty result, with only the generic "macro:uiextension" text in the editor, like include for an empty page.
I3 instantN/A
I4 cursorN/A
I5 focusOKthe mandatory Identifier field is alone in the dialog, visible without scrolling, and has the focus when the dialog opens.
E1 wysiwygOKthe example shows the "Required rights" block in the editor as in view mode, under a small "Uiextension" label, also after reopening the page.
E2 errorsKOan empty identifier is accepted silently: {{uiextension id=""/}} renders nothing, with no message, since the dialog refuses it but a page can hold it. An unknown identifier, a wrong case, an extension point identifier or a value with a space gives "Failed to find an extension id id [org.xwiki.nosuch.Extension]", which repeats "id" and speaks of an extension id, as the Extension Manager does, instead of a UI extension identifier.
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 {{uiextension id="org.xwiki.audit.hello.uix"/}} after. , for a UI extension whose content is a single line, renders on the same line. A UI extension with several blocks, like the example, breaks the sentence, which depends on the chosen UI extension.
E5 emptyN/A
E6 inplaceN/A

Parameters

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

C1: "The unique identifier of the UI extension to insert." says what the value is, and the technical terms are OK for a developer macro. It does not say where the identifiers come from, which the documentation does not say either, see L2 and L3.

C2: mandatory with no default, which is right: without an identifier, there is nothing to insert.

C3: no default makes sense, the identifier names one UI extension.

C4: a plain text field, so the developer has to know the exact identifier, case included: a typo gives an error, see E2. A picker of the UI extensions of the wiki, with their extension point, could be used, like the key picker asked for translation.

C13: N/A, an identifier is any text, checked when the macro renders; the missing picker is counted under C4.

Other notes

Other notes: a UI extension is declared by a wiki object or a component and attached to an extension point. The macro renders one of them by its identifier, where the sibling macro uiextensions renders all the UI extensions of an extension point. Both share the same Development category, the description pattern and the documentation page style.

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-25501 (partial)
C4:idC4 input-assistance, idXWIKI-23045 (partial)XWIKI-25501
Success

Every KO is covered by a ticket.

Tickets

TicketOriginKOs coveredKOs partly covered
XCOMMONS-3847NewE2
XRENDERING-823NewE2
XWIKI-25477NewD2
XWIKI-23045ExistingC4:id
XWIKI-25501NewC4:idE2
XINFRA-525NewL2
XINFRA-526NewL3

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