|
|
|
|
|
Diagrama de secuencia
|
Sequence diagram
|
|
|
Los diagramas de secuencia en PlantUML se definen íntegramente como texto. Usted describe los participantes y los mensajes que intercambian; la disposición, el espaciado y las flechas se generan automáticamente.
- Texto entra, diagrama sale. El código fuente es la única fuente de verdad: lo que usted lee es lo que se renderiza.
- Fácil de editar. Ajuste una línea de texto en lugar de arrastrar cuadros.
- Iteración rápida. Las herramientas de vista previa renderizan mientras escribe, así detecta los errores cuanto antes.
Consulte los comandos comunes para conocer las funcionalidades disponibles en todos los tipos de diagramas.
|
Sequence diagrams in PlantUML are defined entirely in text. You write the participants and the messages they exchange; the layout, spacing, and arrows are handled for you.
- Text in, diagram out. The source is the single point of truth, what you read is what gets rendered.
- Easy to edit. Adjust a line of text instead of dragging boxes around.
- Quick to iterate. Live preview tools render as you type, so you catch mistakes early.
See common commands for features available across all diagram types.
|
Ejemplos básicos
|
Basic Examples
|
|
|
En los diagramas de secuencia PlantUML, la secuencia -> denota un mensaje enviado entre dos participantes, que son reconocidos automáticamente y no necesitan ser declarados de antemano.
Utilice flechas punteadas empleando la secuencia -->, ofreciendo una visualización distinta en sus diagramas.
Para mejorar la legibilidad sin afectar a la representación visual, utilice flechas inversas como <- o <--. Sin embargo, tenga en cuenta que esto es específicamente para diagramas de secuencia y las reglas difieren para otros tipos de diagramas.
@startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
Alice -> Bob: Another authentication Request
Alice <-- Bob: Another authentication Response
@enduml
|
In PlantUML sequence diagrams, the -> sequence denotes a message sent between two participants, which are automatically recognized and do not need to be declared beforehand.
Utilize dotted arrows by employing the --> sequence, offering a distinct visualization in your diagrams.
To improve readability without affecting the visual representation, use reverse arrows like <- or <--. However, be aware that this is specifically for sequence diagrams and the rules differ for other diagram types.
@startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
Alice -> Bob: Another authentication Request
Alice <-- Bob: Another authentication Response
@enduml
|
Declarando participantes
|
Declaring participant
|
|
|
Es posible cambiar el orden de los participantes usando la palabra reservada participant.
También es posible el uso de otras palabras reservadas para declarar un participante:
actor
boundary
control
entity
database
collections
@startuml
actor Foo1
boundary Foo2
control Foo3
entity Foo4
database Foo5
collections Foo6
Foo1 -> Foo2 : To boundary
Foo1 -> Foo3 : To control
Foo1 -> Foo4 : To entity
Foo1 -> Foo5 : To database
Foo1 -> Foo6 : To collections
@enduml
Se puede renombrar un participante usando la palabra reservada as.
También es posible cambiar el color de fondo de los actores o participantes.
@startuml
actor Bob #red
' The only difference between actor
'and participant is the drawing
participant Alice
participant "I have a really\nlong name" as L #99FF99
/' You can also declare:
participant L as "I have a really\nlong name" #99FF99
'/
Alice->Bob: Authentication Request
Bob->Alice: Authentication Response
Bob->L: Log transaction
@enduml
You can use the orderkeyword to custom the print order of participant.
@startuml
participant Last order 30
participant Middle order 20
participant First order 10
@enduml
WARNING This translation need to be updated. WARNING
|
If the keyword participant is used to declare a participant, more control on that participant is possible.
The order of declaration will be the (default) order of display.
Using these other keywords to declare participants will change the shape of the participant representation:
actor
boundary
control
entity
database
collections
queue
Syntax:
<participant_type> <label> as <alias>
@startuml
participant Participant as Foo
actor Actor as Foo1
boundary Boundary as Foo2
control Control as Foo3
entity Entity as Foo4
database Database as Foo5
collections Collections as Foo6
queue Queue as Foo7
Foo -> Foo1 : To actor
Foo -> Foo2 : To boundary
Foo -> Foo3 : To control
Foo -> Foo4 : To entity
Foo -> Foo5 : To database
Foo -> Foo6 : To collections
Foo -> Foo7: To queue
@enduml
Rename a participant using the as keyword.
You can also change the background color of
actor or participant.
@startuml
actor Bob #red
' The only difference between actor
'and participant is the drawing
participant Alice
participant "I have a really\nlong name" as L #99FF99
/' You can also declare:
participant L as "I have a really\nlong name" #99FF99
'/
Alice->Bob: Authentication Request
Bob->Alice: Authentication Response
Bob->L: Log transaction
@enduml
You can use the order keyword to customize the display order of participants.
@startuml
participant Last order 30
participant Middle order 20
participant First order 10
@enduml
|
Declarando participantes en múltiples líneas
|
Declaring participant on multiline
|
|
|
Puedes declarar el participante en múltiples líneas.
@startuml
participant Participant [
=Title
----
""SubTitle""
]
participant Bob
Participant -> Bob
@enduml
[Ref. QA-15232]
|
You can declare participant on multi-line.
@startuml
participant Participant [
=Title
----
""SubTitle""
]
participant Bob
Participant -> Bob
@enduml
[Ref. QA-15232]
|
Utilice caracteres que no sean letras en los participantes
|
Use non-letters in participants
|
|
|
Puede utilizar comillas para definir los participantes.
Y puede utilizar la palabra clave as para dar un alias a esos participantes.
@startuml
Alice -> "Bob()" : Hello
"Bob()" -> "This is very\nlong" as Long
' You can also declare:
' "Bob()" -> Long as "This is very\nlong"
Long --> "Bob()" : ok
@enduml
|
You can use quotes to define participants.
And you can use the as keyword to give an alias to those participants.
@startuml
Alice -> "Bob()" : Hello
"Bob()" -> "This is very\nlong" as Long
' You can also declare:
' "Bob()" -> Long as "This is very\nlong"
Long --> "Bob()" : ok
@enduml
|
Mensaje a sí mismo
|
Message to Self
|
|
|
Un participante puede enviarse un mensaje a sí mismo.
También es posible tener varias líneas utilizando \n.
@startuml
Alice -> Alice: This is a signal to self.\nIt also demonstrates\nmultiline \ntext
@enduml
@startuml
Alice <- Alice: This is a signal to self.\nIt also demonstrates\nmultiline \ntext
@enduml
[Ref. QA-1361]
|
A participant can send a message to itself.
It is also possible to have multi-line using \n.
@startuml
Alice -> Alice: This is a signal to self.\nIt also demonstrates\nmultiline \ntext
@enduml
@startuml
Alice <- Alice: This is a signal to self.\nIt also demonstrates\nmultiline \ntext
@enduml
[Ref. QA-1361]
|
Alineación del texto
|
Text alignment
|
|
|
La alineación del texto en las flechas puede establecerse en left, right o center utilizando skinparam sequenceMessageAlign.
También puede utilizar direction o reverseDirection para alinear el texto dependiendo de la dirección de la flecha. Encontrará más detalles y ejemplos en la página skinparam.
@startuml
skinparam sequenceMessageAlign right
Bob -> Alice : Request
Alice -> Bob : Response
@enduml
Texto del mensaje de respuesta debajo de la flecha
Puede poner el texto del mensaje de respuesta debajo de la flecha, con el comando skinparam responseMessageBelowArrow true.
@startuml
skinparam responseMessageBelowArrow true
Bob -> Alice : hello
Bob <- Alice : ok
@enduml
|
Text alignment on arrows can be set to left, right or center using skinparam sequenceMessageAlign.
You can also use direction or reverseDirection to align text depending on arrow direction. Further details and examples of this are available on the skinparam page.
@startuml
skinparam sequenceMessageAlign right
Bob -> Alice : Request
Alice -> Bob : Response
@enduml
Text of response message below the arrow
You can put the text of the response message below the arrow, with the skinparam responseMessageBelowArrow true command.
@startuml
skinparam responseMessageBelowArrow true
Bob -> Alice : hello
Bob <- Alice : ok
@enduml
|
|
|
Change Actor style
|
|
|
|
|
You can change the actor style from stick man (by default) to:
- an awesome man with the
skinparam actorStyle awesome command;
- a hollow man with the
skinparam actorStyle hollow command.
Stick man (by default)
@startuml
actor Alice
actor Bob
Alice -> Bob : hello
hide footbox
@enduml
Awesome man
@startuml
skinparam actorStyle awesome
actor Alice
actor Bob
Alice -> Bob : hello
hide footbox
@enduml
[Ref. QA-10493]
Hollow man
@startuml
skinparam actorStyle Hollow
actor Alice
actor Bob
Alice -> Bob : hello
hide footbox
@enduml
[Ref. PR#396]
|
Cambiar estilo de la flecha
|
Change arrow style
|
|
|
Puede cambiar el estilo de la flecha de diferentes formas:
- añade una
x al final para indicar un mensaje perdido
- utilice
\ o / en lugar de < o > para tener solo la parte inferior o superior de la flecha
- repite la cabeza de la flecha (por ejemplo,
>> o //) para tener un trazo más fino
- Utilice
-- en lugar de - para obtener una flecha punteada.
- añade una "o" al final de la cabeza de una flecha
- utilice flechas bidireccionales
<->
@startuml
Bob ->x Alice
Bob -> Alice
Bob ->> Alice
Bob -\ Alice
Bob \\- Alice
Bob //-- Alice
Bob ->o Alice
Bob o\\-- Alice
Bob <-> Alice
Bob <->o Alice
@enduml
|
You can change arrow style by several ways:
- add a final
x to denote a lost message
- use
\ or / instead of < or > to have only the bottom or top part of the arrow
- repeat the arrow head (for example,
>> or //) head to have a thin drawing
- use
-- instead of - to have a dotted arrow
- add a final "o" at arrow head
- use bidirectional arrow
<->
@startuml
Bob ->x Alice
Bob -> Alice
Bob ->> Alice
Bob -\ Alice
Bob \\- Alice
Bob //-- Alice
Bob ->o Alice
Bob o\\-- Alice
Bob <-> Alice
Bob <->o Alice
@enduml
|
Cambiar el color de la flecha
|
Change arrow color
|
|
|
Puede cambiar el color de flechas individuales usando la siguiente notación:
@startuml
Bob -[#red]> Alice : hello
Alice -[#0000FF]->Bob : ok
@enduml
|
You can change the color of individual arrows using the following notation:
@startuml
Bob -[#red]> Alice : hello
Alice -[#0000FF]->Bob : ok
@enduml
|
Numeración de la secuencia de mensajes
|
Message sequence numbering
|
|
|
La palabra clave autonumber es usada para añadir automáticamente números a los mensajes.
@startuml
autonumber
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response
@enduml
Puedes especificar un número de comienzo con autonumber //número inicial// , y también un incremento con autonumber //número inicial// //incremento//.
@startuml
autonumber
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response
autonumber 15
Bob -> Alice : Another authentication Request
Bob <- Alice : Another authentication Response
autonumber 40 10
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response
@enduml
Puedes especificar un formato para su número usándolo entre comillas dobles.
El formateo se hace mediante la calse Java DecimalFormat ( 0 denota un dígito, # denota un digito y cero si está ausente).
Puedes usar alguna etiqueta HTML en el formato.
@startuml
autonumber "<b>[000]"
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response
autonumber 15 "<b>(<u>##</u>)"
Bob -> Alice : Another authentication Request
Bob <- Alice : Another authentication Response
autonumber 40 10 "<font color=red><b>Message 0 "
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response
@enduml
También puedes usar autonumber stop y
autonumber resume //increment// //format// para pausar y continuar la numeración automática, respectivamente.
@startuml
autonumber 10 10 "<b>[000]"
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response
autonumber stop
Bob -> Alice : dummy
autonumber resume "<font color=red><b>Message 0 "
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response
autonumber stop
Bob -> Alice : dummy
autonumber resume 1 "<font color=blue><b>Message 0 "
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response
@enduml
*[Ref. [QA-7119](https://forum.plantuml.net/7119/create-links-after-creating-a-diagram?show=7137#a7137)]*
WARNING This translation need to be updated. WARNING
|
The keyword autonumber is used to
automatically add an incrementing number to messages.
@startuml
autonumber
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response
@enduml
You can specify a startnumber with autonumber <start> , and
also an increment with autonumber <start> <increment>.
@startuml
autonumber
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response
autonumber 15
Bob -> Alice : Another authentication Request
Bob <- Alice : Another authentication Response
autonumber 40 10
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response
@enduml
You can specify a format for your number by using between double-quote.
The formatting is done with the Java class DecimalFormat
( 0 means digit, # means digit and zero if absent).
You can use some html tag in the format.
@startuml
autonumber "<b>[000]"
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response
autonumber 15 "<b>(<u>##</u>)"
Bob -> Alice : Another authentication Request
Bob <- Alice : Another authentication Response
autonumber 40 10 "<font color=red><b>Message 0 "
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response
@enduml
You can also use autonumber stop and
autonumber resume <increment> <format> to respectively pause and resume
automatic numbering.
@startuml
autonumber 10 10 "<b>[000]"
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response
autonumber stop
Bob -> Alice : dummy
autonumber resume "<font color=red><b>Message 0 "
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response
autonumber stop
Bob -> Alice : dummy
autonumber resume 1 "<font color=blue><b>Message 0 "
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response
@enduml
Your startnumber can also be a 2 or 3 digit sequence using a field delimiter such as ., ;, ,, : or a mix of these. For example: 1.1.1 or 1.1:1.
Automatically the last digit will increment.
To increment the first digit, use: autonumber inc A. To increment the second digit, use: autonumber inc B.
@startuml
autonumber 1.1.1
Alice -> Bob: Authentication request
Bob --> Alice: Response
autonumber inc A
'Now we have 2.1.1
Alice -> Bob: Another authentication request
Bob --> Alice: Response
autonumber inc B
'Now we have 2.2.1
Alice -> Bob: Another authentication request
Bob --> Alice: Response
autonumber inc A
'Now we have 3.1.1
Alice -> Bob: Another authentication request
autonumber inc B
'Now we have 3.2.1
Bob --> Alice: Response
@enduml
You can also use the value of autonumber with the %autonumber% variable:
@startuml
autonumber 10
Alice -> Bob
note right
the <U+0025>autonumber<U+0025> works everywhere.
Here, its value is ** %autonumber% **
end note
Bob --> Alice: //This is the response %autonumber%//
@enduml
[Ref. QA-7119]
|
Título de página, encabezado y pie de página
|
Page Title, Header and Footer
|
|
|
La palabra clave title se utiliza para añadir un título a la página.
Las páginas pueden mostrar encabezados y pies de página utilizando header y footer.
@startuml
header Page Header
footer Page %page% of %lastpage%
title Example Title
Alice -> Bob : message 1
Alice -> Bob : message 2
@enduml
|
The title keyword is used to add a title to the page.
Pages can display headers and footers using header and footer.
@startuml
header Page Header
footer Page %page% of %lastpage%
title Example Title
Alice -> Bob : message 1
Alice -> Bob : message 2
@enduml
|
Dividiendo diagramas
|
Splitting diagrams
|
|
|
La palabra reservada newpage es empleada para dividir un diagrama en varias imágenes.
Puedes colocar un título para la página nueva justo después de la palabra reservada newpage .
Esto es bastante práctico con Word para devolver diagramas grandes en varias páginas.
@startuml
Alice -> Bob : message 1
Alice -> Bob : message 2
newpage
Alice -> Bob : message 3
Alice -> Bob : message 4
newpage A title for the\nlast page
Alice -> Bob : message 5
Alice -> Bob : message 6
@enduml
WARNING This translation need to be updated. WARNING
|
With newpage
The newpage keyword is used to split a diagram into several images.
You can put a title for the new page just after the newpage
keyword. This title overrides the previously specified title if any.
This is very handy with Word to print long diagram on
several pages.
(Note: this really does work. Only the first page is shown below, but it is a display artifact.)
@startuml
Alice -> Bob : message 1
Alice -> Bob : message 2
newpage
Alice -> Bob : message 3
Alice -> Bob : message 4
newpage A title for the\nlast page
Alice -> Bob : message 5
Alice -> Bob : message 6
@enduml
%page% and %lastpage% variables
@startuml
footer This is %page% of %lastpage%
Alice --> Bob : A1
newpage
Alice --> Bob : A2
newpage
Alice --> Bob : A3
newpage
Alice --> Bob : A4
@enduml
[Ref. QA-6699]
Ignore newpage
You can use the ignore newpage command to show all the pages, as if there was no newpage.
@startuml
ignore newpage
Alice -> Bob : message 1
Alice -> Bob : message 2
newpage
Alice -> Bob : message 3
Alice -> Bob : message 4
newpage A title for the\nlast page
Alice -> Bob : message 5
Alice -> Bob : message 6
@enduml
|
Agrupando mensajes
|
Grouping message
|
|
|
Es posible agrupar mensajes usando las siguientes palabras reservadas:
alt/else
opt
loop
par
break
critical
group, seguida de un texto para mostrar
Es posible añadir un texto que será mostrado en el encabezado (excepto para group).
La palabra reservada end es usada para cerrar el grupo.
Tenga en cuenta que es posible anidar grupos.
@startuml
Alice -> Bob: Authentication Request
alt successful case
Bob -> Alice: Authentication Accepted
else some kind of failure
Bob -> Alice: Authentication Failure
group My own label
Alice -> Log : Log attack start
loop 1000 times
Alice -> Bob: DNS Attack
end
Alice -> Log : Log attack end
end
else Another type of failure
Bob -> Alice: Please repeat
end
@enduml
WARNING This translation need to be updated. WARNING
|
It is possible to group messages together using the following
keywords:
alt/else
opt
loop
par
break
critical
group, followed by a text to be displayed
It is possible to add a text that will be displayed into the
header (for group, see next paragraph 'Secondary group label').
The end keyword is used to close the group.
Note that it is possible to nest groups.
@startuml
Alice -> Bob: Authentication Request
alt successful case
Bob -> Alice: Authentication Accepted
else some kind of failure
Bob -> Alice: Authentication Failure
group My own label
Alice -> Log : Log attack start
loop 1000 times
Alice -> Bob: DNS Attack
end
Alice -> Log : Log attack end
end
else Another type of failure
Bob -> Alice: Please repeat
end
@enduml
|
Etiqueta secundaria de grupo
|
Secondary group label
|
|
|
Para group, es posible añadir, entre [ y ], un texto o etiqueta secundaria que se mostrará en la cabecera.
@startuml
Alice -> Bob: Authentication Request
Bob -> Alice: Authentication Failure
group My own label [My own label 2]
Alice -> Log : Log attack start
loop 1000 times
Alice -> Bob: DNS Attack
end
Alice -> Log : Log attack end
end
@enduml
[Ref. QA-2503]
|
For group, it is possible to add, between [ and ], a secondary text or label that will be displayed into the header.
@startuml
Alice -> Bob: Authentication Request
Bob -> Alice: Authentication Failure
group My own label [My own label 2]
Alice -> Log : Log attack start
loop 1000 times
Alice -> Bob: DNS Attack
end
Alice -> Log : Log attack end
end
@enduml
[Ref. QA-2503]
|
|
|
Partition across the entire width
|
|
|
|
|
You can use partition command to group messages horizontally across the entire width (full-width).
Messages are not grouped horizontally across the entire width (by default)
@startuml
participant a
partition p1
b -> c: msg
c --> b: OK
note right: Some right note
end
partition p2
a -> b: msg
note left: Some left note
end
@enduml
Grouping messages horizontally across the entire width (with teoz mode)
@startuml
!pragma teoz true
participant a
partition p1
b -> c: msg
c --> b: OK
note right: Some right note
end
partition p2
a -> b: msg
note left: Some left note
end
@enduml
[Ref. GH-589]
|
Notas en mensajes
|
Notes on messages
|
|
|
Es posible colocar notas en mensajes usando las palabras reservadas note left
o note right inmediatamente después del mensaje.
Puedes tener una nota multi-líneas usando la palabra reservada end note .
@startuml
Alice->Bob : hello
note left: this is a first note
Bob->Alice : ok
note right: this is another note
Bob->Bob : I am thinking
note left
a note
can also be defined
on several lines
end note
@enduml
|
It is possible to put notes on message using the note left
or note right keywords just after the message.
You can have a multi-line note using the end note
keywords.
@startuml
Alice->Bob : hello
note left: this is a first note
Bob->Alice : ok
note right: this is another note
Bob->Bob : I am thinking
note left
a note
can also be defined
on several lines
end note
@enduml
|
Algunas otras notas
|
Some other notes
|
|
|
También es posible colocar notas relativas al participante con las palabras reservadas <code>note
left of</code> , note right of o note over .
Es posible resaltar una nota cambiando su color de fondo.
También puedes tener una nota multi-líneas usando la palabra reservada end note .
@startuml
participant Alice
participant Bob
note left of Alice #aqua
This is displayed
left of Alice.
end note
note right of Alice: This is displayed right of Alice.
note over Alice: This is displayed over Alice.
note over Alice, Bob #FFAAAA: This is displayed\n over Bob and Alice.
note over Bob, Alice
This is yet another
example of
a long note.
end note
@enduml
WARNING This translation need to be updated. WARNING
|
It is also possible to place notes relative to participant with note left of , note right of or note over keywords.
It is possible to highlight a note by changing its background color.
You can also have a multi-line note using the end note keywords.
@startuml
participant Alice
participant Bob
note left of Alice #aqua
This is displayed
left of Alice.
end note
note right of Alice: This is displayed right of Alice.
note over Alice: This is displayed over Alice.
note over Alice, Bob #FFAAAA: This is displayed\n over Bob and Alice.
note over Bob, Alice
This is yet another
example of
a long note.
end note
@enduml
|
Cambiando el aspecto de las notas
|
Changing notes shape [hnote, rnote]
|
|
|
Puedes usar las palabras reservadas hnote y rnote para cambiar el aspecto de las notas.
@startuml
caller -> server : conReq
hnote over caller : idle
caller <- server : conConf
rnote over server
"r" as rectangle
"h" as hexagon
endrnote
@enduml
*[Ref. [QA-1765](https://forum.plantuml.net/1765/is-it-possible-to-have-different-shapes-for-notes?show=1806#c1806)]*
WARNING This translation need to be updated. WARNING
|
You can use hnote and rnote keywords
to change note shapes :
hnote for hexagonal note;
rnote for rectangle note.
@startuml
caller -> server : conReq
hnote over caller : idle
caller <- server : conConf
rnote over server
"r" as rectangle
"h" as hexagon
endrnote
rnote over server
this is
on several
lines
endrnote
hnote over caller
this is
on several
lines
endhnote
@enduml
[Ref. QA-1765]
|
Nota sobre todos los participantes [a través de]
|
Note over all participants [across]
|
|
|
Puedes hacer directamente una nota sobre todos los participantes, con la sintaxis:
note across: note_description
@startuml
Alice->Bob:m1
Bob->Charlie:m2
note over Alice, Charlie: Old method for note over all part. with:\n ""note over //FirstPart, LastPart//"".
note across: New method with:\n""note across""
Bob->Alice
hnote across:Note across all part.
@enduml
[Ref. QA-9738]
|
You can directly make a note over all participants, with the syntax:
note across: note_description
@startuml
Alice->Bob:m1
Bob->Charlie:m2
note over Alice, Charlie: Old method for note over all part. with:\n ""note over //FirstPart, LastPart//"".
note across: New method with:\n""note across""
Bob->Alice
hnote across:Note across all part.
@enduml
[Ref. QA-9738]
|
Varias notas alineadas al mismo nivel [/]
|
Several notes aligned at the same level [/]
|
|
|
Puedes hacer que varias notas estén alineadas al mismo nivel, con la sintaxis /:
- sin
/ (por defecto, las notas no están alineadas)
@startuml
note over Alice : initial state of Alice
note over Bob : initial state of Bob
Bob -> Alice : hello
@enduml
- con
/ (las notas están alineadas)
@startuml
note over Alice : initial state of Alice
/ note over Bob : initial state of Bob
Bob -> Alice : hello
@enduml
[Ref. QA-354]
|
You can make several notes aligned at the same level, with the syntax /:
- without
/ (by default, the notes are not aligned)
@startuml
note over Alice : initial state of Alice
note over Bob : initial state of Bob
Bob -> Alice : hello
@enduml
- with
/ (the notes are aligned)
@startuml
note over Alice : initial state of Alice
/ note over Bob : initial state of Bob
Bob -> Alice : hello
@enduml
[Ref. QA-354]
|
Creole y HTML
|
Creole and HTML
|
|
|
También es posible usar sintexis de WikiCreole:
@startuml
participant Alice
participant "The **Famous** Bob" as Bob
Alice -> Bob : hello --there--
... Some ~~long delay~~ ...
Bob -> Alice : ok
note left
This is **bold**
This is //italics//
This is ""monospaced""
This is --stroked--
This is __underlined__
This is ~~waved~~
end note
Alice -> Bob : A //well formatted// message
note right of Alice
This is <back:cadetblue><size:18>displayed</size></back>
__left of__ Alice.
end note
note left of Bob
<u:red>This</u> is <color #118888>displayed</color>
**<color purple>left of</color> <s:red>Alice</strike> Bob**.
end note
note over Alice, Bob
<w:#FF33FF>This is hosted</w> by <img sourceforge.jpg>
end note
@enduml
WARNING This translation need to be updated. WARNING
|
It is also possible to use creole formatting:
@startuml
participant Alice
participant "The **Famous** Bob" as Bob
Alice -> Bob : hello --there--
... Some ~~long delay~~ ...
Bob -> Alice : ok
note left
This is **bold**
This is //italics//
This is ""monospaced""
This is --stroked--
This is __underlined__
This is ~~waved~~
end note
Alice -> Bob : A //well formatted// message
note right of Alice
This is <back:cadetblue><size:18>displayed</size></back>
__left of__ Alice.
end note
note left of Bob
<u:red>This</u> is <color #118888>displayed</color>
**<color purple>left of</color> <s:red>Alice</strike> Bob**.
end note
note over Alice, Bob
<w:#FF33FF>This is hosted</w> by <img:https://plantuml.com/sourceforge.jpg>
end note
@enduml
|
Divisor
|
Divider or separator
|
|
|
Si quieres, puedes dividir un diagrama usando el separador == para separar su diagrama en pasos lógicos.
@startuml
== Initialization ==
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
== Repetition ==
Alice -> Bob: Another authentication Request
Alice <-- Bob: another authentication Response
@enduml
WARNING This translation need to be updated. WARNING
|
If you want, you can split a diagram using == separator to
divide your diagram into logical steps.
@startuml
== Initialization ==
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
== Repetition ==
Alice -> Bob: Another authentication Request
Alice <-- Bob: another authentication Response
@enduml
|
Referencia
|
Reference
|
|
|
Puedes referenciar en un diagrama utilizando la palabra clave ref over.
@startuml
participant Alice
actor Bob
ref over Alice, Bob : init
Alice -> Bob : hello
ref over Bob
This can be on
several lines
end ref
@enduml
|
You can use reference in a diagram, using the keyword ref over.
@startuml
participant Alice
actor Bob
ref over Alice, Bob : init
Alice -> Bob : hello
ref over Bob
This can be on
several lines
end ref
@enduml
|
Retardo
|
Delay
|
|
|
Puedes usar ... para indicar un retardo en el diagrama.
Y también es posible colocar un mensaje con ese retardo.
@startuml
Alice -> Bob: Authentication Request
...
Bob --> Alice: Authentication Response
...5 minutes latter...
Bob --> Alice: Bye !
@enduml
|
You can use ... to indicate a delay in the diagram.
And it is also possible to put a message with this delay.
@startuml
Alice -> Bob: Authentication Request
...
Bob --> Alice: Authentication Response
...5 minutes later...
Bob --> Alice: Good Bye !
@enduml
|
Ajuste del texto
|
Text wrapping
|
|
|
Para interrumpir mensajes largos, puede añadir manualmente \n en el texto.
Otra opción es utilizar el ajuste maxMessageSize:
@startuml
skinparam maxMessageSize 50
participant a
participant b
a -> b :this\nis\nmanually\ndone
a -> b :this is a very long message on several words
@enduml
|
To break long messages, you can manually add \n in your text.
Another option is to use maxMessageSize setting:
@startuml
skinparam maxMessageSize 50
participant a
participant b
a -> b :this\nis\nmanually\ndone
a -> b :this is a very long message on several words
@enduml
|
|
|
Message text spans beyond the involved participants
|
|
|
|
|
You can use sequenceMessageSpan command to allow message text to span beyond the involved participants.
Without sequenceMessageSpan (by default)
@startuml
ParticipantNumber1 -> ParticipantNumber2 : this is a very long message that is very long
ParticipantNumber1 -> ParticipantNumber1 : this is a very long message that is very long
ParticipantNumber2 -> ParticipantNumber3 : foo2
@enduml
With sequenceMessageSpan (on teoz mode)
@startuml
!pragma teoz true
!pragma sequenceMessageSpan true
ParticipantNumber1 -> ParticipantNumber2 : this is a very long message that is very long
ParticipantNumber1 -> ParticipantNumber1 : this is a very long message that is very long
ParticipantNumber2 -> ParticipantNumber3 : foo2
@enduml
[Ref. GH-2386]
|
Espaciado
|
Space
|
|
|
Puedes usar ||| para indicar espaciado en el diagrama.
También es posible especificar un número de píxel para ser usado.
@startuml
Alice -> Bob: message 1
Bob --> Alice: ok
|||
Alice -> Bob: message 2
Bob --> Alice: ok
||45||
Alice -> Bob: message 3
Bob --> Alice: ok
@enduml
|
You can use ||| to indicate some spacing in the diagram.
It is also possible to specify a number of pixel to be used.
@startuml
Alice -> Bob: message 1
Bob --> Alice: ok
|||
Alice -> Bob: message 2
Bob --> Alice: ok
||45||
Alice -> Bob: message 3
Bob --> Alice: ok
@enduml
|
Activación y Destrucción de la Línea de vida
|
Lifeline Activation and Destruction
|
|
|
activate y deactivate son usados para denotar la activación de un participante.
Una vez que un participante es activado, su línea de vida aparece.
activate y deactivate aplica en el mensaje anterior.
destroy denota el final de la línea de vida de un participante.
@startuml
participant User
User -> A: DoWork
activate A
A -> B: << createRequest >>
activate B
B -> C: DoWork
activate C
C --> B: WorkDone
destroy C
B --> A: RequestCreated
deactivate B
A -> User: Done
deactivate A
@enduml
Puede usarse anidamiento de líneas de vida, y es posible agregar un color a dicha línea de vida.
@startuml
participant User
User -> A: DoWork
activate A #FFBBBB
A -> A: Internal call
activate A #DarkSalmon
A -> B: << createRequest >>
activate B
B --> A: RequestCreated
deactivate B
deactivate A
A -> User: Done
deactivate A
@enduml
WARNING This translation need to be updated. WARNING
|
The activate and deactivate are used to denote
participant activation.
Once a participant is activated, its lifeline appears.
The activate and deactivate apply on
the previous message.
The destroy denote the end of the lifeline of a
participant.
@startuml
participant User
User -> A: DoWork
activate A
A -> B: << createRequest >>
activate B
B -> C: DoWork
activate C
C --> B: WorkDone
destroy C
B --> A: RequestCreated
deactivate B
A -> User: Done
deactivate A
@enduml
Nested lifeline can be used, and it is possible to add a color on the lifeline.
@startuml
participant User
User -> A: DoWork
activate A #FFBBBB
A -> A: Internal call
activate A #DarkSalmon
A -> B: << createRequest >>
activate B
B --> A: RequestCreated
deactivate B
deactivate A
A -> User: Done
deactivate A
@enduml
Autoactivation is possible and works with the return keywords:
@startuml
autoactivate on
alice -> bob : hello
bob -> bob : self call
bill -> bob #005500 : hello from thread 2
bob -> george ** : create
return done in thread 2
return rc
bob -> george !! : delete
return success
@enduml
|
Retorno
|
Return
|
|
|
El comando return genera un mensaje de retorno con una etiqueta de texto opcional.
El punto de retorno es el que causó la activación más reciente de la línea de vida.
La sintaxis es return label donde label si se proporciona es cualquier cadena aceptable para mensajes convencionales.
@startuml
Bob -> Alice : hello
activate Alice
Alice -> Alice : some action
return bye
@enduml
|
Command return generates a return message with optional text label.
The return point is that which caused the most recent life-line activation.
The syntax is return label where label if provided is any string acceptable for conventional messages.
@startuml
Bob -> Alice : hello
activate Alice
Alice -> Alice : some action
return bye
@enduml
|
Creación de participante
|
Participant creation
|
|
|
Puedes usar la palabra reservada create justo antes de la primera recepción de un mensaje para recalcar el hecho de que ese mensaje se encuentra creando ese nuevo objeto.
@startuml
Bob -> Alice : hello
create Other
Alice -> Other : new
create control String
Alice -> String
note right : You can also put notes!
Alice --> Bob : ok
@enduml
|
You can use the create keyword just before the first
reception of a message to emphasize the fact that this message is
actually creating this new object.
@startuml
Bob -> Alice : hello
create Other
Alice -> Other : new
create control String
Alice -> String
note right : You can also put notes!
Alice --> Bob : ok
@enduml
|
Sintaxis abreviada para la activación, desactivación y creación
|
Shortcut syntax for activation, deactivation, creation
|
|
|
Inmediatamente después de especificar el participante de destino, se puede utilizar la siguiente sintaxis:
++ Activar el objetivo * (opcionalmente puede ir seguido de un color )
-- Desactivar el origen
** Crear una * instancia del objetivo
!! Destruir una instancia del objetivo
@startuml
alice -> bob ++ : hello
bob -> bob ++ : self call
bob -> bib ++ #005500 : hello
bob -> george ** : create
return done
return rc
bob -> george !! : delete
return success
@enduml
Entonces puedes mezclar activación y desactivación, en la misma línea:
@startuml
alice -> bob ++ : hello1
bob -> charlie --++ : hello2
charlie --> alice -- : ok
@enduml
@startuml
@startuml
alice -> bob --++ #gold: hello
bob -> alice --++ #gold: you too
alice -> bob --: step1
alice -> bob : step2
@enduml
@enduml
[Ref. QA-4834, QA-9573 y QA-13234]
|
Immediately after specifying the target participant, the following syntax can be used:
++ Activate the target (optionally a color may follow this)
-- Deactivate the source
** Create an instance of the target
!! Destroy an instance of the target
@startuml
alice -> bob ++ : hello
bob -> bob ++ : self call
bob -> bib ++ #005500 : hello
bob -> george ** : create
return done
return rc
bob -> george !! : delete
return success
@enduml
Then you can mix activation and deactivation, on same line:
@startuml
alice -> bob ++ : hello1
bob -> charlie --++ : hello2
charlie --> alice -- : ok
@enduml
@startuml
alice -> bob --++ #gold: hello
bob -> alice --++ #gold: you too
alice -> bob --: step1
alice -> bob : step2
@enduml
[Ref. QA-4834, QA-9573 and QA-13234]
|
Mensajes entrantes y salientes
|
Incoming and outgoing messages
|
|
|
Puedes usar flechas entrantes y salientes si quieres centrarte en una parte del diagrama.
Utilice corchetes para denotar el lado izquierdo " [" o el lado derecho " ]" del diagrama.
@startuml
[-> A: DoWork
activate A
A -> A: Internal call
activate A
A ->] : << createRequest >>
A<--] : RequestCreated
deactivate A
[<- A: Done
deactivate A
@enduml
También puedes tener la siguiente sintaxis:
@startuml
[-> Bob
[o-> Bob
[o->o Bob
[x-> Bob
[<- Bob
[x<- Bob
Bob ->]
Bob ->o]
Bob o->o]
Bob ->x]
Bob <-]
Bob x<-]
@enduml
WARNING This translation need to be updated. WARNING
|
You can use incoming or outgoing arrows if you want to focus on a part
of the diagram.
Use square brackets to denote the left " [" or the
right " ]" side of the diagram.
@startuml
[-> A: DoWork
activate A
A -> A: Internal call
activate A
A ->] : << createRequest >>
A<--] : RequestCreated
deactivate A
[<- A: Done
deactivate A
@enduml
You can also have the following syntax:
@startuml
participant Alice
participant Bob #lightblue
Alice -> Bob
Bob -> Carol
...
[-> Bob
[o-> Bob
[o->o Bob
[x-> Bob
...
[<- Bob
[x<- Bob
...
Bob ->]
Bob ->o]
Bob o->o]
Bob ->x]
...
Bob <-]
Bob x<-]
@enduml
|
Flechas cortas para mensajes entrantes y salientes
|
Short arrows for incoming and outgoing messages
|
|
|
Puedes tener flechas cortas con el uso de ?.
@startuml
?-> Alice : ""?->""\n**short** to actor1
[-> Alice : ""[->""\n**from start** to actor1
[-> Bob : ""[->""\n**from start** to actor2
?-> Bob : ""?->""\n**short** to actor2
Alice ->] : ""->]""\nfrom actor1 **to end**
Alice ->? : ""->?""\n**short** from actor1
Alice -> Bob : ""->"" \nfrom actor1 to actor2
@enduml
[Ref. QA-310]
|
You can have short arrows with using ?.
@startuml
?-> Alice : ""?->""\n**short** to actor1
[-> Alice : ""[->""\n**from start** to actor1
[-> Bob : ""[->""\n**from start** to actor2
?-> Bob : ""?->""\n**short** to actor2
Alice ->] : ""->]""\nfrom actor1 **to end**
Alice ->? : ""->?""\n**short** from actor1
Alice -> Bob : ""->"" \nfrom actor1 to actor2
@enduml
[Ref. QA-310]
|
Anclas y duración
|
Anchors and Duration
|
|
|
Con teoz es posible añadir anclas al diagrama y utilizar las anclas para especificar el tiempo de duración.
@startuml
!pragma teoz true
{start} Alice -> Bob : start doing things during duration
Bob -> Max : something
Max -> Bob : something else
{end} Bob -> Alice : finish
{start} <-> {end} : some time
@enduml
Puede utilizar la opción de línea de comandos -P para especificar el pragma:
java -jar plantuml.jar -Pteoz=true
[Ref. issue-582]
|
With teoz it is possible to add anchors to the diagram and use the anchors to specify duration time.
@startuml
!pragma teoz true
{start} Alice -> Bob : start doing things during duration
Bob -> Max : something
Max -> Bob : something else
{end} Bob -> Alice : finish
{start} <-> {end} : some time
@enduml
You can use the -P command-line option to specify the pragma:
java -jar plantuml.jar -Pteoz=true
[Ref. issue-582]
|
Estereotipos y marcas
|
Stereotypes and Spots
|
|
|
Es posible añadir estereotipos a participantes usando <<
y >>.
En el estereotipo, puedes añadir un carácter marcado en un círculo coloreado usando la sintaxis (X,color).
@startuml
participant "Famous Bob" as Bob << Generated >>
participant Alice << (C,#ADD1B2) Testable >>
Bob->Alice: First message
@enduml
Por defecto, guillemet (comillas) son usadas para mostrar el estereotipo.
Puedes cambiar este comportamiento usando skinparam guillemet:
@startuml
skinparam guillemet false
participant "Famous Bob" as Bob << Generated >>
participant Alice << (C,#ADD1B2) Testable >>
Bob->Alice: First message
@enduml
@startuml
participant Bob << (C,#ADD1B2) >>
participant Alice << (C,#ADD1B2) >>
Bob->Alice: First message
@enduml
|
It is possible to add stereotypes to participants using <<
and >>.
In the stereotype, you can add a spotted character
in a colored circle using the syntax (X,color).
@startuml
participant "Famous Bob" as Bob << Generated >>
participant Alice << (C,#ADD1B2) Testable >>
Bob->Alice: First message
@enduml
By default, the guillemet character is used to display the stereotype.
You can change this behavious using the skinparam guillemet:
@startuml
skinparam guillemet false
participant "Famous Bob" as Bob << Generated >>
participant Alice << (C,#ADD1B2) Testable >>
Bob->Alice: First message
@enduml
@startuml
participant Bob << (C,#ADD1B2) >>
participant Alice << (C,#ADD1B2) >>
Bob->Alice: First message
@enduml
|
|
|
Position of the stereotypes
|
|
|
|
|
It is possible to define stereotypes position ( top or bottom) with the command skinparam stereotypePosition.
Top postion (by default)
@startuml
skinparam stereotypePosition top
participant A<<st1>>
participant B<<st2>>
A --> B : stereo test
@enduml
Bottom postion
@startuml
skinparam stereotypePosition bottom
participant A<<st1>>
participant B<<st2>>
A --> B : stereo test
@enduml
[Ref. QA-18650]
|
Mayor información en los títulos
|
More information on titles
|
|
|
Puedes usar sintaxis de Creole en el título.
@startuml
title __Simple__ **communication** example
Alice -> Bob: Authentication Request
Bob -> Alice: Authentication Response
@enduml
Puedes añadir una nueva línea usando \n en la descripción del título.
@startuml
title __Simple__ communication example\non several lines
Alice -> Bob: Authentication Request
Bob -> Alice: Authentication Response
@enduml
Además puedes definir un título en varias líneas usando las palabras reservadas title
y end title .
@startuml
title
<u>Simple</u> communication example
on <i>several</i> lines and using <font color=red>html</font>
This is hosted by <img:sourceforge.jpg>
end title
Alice -> Bob: Authentication Request
Bob -> Alice: Authentication Response
@enduml
|
You can use creole formatting in the title.
@startuml
title __Simple__ **communication** example
Alice -> Bob: Authentication Request
Bob -> Alice: Authentication Response
@enduml
You can add newline using \n in the title description.
@startuml
title __Simple__ communication example\non several lines
Alice -> Bob: Authentication Request
Bob -> Alice: Authentication Response
@enduml
You can also define title on several lines using title
and end title keywords.
@startuml
title
<u>Simple</u> communication example
on <i>several</i> lines and using <font color=red>html</font>
This is hosted by <img:sourceforge.jpg>
end title
Alice -> Bob: Authentication Request
Bob -> Alice: Authentication Response
@enduml
|
Entorno de participante
|
Participants encompass
|
|
|
Es posible dibujar una caja alrededor de algunos participantes, usando los comandos box y end box .
Puedes añadir un título opcional o un color de fondo opcional, después de la palabra reservada box .
@startuml
box "Internal Service" #LightBlue
participant Bob
participant Alice
end box
participant Other
Bob -> Alice : hello
Alice -> Other : hello
@enduml
WARNING This translation need to be updated. WARNING
|
It is possible to draw a box around some participants, using box
and end box commands.
You can add an optional title or a
optional background color, after the box keyword.
@startuml
box "Internal Service" #LightBlue
participant Bob
participant Alice
end box
participant Other
Bob -> Alice : hello
Alice -> Other : hello
@enduml
It is also possible to nest boxes - to draw a box within a box - when using the teoz rendering engine, for example:
@startuml
!pragma teoz true
box "Internal Service" #LightBlue
participant Bob
box "Subteam"
participant Alice
participant John
end box
end box
participant Other
Bob -> Alice : hello
Alice -> John : hello
John -> Other: Hello
@enduml
|
Removiendo pie de página
|
Removing Foot Boxes
|
|
|
Puedes usar las palabras reservadas hide footbox para remover el pie de página del diagrama.
@startuml
hide footbox
title Footer removed
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
@enduml
|
You can use the hide footbox keywords to remove the foot boxes
of the diagram.
@startuml
hide footbox
title Foot Box removed
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
@enduml
|
Personalización (Skinparam)
|
Skinparam
|
|
|
Puedes usar el comando skinparam para cambiar los colores y las fuentes de los dibujos
Puedes usar este comando:
También puedes cambiar otros parámetros de renderización, como se ve en los siguientes ejemplos
@startuml
skinparam sequenceArrowThickness 2
skinparam roundcorner 20
skinparam maxmessagesize 60
skinparam sequenceParticipant underline
actor User
participant "First Class" as A
participant "Second Class" as B
participant "Last Class" as C
User -> A: DoWork
activate A
A -> B: Create Request
activate B
B -> C: DoWork
activate C
C --> B: WorkDone
destroy C
B --> A: Request Created
deactivate B
A --> User: Done
deactivate A
@enduml
@startuml
skinparam backgroundColor #EEEBDC
skinparam handwritten true
skinparam sequence {
ArrowColor DeepSkyBlue
ActorBorderColor DeepSkyBlue
LifeLineBorderColor blue
LifeLineBackgroundColor #A9DCDF
ParticipantBorderColor DeepSkyBlue
ParticipantBackgroundColor DodgerBlue
ParticipantFontName Impact
ParticipantFontSize 17
ParticipantFontColor #A9DCDF
ActorBackgroundColor aqua
ActorFontColor DeepSkyBlue
ActorFontSize 17
ActorFontName Aapex
}
actor User
participant "First Class" as A
participant "Second Class" as B
participant "Last Class" as C
User -> A: DoWork
activate A
A -> B: Create Request
activate B
B -> C: DoWork
activate C
C --> B: WorkDone
destroy C
B --> A: Request Created
deactivate B
A --> User: Done
deactivate A
@enduml
WARNING This translation need to be updated. WARNING
|
You can use the skinparam
command to change colors and fonts for the drawing.
You can use this command:
You can also change other rendering parameter, as seen in the following examples:
@startuml
skinparam sequenceArrowThickness 2
skinparam roundcorner 20
skinparam maxmessagesize 60
skinparam sequenceParticipant underline
actor User
participant "First Class" as A
participant "Second Class" as B
participant "Last Class" as C
User -> A: DoWork
activate A
A -> B: Create Request
activate B
B -> C: DoWork
activate C
C --> B: WorkDone
destroy C
B --> A: Request Created
deactivate B
A --> User: Done
deactivate A
@enduml
@startuml
skinparam backgroundColor #EEEBDC
!option handwritten true
skinparam sequence {
ArrowColor DeepSkyBlue
ActorBorderColor DeepSkyBlue
LifeLineBorderColor blue
LifeLineBackgroundColor #A9DCDF
ParticipantBorderColor DeepSkyBlue
ParticipantBackgroundColor DodgerBlue
ParticipantFontName Impact
ParticipantFontSize 17
ParticipantFontColor #A9DCDF
ActorBackgroundColor aqua
ActorFontColor DeepSkyBlue
ActorFontSize 17
ActorFontName Aapex
}
actor User
participant "First Class" as A
participant "Second Class" as B
participant "Last Class" as C
User -> A: DoWork
activate A
A -> B: Create Request
activate B
B -> C: DoWork
activate C
C --> B: WorkDone
destroy C
B --> A: Request Created
deactivate B
A --> User: Done
deactivate A
@enduml
|
Cambiando el relleno
|
Changing padding
|
|
|
Es posible ajustar algunos parámetros de relleno
@startuml
skinparam ParticipantPadding 20
skinparam BoxPadding 10
box "Foo1"
participant Alice1
participant Alice2
end box
box "Foo2"
participant Bob1
participant Bob2
end box
Alice1 -> Bob1 : hello
Alice1 -> Out : out
@enduml
*[Ref. [QA-5493](https://forum.plantuml.net/5493/provide-skinparam-between-participants-sequence-diagrams)]*
|
It is possible to tune some padding settings.
@startuml
skinparam ParticipantPadding 20
skinparam BoxPadding 10
box "Foo1"
participant Alice1
participant Alice2
end box
box "Foo2"
participant Bob1
participant Bob2
end box
Alice1 -> Bob1 : hello
Alice1 -> Out : out
@enduml
[Ref. QA-5493]
|
|
|
Appendix: Examples of all arrow type
|
|
|
|
|
Normal arrow
@startuml
participant Alice as a
participant Bob as b
a -> b : ""-> ""
a ->> b : ""->> ""
a -\ b : ""-\ ""
a -\\ b : ""-\\\\""
a -/ b : ""-/ ""
a -// b : ""-// ""
a ->x b : ""->x ""
a x-> b : ""x-> ""
a o-> b : ""o-> ""
a ->o b : ""->o ""
a o->o b : ""o->o ""
a <-> b : ""<-> ""
a o<->o b : ""o<->o""
a x<->x b : ""x<->x""
a ->>o b : ""->>o ""
a -\o b : ""-\o ""
a -\\o b : ""-\\\\o""
a -/o b : ""-/o ""
a -//o b : ""-//o ""
a x->o b : ""x->o ""
@enduml
Itself arrow
@startuml
participant Alice as a
participant Bob as b
a -> a : ""-> ""
a ->> a : ""->> ""
a -\ a : ""-\ ""
a -\\ a : ""-\\\\""
a -/ a : ""-/ ""
a -// a : ""-// ""
a ->x a : ""->x ""
a x-> a : ""x-> ""
a o-> a : ""o-> ""
a ->o a : ""->o ""
a o->o a : ""o->o ""
a <-> a : ""<-> ""
a o<->o a : ""o<->o""
a x<->x a : ""x<->x""
a ->>o a : ""->>o ""
a -\o a : ""-\o ""
a -\\o a : ""-\\\\o""
a -/o a : ""-/o ""
a -//o a : ""-//o ""
a x->o a : ""x->o ""
@enduml
Incoming and outgoing messages (with '[', ']')
Incoming messages (with '[')
@startuml
participant Alice as a
participant Bob as b
[-> b : ""[-> ""
[->> b : ""[->> ""
[-\ b : ""[-\ ""
[-\\ b : ""[-\\\\""
[-/ b : ""[-/ ""
[-// b : ""[-// ""
[->x b : ""[->x ""
[x-> b : ""[x-> ""
[o-> b : ""[o-> ""
[->o b : ""[->o ""
[o->o b : ""[o->o ""
[<-> b : ""[<-> ""
[o<->o b : ""[o<->o""
[x<->x b : ""[x<->x""
[->>o b : ""[->>o ""
[-\o b : ""[-\o ""
[-\\o b : ""[-\\\\o""
[-/o b : ""[-/o ""
[-//o b : ""[-//o ""
[x->o b : ""[x->o ""
@enduml
Outgoing messages (with ']')
@startuml
participant Alice as a
participant Bob as b
a ->] : ""->] ""
a ->>] : ""->>] ""
a -\] : ""-\] ""
a -\\] : ""-\\\\]""
a -/] : ""-/] ""
a -//] : ""-//] ""
a ->x] : ""->x] ""
a x->] : ""x->] ""
a o->] : ""o->] ""
a ->o] : ""->o] ""
a o->o] : ""o->o] ""
a <->] : ""<->] ""
a o<->o] : ""o<->o]""
a x<->x] : ""x<->x]""
a ->>o] : ""->>o] ""
a -\o] : ""-\o] ""
a -\\o] : ""-\\\\o]""
a -/o] : ""-/o] ""
a -//o] : ""-//o] ""
a x->o] : ""x->o] ""
@enduml
Short incoming and outgoing messages (with '?')
Short incoming (with '?')
@startuml
participant Alice as a
participant Bob as b
a -> b : //Long long label//
?-> b : ""?-> ""
?->> b : ""?->> ""
?-\ b : ""?-\ ""
?-\\ b : ""?-\\\\""
?-/ b : ""?-/ ""
?-// b : ""?-// ""
?->x b : ""?->x ""
?x-> b : ""?x-> ""
?o-> b : ""?o-> ""
?->o b : ""?->o ""
?o->o b : ""?o->o ""
?<-> b : ""?<-> ""
?o<->o b : ""?o<->o""
?x<->x b : ""?x<->x""
?->>o b : ""?->>o ""
?-\o b : ""?-\o ""
?-\\o b : ""?-\\\\o ""
?-/o b : ""?-/o ""
?-//o b : ""?-//o ""
?x->o b : ""?x->o ""
@enduml
Short outgoing (with '?')
@startuml
participant Alice as a
participant Bob as b
a -> b : //Long long label//
a ->? : ""->? ""
a ->>? : ""->>? ""
a -\? : ""-\? ""
a -\\? : ""-\\\\?""
a -/? : ""-/? ""
a -//? : ""-//? ""
a ->x? : ""->x? ""
a x->? : ""x->? ""
a o->? : ""o->? ""
a ->o? : ""->o? ""
a o->o? : ""o->o? ""
a <->? : ""<->? ""
a o<->o? : ""o<->o?""
a x<->x? : ""x<->x?""
a ->>o? : ""->>o? ""
a -\o? : ""-\o? ""
a -\\o? : ""-\\\\o?""
a -/o? : ""-/o? ""
a -//o? : ""-//o? ""
a x->o? : ""x->o? ""
@enduml
|
|
|
Specific SkinParameter
|
|
|
|
|
By default
@startuml
Bob -> Alice : hello
...
Alice -> Bob : ok
@enduml
Style strictuml
To be conform to strict UML ( for arrow style: emits triangle rather than sharp arrowheads), you can use:
skinparam style strictuml
@startuml
skinparam style strictuml
Bob -> Alice : hello
...
Alice -> Bob : ok
@enduml
[Ref. QA-1047]
LifelineStrategy
Since v1.2025.5, old skinparam lifelineStrategy solid no longer works.
[Ref. QA-9016, QA-2794]
In order to have solid life line in sequence diagrams, you must now use style:
@startuml
<style>
lifeLine {
LineStyle 0
}
delay {
LineStyle 1-4
}
</style>
Bob -> Alice : hello
...
Alice -> Bob : ok
@enduml
[Ref. GH-2266 and GH-2662]
|
|
|
Hide unlinked participant
|
|
|
|
|
By default, all participants are displayed.
@startuml
participant Alice
participant Bob
participant Carol
Alice -> Bob : hello
@enduml
But you can hide unlinked participant.
@startuml
hide unlinked
participant Alice
participant Bob
participant Carol
Alice -> Bob : hello
@enduml
[Ref. QA-4247]
|
|
|
Color a group message
|
|
|
|
|
It is possible to color a group messages:
@startuml
Alice -> Bob: Authentication Request
alt#Gold #LightBlue Successful case
Bob -> Alice: Authentication Accepted
else #Pink Failure
Bob -> Alice: Authentication Rejected
end
@enduml
[Ref. QA-4750 and QA-6410]
|
|
|
Mainframe
|
|
|
|
|
@startuml
mainframe This is a **mainframe**
Alice->Bob : Hello
@enduml
[Ref. QA-4019 and Issue#148]
|
|
|
Slanted or odd arrows
|
|
|
|
|
You can use the (nn) option (before or after arrow) to make the arrows slanted, where nn is the number of shift pixels.
[Available only after v1.2022.6beta+]
@startuml
A ->(10) B: text 10
B ->(10) A: text 10
A ->(10) B: text 10
A (10)<- B: text 10
@enduml
@startuml
A ->(40) B++: Rq
B -->(20) A--: Rs
@enduml
[Ref. QA-14145]
@startuml
!pragma teoz true
A ->(50) C: Starts\nwhen 'B' sends
& B ->(25) C: \nBut B's message\n arrives before A's
@enduml
[Ref. QA-6684]
@startuml
!pragma teoz true
S1 ->(30) S2: msg 1\n
& S2 ->(30) S1: msg 2
note left S1: msg\nS2 to S1
& note right S2: msg\nS1 to S2
@enduml
[Ref. QA-1072]
|
|
|
Parallel messages (with teoz)
|
|
|
|
|
You can use the & teoz command to display parallel messages:
@startuml
!pragma teoz true
Alice -> Bob : hello
& Bob -> Charlie : hi
@enduml
(See also Teoz architecture)
|
|
|
Style for Solid Lifeline
|
|
|
|
|
By default
@startuml
Alice -> Bob : hello
...
Alice <- Bob : hello
@enduml
Solid Lifeline using style
@startuml
<style>
lifeLine {
LineStyle 0
}
delay {
LineStyle 1-4
}
</style>
Alice -> Bob : hello
...
Alice <- Bob : hello
@enduml
[Ref. GH-2266 and GH-2662]
|
|
|
|