PlantUML defines a standardized way to encode diagram text description to a simple string of characters that contains only digits, letters, underscore and minus character. The goal of such an encoding is to facilitate communication of diagrams through URL (see
server). This encoding includes compression to keep encoded strings as short as possible.
The encoded metadata is stored in the generated PNG, so the diagram source can be extracted from the diagram itself! (see
server#metadata).
Deflate algorithm is used by default.
You can also use simple HEX encoding, see below. An initial
~h
is added to indicate this encoding.
Principle For example, the following uml text description:
@startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
@enduml
is
encoded as:
Syp9J4vLqBLJSCfFib9mB2t9ICqhoKnEBCdCprC8IYqiJIqkuGBAAUW2rO0LOr5LN92VLvpA1G00
To achieve such encoding, the text diagram is:
- Encoded in UTF-8
- Compressed using Deflate algorithm
- Reencoded in ASCII using a transformation close to base64
Why not use Base64? The main reason is historic: this format was not created to be public at first. Now, it's too late to change it. However, the only difference is in character order.
Where in base64 the mapping array for values 0-63 is:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
For PlantUML, the mapping array for values 0-63 is:
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_
Compression comparison The following diagram:
is compressed to
428-char string length using Deflate You can use
-encodeurl
or
-decodeurl
in the
command line flags to encode or decode the text.
Implementations of the encoder in various languages:
If you find Deflate and Brotli too complex, you can try the HEX format. In that case, you just have to encode each character in hexadecimal format.
For example :
@startuml
Alice->Bob : I am using hex
@enduml
will be turned into:
407374617274756d6c0a416c6963652d3e426f62203a204920616d207573696e67206865780a40656e64756d6c
To indicate the use of HEX format, you must add
~h
at the start of the data sent to PlantUML server.
http://www.plantuml.com/plantuml/uml/~h4073... Since there is no compression here, the URL will become very long as the diagram grows.