uiextensions
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.
| Other sources specific to this macro |
|---|
| Criterion | Result | Notes |
|---|---|---|
| D1 wording | OK | "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 summary | KO | "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 category | OK | Development, 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-action | OK | Quick 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 consistency | OK | compared 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-parameters | KO | the 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-example | KO | the 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 pattern | OK | compared 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-config | OK | submitting 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 instant | N/A | |
| I4 cursor | N/A | |
| I5 focus | OK | the mandatory ExtensionPoint field is alone in the dialog, visible without scrolling, and has the focus when the dialog opens. |
| E1 wysiwyg | OK | the 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 errors | KO | an 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 nesting | OK | the 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-support | OK | the 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 empty | N/A | |
| E6 inplace | N/A |
Parameters
| Parameter | C1 clarity | C2 mandatory | C3 defaults | C4 input-assistance | C5 groups | C6 order | C7 alternatives | C8 advanced | C9 technical | C13 constraints | Notes |
|---|---|---|---|---|---|---|---|---|---|---|---|
| extensionPoint | KO | OK | OK | KO | OK | OK | N/A | OK | OK | N/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.
| KO | Criterion | Existing tickets | New tickets |
|---|---|---|---|
| D2 | D2 summary | XWIKI-25477 | |
| L2 | L2 doc-parameters | XINFRA-525 | |
| L3 | L3 doc-example | XINFRA-526 | |
| E2 | E2 errors | XCOMMONS-3847 (partial), XRENDERING-823 (partial), XWIKI-25578 (partial) | |
| C1:extensionPoint | C1 clarity, extensionPoint | XWIKI-25477 | |
| C4:extensionPoint | C4 input-assistance, extensionPoint | XWIKI-23045 (partial) | XWIKI-25501 |
Tickets
| Ticket | Origin | KOs covered | KOs partly covered |
|---|---|---|---|
| XCOMMONS-3847 | New | E2 | |
| XRENDERING-823 | New | E2 | |
| XWIKI-25477 | New | C1:extensionPoint D2 | |
| XWIKI-23045 | Existing | C4:extensionPoint | |
| XWIKI-25501 | New | C4:extensionPoint | |
| XINFRA-525 | New | L2 | |
| XINFRA-526 | New | L3 | |
| XWIKI-25578 | New | E2 |
Known issues of this macro
No known issue is specific to this macro.
68 more known issues affect every macro: see the Known issues.
Lucas Charpentier