Table of contents
- Simple signals
- Changing the order of participants
- Actors
- Signal to self
- Expressing loops and conditionals
- Notes in the diagram
- States
- Lifeline activation and destruction
- Including saved diagrams in other diagrams
- Referencing other sequences
- Parallel sequences
- Automatic numbering
- Changing the bottom of participants
Simple signals
Draw a signal from one participant to another like this. The participants are automatically created when they are used.To include a colon in a participant name, enclose it in quotes.
":Alice"->":Bob": Hello
# This is a comment. Alice->Bob: Filled arrow Alice->>Bob: Open arrow Bob-->Alice: Dotted line Bob-->>Alice: Dotted Line, open arrow Bob-->Alice: Double arrow Alice->(1)Bob: Slightly delayed Bob->(5)Alice: Highy delayed
Changing the order of participants
If you want to participants to be shown in a different order than they are used, declare them first using the participant keyword. You can also rename them this way to save typing.participant Bob participant Alice participant "I have a really\nlong name" as L Alice->Bob: Authentication Request Bob->Alice: Authentication Response Bob->L: Log transaction
Grouping signals together
You can group signals together using the alt/else, opt, loop, par, and seq keywords. All of them can take a text description that will be displayed in the group header. Use the end keyword to signal the end of a group. The groups may be nested to any depth.The else part is optional and can be repeated more than once for each condition.
Alice->Bob: Authentication Request alt successful case Bob->Alice: Authentication Accepted else some kind of failure Bob->Alice: Authentication Failure opt loop 1000 times Alice->Bob: DNS Attack end end else Another type of failure Bob->Alice: Please repeat end
Notes in the diagram
You can add notes to the diagram. Notes can be placed to the left or right of a participant, or placed over one or more participants.If a note contains more than one line, it will not be word-wrapped. Instead, it will be formatted exacty as written.
participant Alice participant Bob note left of Alice 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: This is displayed over Bob and Alice.
Extended text descriptions (premium)
Subscribers can explain sequences that follow simply by indenting your explanations with a space.
You can explain the sequences that follow simply by indenting your explanations with a space. Alice->Bob: Wow!
States
Premium feature
A rounded box can be useful to show state information. The syntax is identical to the note keyword, except that state is used.participant Client participant Server parallel { state over Server: LISTEN state over Client: CLOSED } Client->Server: SYN parallel { state over Client: SYN-SENT state over Server: SYN_RECEIVED } Server->Client: ACK
Lifeline activation and destruction
Use the + and - with signals to denote object activation. While activated, the participant's lifeline will be highlighted. + will activate the receiver, and - will deactivate the sender.
Use * with signals to create a participant.
A->*B: hello.
You can use the destroy keyword to destroy a participant. The participant's lifeline will end at the previous signal.
User->+A: DoWork A->*+B: <<createRequest>> B->*+C: DoWork C-->B: WorkDone destroy C B-->-A: RequestCreated A->User: Done
Alternate syntax
Ge more control over activations using the activate and deactive keywords. The commands apply to the previous signal.Alice->Bob: Do some work! activate Bob Bob->Bob: Work routine activate Bob deactivate Bob Bob->Alice: All done! deactivate Bob
Only arrows can cause activations
Activations and deactivations attach themselves to the previoius signal. Neigher a note nor a state can cause a deactivation. If you want to deactivate spontaneously, use a signal-to-self.A->+B: Activate please B->-B: I'm deactivating now\n by myself
One arrow can activate/deactivate many participants at a time.
Using the explict syntax gives more flexibility.
A->B:
activate A
activate B
B->C:
deactivate A
deactivate B
activate C
C->C:
deactivate C
Reference other sequences
Premium feature
You can summarize or refer to sequences by drawing a box over one or more participants.ref over Mobile, Base Station Refer to 3GPP 44.060 6.6.4.1 end refYou can optionally have a signal going into the box or one coming out.
Alice->ref over Bob, Mary: input refer to other diagram end ref -->Alice: output
Parallel sequences
Premium feature
You can make different things happen at the same time using the parallel keyword.parallel { Client->Proxy: Request Proxy->Server: Forwarded Request note right of Server: Web proxy in operation } Server->(3)Proxy: Reply parallel { Client->(3)Proxy: Proxy->(3)Client: Crossed messages }Use the serial keyword within a parallel block to describe two parallel sequences of operations.
parallel { serial { Alice->Bob: Hello Bob->Alice: Hello } serial { Eve->Carol: Hello Carol->Eve: Hello } }