plantuml

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

Audit

Macro ID
plantuml
Source
PlantUML Macro
Type
Generator
Classification reason
The content is the diagram source, a data source for the image the macro generates from it, through a PlantUML server.
Status
Reviewed
Criteria version
15.20
XWiki version
18.8.0
Audit date
2026-10-20
Auditor
Compared macros
chart jira

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/PlantUML%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-contrib/macro-plantuml/blob/macro-plantuml-2.4.1/macro-plantuml-macro/src/main/java/org/xwiki/contrib/plantuml/PlantUMLMacroParameters.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, D3chart, jira
Other sources specific to this macro
  • PlantUMLMacro.java, 2.4.1: the macro renders asynchronously, checks the server against the trusted domains at rendering, wraps a content with no @start tag using the type parameter, and has no translation resources for its name, description or parameters.
CriterionResultNotes
D1 wordingOK"PlantUML" is the name of the technology the macro draws with, the word users of diagrams-as-text search for, so it is recorded OK like html.
D2 summaryOKthe description, "Convert various text input formats into diagram images using PlantUML.", says what the macro produces, but "text input formats" is vague where it means the PlantUML text language and its sibling languages, and "images" leaves out the svg and txt outputs. It does not repeat the name alone, so it is recorded OK.
D3 categoryOKin Content only, like chart, chartjs and jira, the other generators that draw from data or text. The Diagram macros of the Diagram Application have no category.
D4 quick-actionOKQuick Actions finds the macro first for "plantuml" and "PlantUML", 2nd for "uml" (after sequence) and 6th of 6 for "diagram", the last. The synonyms "sequence diagram", "class diagram" and "puml" give no PlantUML entry. The French and German names are "PlantUML", as in English, a technology name that is not translated. A macro named after its technology is OK even when few synonyms find it, like html. Synonyms used: uml, diagram, sequence diagram, class diagram, puml.
L1 consistencyOKcompared with chart and jira, two generators of the Content category that draw output from text. Like jira, plantuml requires its content, the diagram source, so Quick Actions opens the Edit Macro dialog instead of inserting the macro right away, which is by design since an empty diagram means nothing.
L2 doc-parametersKOthe parameters are only documented on the legacy extensions.xwiki.org page, not in the new documentation, see the Documentation status page. That page does not list the content in its parameter table, and its defaults do not match the dialog: format is "png unless configured in xwiki.properties" where the select opens blank, see C3 of format, and type is "Defined in the content" where the select opens on plantuml.
L3 doc-exampleOKthe most common example is the Use Case Diagram, {{plantuml}} @startuml :Customer: -> (Withdraw) note right of (Withdraw) : This is an example. @enduml {{/plantuml}} , the first example of the documentation that is not a template with placeholder text. On a fresh XWiki it renders "Failed to execute the PlantUML macro. Cause: [The PlantUML Server URL [http://www.plantuml.com/plantuml] is not in the list of trusted domains.]", as do all 7 examples, since the default server is not trusted. The documentation does state the setup step: its Configuration section says "The PlantUML server domain needs to be added to the trusted domains list, for security reasons" under a 2.4.1+ label. It is recorded OK since a setup step the documentation states is OK, with this weakness: the step follows the sentence "It works out of the box with all the different kinds of diagrams, using the PlantUML server available on the internet", which is no longer true, it does not say where the list is, and it is far from the examples, which carry no warning.
I1 patternOKQuick Actions and the Insert Macro dialog both open the Edit Macro dialog, since the content is mandatory. This is the generic behavior of a macro with a mandatory parameter, OK like include and jira.
I2 zero-configOKsubmitting the Edit Macro dialog with the default values does nothing, with no message, since the content is required: the generic behavior of the dialog. {{plantuml/}} renders, in view mode, "Failed to execute the [plantuml] macro. Cause: [Cannot invoke "String.trim()" because "content" is null]", a Java message counted under E2.
I3 instantN/A
I4 cursorN/A
I5 focusOKthe content, the only mandatory parameter, comes first and has the focus. The server is not essential for the dialog since a default one is configured on the wiki, see C3 of server.
E1 wysiwygKOthe editor never shows the diagram. Right after the insertion it shows the generic placeholder "macro:plantuml", and after saving and reopening the page it shows the rendering error, here the trusted-domains one, never a placeholder that says what the macro draws. The macro renders asynchronously, see PlantUMLMacro.java. No diagram could be rendered on this instance, so the editor of a configured wiki was not seen. To reproduce: insert the macro from Quick Actions with the most common example, then save and edit the page again.
E2 errorsKOa missing content and an invalid server give a Java message. {{plantuml/}} gives "Cannot invoke "String.trim()" because "content" is null", {{plantuml server="abc"}}@startuml A -> B @enduml{{/plantuml}} gives "no protocol: abc", and server="" gives "no protocol: ", with the cause "Invalid PlantUML Server URL" only in the details. The values of format and type are rejected at parsing with a clear message that lists the allowed values, and wrong case is accepted, as declared. The trusted-domains message is clear but does not say where the list is.
E3 nestingOKin a list item, a table cell and a box the macro stays in place, with the same trusted-domains error as in the page body, and the editor shows the placeholder inside them. The content is diagram source typed in a dialog text area, so a list, a table or a box in it does not apply. No diagram could be rendered, so the real output was not seen in these cases.
E4 inline-supportOKthe macro declares inline support. In a sentence it renders the same error box, inside the sentence, with no other change. No diagram could be rendered, so the inline result of an image was not seen.
E5 emptyN/A
E6 inplaceN/A

Parameters

ParameterC1 clarityC2 mandatoryC3 defaultsC4 input-assistanceC5 groupsC6 orderC7 alternativesC8 advancedC9 technicalC13 constraintsNotes
$contentKOOKN/AOKN/AOKN/AN/AN/AN/A

C1: "The textual definition of the diagram" does not say what to type: the PlantUML language, which the macro wraps in @startuml and @enduml when the content does not start with that tag, or the other supported languages. A user who does not know PlantUML finds nothing in the dialog, nor a link to its language reference. To reproduce: open the Edit Macro dialog from Quick Actions.

C2: mandatory, which is right, an empty diagram means nothing.

C4: a plain text area in the Edit Macro dialog for the source of the diagram, like the script macros.

C6: the content comes first, before the optional parameters.

formatKOOKKOOKOKOKN/AOKOKOK

C1, minor: "the PlantUML diagram output format" does not say what each value is for, which the documentation does, svg scaling better and carrying links, and it does not say what the blank option stands for, see C3.

C3: the select opens blank, which hides the value it stands for: the documentation says png, unless plantuml.format is set in xwiki.properties. Png is the usual value, so the select could show it, or say that blank is the wiki setting.

C4: a select of svg, png and txt.

C6: first of the optional parameters, and not set by the most common example.

serverKOOKOKOKOKOKN/AKOOKKO

C1, minor: "the PlantUML Server URL" does not say that an empty value uses the server configured for the wiki, nor that its domain must be in the trusted domains list of the wiki. The documentation also says that an empty server="" forces the embedded mode when a server is set in the administration, which a blank field cannot express.

C3: the field opens empty, which stands for the server configured for the wiki, in xwiki.properties or the PlantUML Administration Application, like the icon set of displayIcon. On a fresh wiki that server is the one of plantuml.com, not trusted: see L3.

C4: a text field for a URL.

C8: a rarely used parameter, since the server is a setting of the wiki, not marked advanced. Moving it to an advanced tab would keep it out of the way of the user.

C13: a URL with no declared format: server="abc" is accepted by the dialog and fails at rendering with "no protocol: abc", see E2. A domain that is not trusted is only refused at rendering too.

titleOKOKOKOKOKOKN/AOKOKN/A

C1: "the diagram title" says what it sets. It does not say that a title line in the content wins over the parameter, which the documentation states.

C3: the field opens empty, for no title, a sensible default.

typeKOOKOKOKOKOKN/AKOOKOK

C1, minor: "the type of diagram" does not say that the parameter only matters when the content has no @start tag, which the documentation states, and the values, like dot, jcckit or ebnf, are names of PlantUML engines that mean nothing to most users.

C3: the select preselects plantuml, the most used type, so it is OK. The documentation says "Defined in the content" where the macro declares plantuml, see L2.

C4: a select of the 13 types.

C8, minor: the content of nearly every diagram starts with its @start tag, which sets the type, so the parameter is rarely needed, but it is documented and realistic for content without a tag, so it is not hidden.

Other notes

The name, description and parameter texts are not translated: in French and German only the name and label of the content and the group name are, and the parameter names are their IDs, see the notes of the parameters.

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
L2L2 doc-parametersXINFRA-525
E1E1 wysiwygXWIKI-23947
E2E2 errorsXCOMMONS-3847 (partial), XRENDERING-823 (partial), PLANTUML-37 (partial)
C1:$contentC1 clarity, $contentPLANTUML-35
C1:formatC1 clarity, formatPLANTUML-35
C3:formatC3 defaults, formatXWIKI-23759 (partial)PLANTUML-36 (partial)
C1:serverC1 clarity, serverPLANTUML-35
C8:serverC8 advanced, serverPLANTUML-36
C13:serverC13 constraints, serverPLANTUML-37
C1:typeC1 clarity, typePLANTUML-35
C8:typeC8 advanced, typePLANTUML-36
Success

Every KO is covered by a ticket.

Tickets

TicketOriginKOs coveredKOs partly covered
XWIKI-23759ExistingC3:format
XWIKI-23947ExistingE1
XCOMMONS-3847NewE2
XRENDERING-823NewE2
PLANTUML-35NewC1:$content C1:format C1:server C1:type
PLANTUML-36NewC8:server C8:typeC3:format
XINFRA-525NewL2
PLANTUML-37NewC13:serverE2

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