PlantUML syntax examples

These are examples taken from the official documentation: https://plantuml.com/ Generated by Plantuml syntax Test.


uml/actor

@startuml

actor Alice #green

' a comment this is

participant Bob
box "Sweet deal"
  participant "Mr funky foo" as M #EAA
  participant "Mr. Sleepy" as S #AEA
end box

ref over Alice, Bob: init

== Auth Plot ==
Alice --> Bob: Authenticaion Request
Bob   --> Alice: Successful auth
Bob   --> M: Alice is on
M     --> Alice: Hello Alice, I am M
...time passes...
M --> S: Here is some dough!
Alice --> Alice: Say, is it breezy?
activate Alice
||22||
Alice --> M: Pleased to meet you,\nNow about Bob...
||22||
destroy Alice
Bob --> M: Woops, Alice was destroyed
deactivate Bob
== Revival ==
activate M
M ->]: << createSomeFoo >>
M <--]: DidMakeSomeFoo
M -->o Alice: Thou art revived!
deactivate M

@enduml

uml/Arrows_both

@startuml
Bob <->    Alice
Bob o<->   Alice
Bob x<->   Alice
Bob <-->   Alice
Bob o<-->  Alice
Bob x<-->  Alice
Bob <<->   Alice
Bob o<<->  Alice
Bob x<<->  Alice
Bob <<-->  Alice
Bob o<<--> Alice
Bob x<<--> Alice
Bob \->    Alice
Bob o\->   Alice
Bob x\->   Alice
Bob \-->   Alice
Bob o\-->  Alice
Bob x\-->  Alice
Bob \\->   Alice
Bob o\\->  Alice
Bob x\\->  Alice
Bob \\-->  Alice
Bob o\\--> Alice
Bob x\\--> Alice
Bob /->    Alice
Bob o/->   Alice
Bob x/->   Alice
Bob /-->   Alice
Bob o/-->  Alice
Bob x/-->  Alice
Bob //->   Alice
Bob o//->  Alice
Bob x//->  Alice
Bob //-->  Alice
Bob o//--> Alice
Bob x//--> Alice

Bob <->o    Alice
Bob o<->o   Alice
Bob x<->o   Alice
Bob <-->o   Alice
Bob o<-->o  Alice
Bob x<-->o  Alice
Bob <<->o   Alice
Bob o<<->o  Alice
Bob x<<->o  Alice
Bob <<-->o  Alice
Bob o<<-->o Alice
Bob x<<-->o Alice
Bob \->o    Alice
Bob o\->o   Alice
Bob x\->o   Alice
Bob \-->o   Alice
Bob o\-->o  Alice
Bob x\-->o  Alice
Bob \\->o   Alice
Bob o\\->o  Alice
Bob x\\->o  Alice
Bob \\-->o  Alice
Bob o\\-->o Alice
Bob x\\-->o Alice
Bob /->o    Alice
Bob o/->o   Alice
Bob x/->o   Alice
Bob /-->o   Alice
Bob o/-->o  Alice
Bob x/-->o  Alice
Bob //->o   Alice
Bob o//->o  Alice
Bob x//->o  Alice
Bob //-->o  Alice
Bob o//-->o Alice
Bob x//-->o Alice

Bob <->x    Alice
Bob o<->x   Alice
Bob x<->x   Alice
Bob <-->x   Alice
Bob o<-->x  Alice
Bob x<-->x  Alice
Bob <<->x   Alice
Bob o<<->x  Alice
Bob x<<->x  Alice
Bob <<-->x  Alice
Bob o<<-->x Alice
Bob x<<-->x Alice
Bob \->x    Alice
Bob o\->x   Alice
Bob x\->x   Alice
Bob \-->x   Alice
Bob o\-->x  Alice
Bob x\-->x  Alice
Bob \\->x   Alice
Bob o\\->x  Alice
Bob x\\->x  Alice
Bob \\-->x  Alice
Bob o\\-->x Alice
Bob x\\-->x Alice
Bob /->x    Alice
Bob o/->x   Alice
Bob x/->x   Alice
Bob /-->x   Alice
Bob o/-->x  Alice
Bob x/-->x  Alice
Bob //->x   Alice
Bob o//->x  Alice
Bob x//->x  Alice
Bob //-->x  Alice
Bob o//-->x Alice
Bob x//-->x Alice

Bob <->>    Alice
Bob o<->>   Alice
Bob x<->>   Alice
Bob <-->>   Alice
Bob o<-->>  Alice
Bob x<-->>  Alice
Bob <<->>   Alice
Bob o<<->>  Alice
Bob x<<->>  Alice
Bob <<-->>  Alice
Bob o<<-->> Alice
Bob x<<-->> Alice
Bob \->>    Alice
Bob o\->>   Alice
Bob x\->>   Alice
Bob \-->>   Alice
Bob o\-->>  Alice
Bob x\-->>  Alice
Bob \\->>   Alice
Bob o\\->>  Alice
Bob x\\->>  Alice
Bob \\-->>  Alice
Bob o\\-->> Alice
Bob x\\-->> Alice
Bob /->>    Alice
Bob o/->>   Alice
Bob x/->>   Alice
Bob /-->>   Alice
Bob o/-->>  Alice
Bob x/-->>  Alice
Bob //->>   Alice
Bob o//->>  Alice
Bob x//->>  Alice
Bob //-->>  Alice
Bob o//-->> Alice
Bob x//-->> Alice

Bob <->>o    Alice
Bob o<->>o   Alice
Bob x<->>o   Alice
Bob <-->>o   Alice
Bob o<-->>o  Alice
Bob x<-->>o  Alice
Bob <<->>o   Alice
Bob o<<->>o  Alice
Bob x<<->>o  Alice
Bob <<-->>o  Alice
Bob o<<-->>o Alice
Bob x<<-->>o Alice
Bob \->>o    Alice
Bob o\->>o   Alice
Bob x\->>o   Alice
Bob \-->>o   Alice
Bob o\-->>o  Alice
Bob x\-->>o  Alice
Bob \\->>o   Alice
Bob o\\->>o  Alice
Bob x\\->>o  Alice
Bob \\-->>o  Alice
Bob o\\-->>o Alice
Bob x\\-->>o Alice
Bob /->>o    Alice
Bob o/->>o   Alice
Bob x/->>o   Alice
Bob /-->>o   Alice
Bob o/-->>o  Alice
Bob x/-->>o  Alice
Bob //->>o   Alice
Bob o//->>o  Alice
Bob x//->>o  Alice
Bob //-->>o  Alice
Bob o//-->>o Alice
Bob x//-->>o Alice

Bob <->>x    Alice
Bob o<->>x   Alice
Bob x<->>x   Alice
Bob <-->>x   Alice
Bob o<-->>x  Alice
Bob x<-->>x  Alice
Bob <<->>x   Alice
Bob o<<->>x  Alice
Bob x<<->>x  Alice
Bob <<-->>x  Alice
Bob o<<-->>x Alice
Bob x<<-->>x Alice
Bob \->>x    Alice
Bob o\->>x   Alice
Bob x\->>x   Alice
Bob \-->>x   Alice
Bob o\-->>x  Alice
Bob x\-->>x  Alice
Bob \\->>x   Alice
Bob o\\->>x  Alice
Bob x\\->>x  Alice
Bob \\-->>x  Alice
Bob o\\-->>x Alice
Bob x\\-->>x Alice
Bob /->>x    Alice
Bob o/->>x   Alice
Bob x/->>x   Alice
Bob /-->>x   Alice
Bob o/-->>x  Alice
Bob x/-->>x  Alice
Bob //->>x   Alice
Bob o//->>x  Alice
Bob x//->>x  Alice
Bob //-->>x  Alice
Bob o//-->>x Alice
Bob x//-->>x Alice

Bob <-\    Alice
Bob o<-\   Alice
Bob x<-\   Alice
Bob <--\   Alice
Bob o<--\  Alice
Bob x<--\  Alice
Bob <<-\   Alice
Bob o<<-\  Alice
Bob x<<-\  Alice
Bob <<--\  Alice
Bob o<<--\ Alice
Bob x<<--\ Alice
Bob \-\    Alice
Bob o\-\   Alice
Bob x\-\   Alice
Bob \--\   Alice
Bob o\--\  Alice
Bob x\--\  Alice
Bob \\-\   Alice
Bob o\\-\  Alice
Bob x\\-\  Alice
Bob \\--\  Alice
Bob o\\--\ Alice
Bob x\\--\ Alice
Bob /-\    Alice
Bob o/-\   Alice
Bob x/-\   Alice
Bob /--\   Alice
Bob o/--\  Alice
Bob x/--\  Alice
Bob //-\   Alice
Bob o//-\  Alice
Bob x//-\  Alice
Bob //--\  Alice
Bob o//--\ Alice
Bob x//--\ Alice

Bob <-\o    Alice
Bob o<-\o   Alice
Bob x<-\o   Alice
Bob <--\o   Alice
Bob o<--\o  Alice
Bob x<--\o  Alice
Bob <<-\o   Alice
Bob o<<-\o  Alice
Bob x<<-\o  Alice
Bob <<--\o  Alice
Bob o<<--\o Alice
Bob x<<--\o Alice
Bob \-\o    Alice
Bob o\-\o   Alice
Bob x\-\o   Alice
Bob \--\o   Alice
Bob o\--\o  Alice
Bob x\--\o  Alice
Bob \\-\o   Alice
Bob o\\-\o  Alice
Bob x\\-\o  Alice
Bob \\--\o  Alice
Bob o\\--\o Alice
Bob x\\--\o Alice
Bob /-\o    Alice
Bob o/-\o   Alice
Bob x/-\o   Alice
Bob /--\o   Alice
Bob o/--\o  Alice
Bob x/--\o  Alice
Bob //-\o   Alice
Bob o//-\o  Alice
Bob x//-\o  Alice
Bob //--\o  Alice
Bob o//--\o Alice
Bob x//--\o Alice

Bob <-\x    Alice
Bob o<-\x   Alice
Bob x<-\x   Alice
Bob <--\x   Alice
Bob o<--\x  Alice
Bob x<--\x  Alice
Bob <<-\x   Alice
Bob o<<-\x  Alice
Bob x<<-\x  Alice
Bob <<--\x  Alice
Bob o<<--\x Alice
Bob x<<--\x Alice
Bob \-\x    Alice
Bob o\-\x   Alice
Bob x\-\x   Alice
Bob \--\x   Alice
Bob o\--\x  Alice
Bob x\--\x  Alice
Bob \\-\x   Alice
Bob o\\-\x  Alice
Bob x\\-\x  Alice
Bob \\--\x  Alice
Bob o\\--\x Alice
Bob x\\--\x Alice
Bob /-\x    Alice
Bob o/-\x   Alice
Bob x/-\x   Alice
Bob /--\x   Alice
Bob o/--\x  Alice
Bob x/--\x  Alice
Bob //-\x   Alice
Bob o//-\x  Alice
Bob x//-\x  Alice
Bob //--\x  Alice
Bob o//--\x Alice
Bob x//--\x Alice

Bob <-\\    Alice
Bob o<-\\   Alice
Bob x<-\\   Alice
Bob <--\\   Alice
Bob o<--\\  Alice
Bob x<--\\  Alice
Bob <<-\\   Alice
Bob o<<-\\  Alice
Bob x<<-\\  Alice
Bob <<--\\  Alice
Bob o<<--\\ Alice
Bob x<<--\\ Alice
Bob \-\\    Alice
Bob o\-\\   Alice
Bob x\-\\   Alice
Bob \--\\   Alice
Bob o\--\\  Alice
Bob x\--\\  Alice
Bob \\-\\   Alice
Bob o\\-\\  Alice
Bob x\\-\\  Alice
Bob \\--\\  Alice
Bob o\\--\\ Alice
Bob x\\--\\ Alice
Bob /-\\    Alice
Bob o/-\\   Alice
Bob x/-\\   Alice
Bob /--\\   Alice
Bob o/--\\  Alice
Bob x/--\\  Alice
Bob //-\\   Alice
Bob o//-\\  Alice
Bob x//-\\  Alice
Bob //--\\  Alice
Bob o//--\\ Alice
Bob x//--\\ Alice

Bob <-\\o    Alice
Bob o<-\\o   Alice
Bob x<-\\o   Alice
Bob <--\\o   Alice
Bob o<--\\o  Alice
Bob x<--\\o  Alice
Bob <<-\\o   Alice
Bob o<<-\\o  Alice
Bob x<<-\\o  Alice
Bob <<--\\o  Alice
Bob o<<--\\o Alice
Bob x<<--\\o Alice
Bob \-\\o    Alice
Bob o\-\\o   Alice
Bob x\-\\o   Alice
Bob \--\\o   Alice
Bob o\--\\o  Alice
Bob x\--\\o  Alice
Bob \\-\\o   Alice
Bob o\\-\\o  Alice
Bob x\\-\\o  Alice
Bob \\--\\o  Alice
Bob o\\--\\o Alice
Bob x\\--\\o Alice
Bob /-\\o    Alice
Bob o/-\\o   Alice
Bob x/-\\o   Alice
Bob /--\\o   Alice
Bob o/--\\o  Alice
Bob x/--\\o  Alice
Bob //-\\o   Alice
Bob o//-\\o  Alice
Bob x//-\\o  Alice
Bob //--\\o  Alice
Bob o//--\\o Alice
Bob x//--\\o Alice

Bob <-\\x    Alice
Bob o<-\\x   Alice
Bob x<-\\x   Alice
Bob <--\\x   Alice
Bob o<--\\x  Alice
Bob x<--\\x  Alice
Bob <<-\\x   Alice
Bob o<<-\\x  Alice
Bob x<<-\\x  Alice
Bob <<--\\x  Alice
Bob o<<--\\x Alice
Bob x<<--\\x Alice
Bob \-\\x    Alice
Bob o\-\\x   Alice
Bob x\-\\x   Alice
Bob \--\\x   Alice
Bob o\--\\x  Alice
Bob x\--\\x  Alice
Bob \\-\\x   Alice
Bob o\\-\\x  Alice
Bob x\\-\\x  Alice
Bob \\--\\x  Alice
Bob o\\--\\x Alice
Bob x\\--\\x Alice
Bob /-\\x    Alice
Bob o/-\\x   Alice
Bob x/-\\x   Alice
Bob /--\\x   Alice
Bob o/--\\x  Alice
Bob x/--\\x  Alice
Bob //-\\x   Alice
Bob o//-\\x  Alice
Bob x//-\\x  Alice
Bob //--\\x  Alice
Bob o//--\\x Alice
Bob x//--\\x Alice

Bob <-/    Alice
Bob o<-/   Alice
Bob x<-/   Alice
Bob <--/   Alice
Bob o<--/  Alice
Bob x<--/  Alice
Bob <<-/   Alice
Bob o<<-/  Alice
Bob x<<-/  Alice
Bob <<--/  Alice
Bob o<<--/ Alice
Bob x<<--/ Alice
Bob \-/    Alice
Bob o\-/   Alice
Bob x\-/   Alice
Bob \--/   Alice
Bob o\--/  Alice
Bob x\--/  Alice
Bob \\-/   Alice
Bob o\\-/  Alice
Bob x\\-/  Alice
Bob \\--/  Alice
Bob o\\--/ Alice
Bob x\\--/ Alice
Bob /-/    Alice
Bob o/-/   Alice
Bob x/-/   Alice
Bob /--/   Alice
Bob o/--/  Alice
Bob x/--/  Alice
Bob //-/   Alice
Bob o//-/  Alice
Bob x//-/  Alice
Bob //--/  Alice
Bob o//--/ Alice
Bob x//--/ Alice

Bob <-/o    Alice
Bob o<-/o   Alice
Bob x<-/o   Alice
Bob <--/o   Alice
Bob o<--/o  Alice
Bob x<--/o  Alice
Bob <<-/o   Alice
Bob o<<-/o  Alice
Bob x<<-/o  Alice
Bob <<--/o  Alice
Bob o<<--/o Alice
Bob x<<--/o Alice
Bob \-/o    Alice
Bob o\-/o   Alice
Bob x\-/o   Alice
Bob \--/o   Alice
Bob o\--/o  Alice
Bob x\--/o  Alice
Bob \\-/o   Alice
Bob o\\-/o  Alice
Bob x\\-/o  Alice
Bob \\--/o  Alice
Bob o\\--/o Alice
Bob x\\--/o Alice
Bob /-/o    Alice
Bob o/-/o   Alice
Bob x/-/o   Alice
Bob /--/o   Alice
Bob o/--/o  Alice
Bob x/--/o  Alice
Bob //-/o   Alice
Bob o//-/o  Alice
Bob x//-/o  Alice
Bob //--/o  Alice
Bob o//--/o Alice
Bob x//--/o Alice

Bob <-/x    Alice
Bob o<-/x   Alice
Bob x<-/x   Alice
Bob <--/x   Alice
Bob o<--/x  Alice
Bob x<--/x  Alice
Bob <<-/x   Alice
Bob o<<-/x  Alice
Bob x<<-/x  Alice
Bob <<--/x  Alice
Bob o<<--/x Alice
Bob x<<--/x Alice
Bob \-/x    Alice
Bob o\-/x   Alice
Bob x\-/x   Alice
Bob \--/x   Alice
Bob o\--/x  Alice
Bob x\--/x  Alice
Bob \\-/x   Alice
Bob o\\-/x  Alice
Bob x\\-/x  Alice
Bob \\--/x  Alice
Bob o\\--/x Alice
Bob x\\--/x Alice
Bob /-/x    Alice
Bob o/-/x   Alice
Bob x/-/x   Alice
Bob /--/x   Alice
Bob o/--/x  Alice
Bob x/--/x  Alice
Bob //-/x   Alice
Bob o//-/x  Alice
Bob x//-/x  Alice
Bob //--/x  Alice
Bob o//--/x Alice
Bob x//--/x Alice

Bob <-//    Alice
Bob o<-//   Alice
Bob x<-//   Alice
Bob <--//   Alice
Bob o<--//  Alice
Bob x<--//  Alice
Bob <<-//   Alice
Bob o<<-//  Alice
Bob x<<-//  Alice
Bob <<--//  Alice
Bob o<<--// Alice
Bob x<<--// Alice
Bob \-//    Alice
Bob o\-//   Alice
Bob x\-//   Alice
Bob \--//   Alice
Bob o\--//  Alice
Bob x\--//  Alice
Bob \\-//   Alice
Bob o\\-//  Alice
Bob x\\-//  Alice
Bob \\--//  Alice
Bob o\\--// Alice
Bob x\\--// Alice
Bob /-//    Alice
Bob o/-//   Alice
Bob x/-//   Alice
Bob /--//   Alice
Bob o/--//  Alice
Bob x/--//  Alice
Bob //-//   Alice
Bob o//-//  Alice
Bob x//-//  Alice
Bob //--//  Alice
Bob o//--// Alice
Bob x//--// Alice

Bob <-//o    Alice
Bob o<-//o   Alice
Bob x<-//o   Alice
Bob <--//o   Alice
Bob o<--//o  Alice
Bob x<--//o  Alice
Bob <<-//o   Alice
Bob o<<-//o  Alice
Bob x<<-//o  Alice
Bob <<--//o  Alice
Bob o<<--//o Alice
Bob x<<--//o Alice
Bob \-//o    Alice
Bob o\-//o   Alice
Bob x\-//o   Alice
Bob \--//o   Alice
Bob o\--//o  Alice
Bob x\--//o  Alice
Bob \\-//o   Alice
Bob o\\-//o  Alice
Bob x\\-//o  Alice
Bob \\--//o  Alice
Bob o\\--//o Alice
Bob x\\--//o Alice
Bob /-//o    Alice
Bob o/-//o   Alice
Bob x/-//o   Alice
Bob /--//o   Alice
Bob o/--//o  Alice
Bob x/--//o  Alice
Bob //-//o   Alice
Bob o//-//o  Alice
Bob x//-//o  Alice
Bob //--//o  Alice
Bob o//--//o Alice
Bob x//--//o Alice

Bob <-//x    Alice
Bob o<-//x   Alice
Bob x<-//x   Alice
Bob <--//x   Alice
Bob o<--//x  Alice
Bob x<--//x  Alice
Bob <<-//x   Alice
Bob o<<-//x  Alice
Bob x<<-//x  Alice
Bob <<--//x  Alice
Bob o<<--//x Alice
Bob x<<--//x Alice
Bob \-//x    Alice
Bob o\-//x   Alice
Bob x\-//x   Alice
Bob \--//x   Alice
Bob o\--//x  Alice
Bob x\--//x  Alice
Bob \\-//x   Alice
Bob o\\-//x  Alice
Bob x\\-//x  Alice
Bob \\--//x  Alice
Bob o\\--//x Alice
Bob x\\--//x Alice
Bob /-//x    Alice
Bob o/-//x   Alice
Bob x/-//x   Alice
Bob /--//x   Alice
Bob o/--//x  Alice
Bob x/--//x  Alice
Bob //-//x   Alice
Bob o//-//x  Alice
Bob x//-//x  Alice
Bob //--//x  Alice
Bob o//--//x Alice
Bob x//--//x Alice

@enduml

uml/Arrows_LR

@startuml
Bob -> Alice
Bob ->o Alice
Bob ->x Alice
Bob --> Alice
Bob -->o Alice
Bob -->x Alice
Bob ->> Alice
Bob ->>o Alice
Bob ->>x Alice
Bob -->> Alice
Bob -->>o Alice
Bob -->>x Alice
Bob -\ Alice
Bob -\o Alice
Bob -\x Alice
Bob --\ Alice
Bob --\o Alice
Bob --\x Alice
Bob -\\ Alice
Bob -\\o Alice
Bob -\\x Alice
Bob --\\ Alice
Bob --\\o Alice
Bob --\\x Alice
Bob -/ Alice
Bob -/o Alice
Bob -/x Alice
Bob --/ Alice
Bob --/o Alice
Bob --/x Alice
Bob -// Alice
Bob -//o Alice
Bob -//x Alice
Bob --// Alice
Bob --//o Alice
Bob --//x Alice
@enduml

uml/Arrows_RL

@startuml
Bob <- Alice
Bob o<- Alice
Bob x<- Alice
Bob <-- Alice
Bob o<-- Alice
Bob x<-- Alice
Bob <<- Alice
Bob o<<- Alice
Bob x<<- Alice
Bob <<-- Alice
Bob o<<-- Alice
Bob x<<-- Alice
Bob \- Alice
Bob o\- Alice
Bob x\- Alice
Bob \-- Alice
Bob o\-- Alice
Bob x\-- Alice
Bob \\- Alice
Bob o\\- Alice
Bob x\\- Alice
Bob \\-- Alice
Bob o\\-- Alice
Bob x\\-- Alice
Bob /- Alice
Bob o/- Alice
Bob x/- Alice
Bob /-- Alice
Bob o/-- Alice
Bob x/-- Alice
Bob //- Alice
Bob o//- Alice
Bob x//- Alice
Bob //-- Alice
Bob o//-- Alice
Bob x//-- Alice
@enduml

uml/class

@startuml

class Foo <<Bar>> {
  You can use
  several lines
  ..
  As you want
  and group
  ==
  things together.
  --
  You can have as many
  groups as you want.
  --
  +publicMethod()
  -privateMethod()
  #protectedMethod()
  End of class
}

class Bar { 
  note: This is a class
  .. Hello foo ..
  +public
  .. Private things prefixed with - ..
  -private
  #protected
  int foo
  String password
}

interface IBar {
  int a
  int b
  --
  +public()
  -private()
}

Foo --> Bar
IBar --> Foo
IBar --> Bar

@enduml

uml/mindmap-multilines

@startmindmap
* foo
**:multi
line;
**_:multiline
without box;
***[#red] inline color
***[#blue]_ inline color without box
@endmindmap


uml/object

@startuml

title Objects and Interfaces

interface Zzapper <<FooFoo>>  {
  +publicAbc()
  #protectedAbc()
}

object Zzap {
  int a
  int b
  --
  +publicAbc()
  #protectedAbc()
  -privateAbc()
  note: This is an object
  ==
  note: here is a loop
}

object User {
  name = "dummy"
  id = 123
  --
  +userJump(int length)
  +userEat(Food food)
}

object Food {
  int calories
  string name
}

object Store {
  name = "superCat"
  id = 347
}

Zzapper --> Zzap

User --|> Store
User --|> Zzap

Food --* User
Food --o Store

@enduml

uml/reference_01-01-1_Basic-examples

@startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
Alice -> Bob: Another authentication Request
Alice <-- Bob: another authentication Response
@enduml

uml/reference_01-02-1_Declaring-participant

@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

uml/reference_01-02-2_Declaring-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

uml/reference_01-02-3_Declaring-participant

@startuml
participant Last order 30
participant Middle order 20
participant First order 10
@enduml

uml/reference_01-03-1_Use-non-letters-in-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

uml/reference_01-04-1_Message-to-Self

@startuml
Alice->Alice: This is a signal to self.\nIt also demonstrates\nmultiline \ntext
@enduml

uml/reference_01-05-1_Text-alignment

@startuml
skinparam responseMessageBelowArrow true
Bob -> Alice : hello
Alice -> Bob : ok
@enduml

uml/reference_01-06-1_Change-arrow-style

@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

uml/reference_01-07-1_Change-arror-color

@startuml
Bob -[#red]> Alice : hello
Alice -[#0000FF]->Bob : ok
@enduml

uml/reference_01-08-1_Message-sequence-numbering

@startuml
autonumber
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response
@enduml

uml/reference_01-08-2_Message-sequence-numbering

@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

uml/reference_01-08-3_Message-sequence-numbering

@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

uml/reference_01-08-4_Message-sequence-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

uml/reference_01-09-1_Page-Title-Header-and-Footer

@startuml
header Page Header
footer Page %page% of %lastpage%
title Example Title
Alice -> Bob : message 1
Alice -> Bob : message 2
@enduml

uml/reference_01-10-1_Split-diagrams

@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

uml/reference_01-11-1_Grouping-message

@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

uml/reference_01-12-1_Secondary-group-label

@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

uml/reference_01-13-1_Notes-on-messages

@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

uml/reference_01-14-1_Some-other-notes

@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

uml/reference_01-15-1_Changing-notes-shape

@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

uml/reference_01-16-1_Note-over-all-participants

@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

uml/reference_01-17-1_Several-notes-aligned-at-the-same-level

@startuml
note over Alice : initial state of Alice
note over Bob : initial state of Bob
Bob -> Alice : hello
@enduml

uml/reference_01-17-2_Several-notes-aligned-at-the-same-level

@startuml
note over Alice : initial state of Alice
/ note over Bob : initial state of Bob
Bob -> Alice : hello
@enduml

uml/reference_01-18-1_Creole-and-HTML

@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

uml/reference_01-19-1_Divider-or-separator

@startuml
== Initialization ==
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
== Repetition ==
Alice -> Bob: Another authentication Request
Alice <-- Bob: another authentication Response
@enduml

uml/reference_01-20-1_Reference

@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

uml/reference_01-21-1_Delay

@startuml
Alice -> Bob: Authentication Request
...
Bob --> Alice: Authentication Response
...5 minutes latter...
Bob --> Alice: Bye !
@enduml

uml/reference_01-22-1_Text-wrapping

@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

uml/reference_01-23-1_Space

@startuml
Alice -> Bob: message 1
Bob --> Alice: ok
|||
Alice -> Bob: message 2
Bob --> Alice: ok
||45||
Alice -> Bob: message 3
Bob --> Alice: ok
@enduml


uml/reference_01-24-1_lifeline

@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

uml/reference_01-24-2_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
@endum

uml/reference_01-24-3_lifeline

@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

uml/reference_01-25-1_Return

@startuml
Bob -> Alice : hello
activate Alice
Alice -> Alice : some action
return bye
@enduml

uml/reference_01-26-1_Participant-creation

@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

uml/reference_01-27-1_Shortcut-syntax-for-activation-deactivation-creation

@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

uml/reference_01-28-1_Incoming-and-outgoing-messages

@startuml
[-> A: DoWork
activate A
A -> A: Internal call
activate A
A ->] : << createRequest >>
A<--] : RequestCreated
deactivate A
[<- A: Done
deactivate A
@enduml

uml/reference_01-28-2_Incoming-and-outgoing-messages

@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

uml/reference_01-29-1_Short-arrows-for-incoming-and-outgoing-messages

@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

uml/reference_01-30-1_Anchors-and-Durations

@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

uml/reference_01-31-1_Stereotypes-and-Spots

@startuml
participant "Famous Bob" as Bob << Generated >>
participant Alice << (C,#ADD1B2) Testable >>
Bob->Alice: First message
@enduml

uml/reference_01-31-2_Stereotypes-and-Spots

@startuml
skinparam guillemet false
participant "Famous Bob" as Bob << Generated >>
participant Alice << (C,#ADD1B2) Testable >>
Bob->Alice: First message
@enduml

uml/reference_01-31-3_Stereotypes-and-Spots

@startuml
participant Bob << (C,#ADD1B2) >>
participant Alice << (C,#ADD1B2) >>
Bob->Alice: First message
@enduml

uml/reference_01-32-1_More-information-on-titles

@startuml
title __Simple__ **communication** example
Alice -> Bob: Authentication Request
Bob -> Alice: Authentication Response
@enduml

uml/reference_01-32-2_More-information-on-titles

@startuml
title __Simple__ communication example\non several lines
Alice -> Bob: Authentication Request
Bob -> Alice: Authentication Response
@enduml

uml/reference_01-32-3_More-information-on-titles

@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

uml/reference_01-33-1_Participants-encompass

@startuml
box "Internal Service" #LightBlue
  participant Bob
  participant Alice
end box
participant Other
Bob -> Alice : hello
Alice -> Other : hello
@enduml

uml/reference_01-34-1_Removing-Foot-Boxes

@startuml
hide footbox
title Footer removed
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
@enduml

uml/reference_01-35-1_Skinparam

@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

uml/reference_01-35-2_Skinparam

@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

uml/reference_01-36-1_Changing_padding

@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

uml/reference_02-01-1_Usecase

@startuml
(First usecase)
(Another usecase) as (UC2)
usecase UC3
usecase (Last\nusecase) as UC4
@enduml

uml/reference_02-02-1_Actors

@startuml
:First Actor:
:Another\nactor: as Men2
actor Men3
actor :Last actor: as Men4
@enduml

uml/reference_02-03-1_Stick-man

@startuml
:User: --> (Use)
"Main Admin" as Admin
"Use the application" as (Use)
Admin --> (Admin the application)
@enduml

uml/reference_02-03-2_Awesome-man

@startuml
skinparam actorStyle awesome
:User: --> (Use)
"Main Admin" as Admin
"Use the application" as (Use)
Admin --> (Admin the application)
@enduml

uml/reference_02-03-3_Hollow-man

@startuml
skinparam actorStyle Hollow
:User: --> (Use)
"Main Admin" as Admin
"Use the application" as (Use)
Admin --> (Admin the application)
@enduml

uml/reference_02-04-1_Usecases-description

@startuml
usecase UC1 as "You can use
several lines to define your usecase.
You can also use separators.
--
Several separators are possible.
==
And you can add titles:
..Conclusion..
This allows large description."
@enduml

uml/reference_02-05-1_Use-package

@startuml
left to right direction
actor Guest as g
package Professional {
  actor Chef as c
  actor "Food Critic" as fc
}
package Restaurant {
  usecase "Eat Food" as UC1
  usecase "Pay for Food" as UC2
  usecase "Drink" as UC3
  usecase "Review" as UC4
}
fc --> UC4
g --> UC1
g --> UC2
g --> UC3
@enduml

uml/reference_02-05-2_Use-package

@startuml
left to right direction
actor "Food Critic" as fc
rectangle Restaurant {
  usecase "Eat Food" as UC1
  usecase "Pay for Food" as UC2
  usecase "Drink" as UC3
}
fc --> UC1
fc --> UC2
fc --> UC3
@enduml

uml/reference_02-06-1_Basic-example

@startuml
User -> (Start)
User --> (Use the application) : A small label
:Main Admin: ---> (Use the application) : This is\nyet another\nlabel
@enduml


uml/reference_02-07-1_Extension

@startuml
:Main Admin: as Admin
(Use the application) as (Use)
User <|-- Admin
(Start) <|-- (Use)
@enduml


uml/reference_02-08-1_Using-notes

@startuml
:Main Admin: as Admin
(Use the application) as (Use)
User -> (Start)
User --> (Use)
Admin ---> (Use)
note right of Admin : This is an example.
note right of (Use)
  A note can also
  be on several lines
end note
note "This note is connected\nto several objects." as N2
(Start) .. N2
N2 .. (Use)
@enduml

uml/reference_02-09-1_Stereotypes

@startuml
User << Human >>
:Main Database: as MySql << Application >>
(Start) << One Shot >>
(Use the application) as (Use) << Main >>
User -> (Start)
User --> (Use)
MySql --> (Use)
@enduml

uml/reference_02-10-1_Changing-arrows-direction

@startuml
:user: --> (Use case 1)
:user: -> (Use case 2)
@enduml

uml/reference_02-10-2_Changing-arrows-direction

@startuml
(Use case 1) <.. :user:
(Use case 2) <- :user:
@enduml

uml/reference_02-10-3_Changing-arrows-direction

@startuml
:user: -left-> (dummyLeft)
:user: -right-> (dummyRight)
:user: -up-> (dummyUp)
:user: -down-> (dummyDown)
@enduml

uml/reference_02-10-4_Changing-arrows-direction

@startuml
left to right direction
:user: -left-> (dummyLeft)
:user: -right-> (dummyRight)
:user: -up-> (dummyUp)
:user: -down-> (dummyDown)
@enduml

uml/reference_02-11-1_Splitting-diagrams

@startuml
:actor1: --> (Usecase1)
newpage
:actor2: --> (Usecase2)
@enduml

uml/reference_02-12-1_Left-to-right-direction

@startuml
'default
top to bottom direction
user1 --> (Usecase 1)
user2 --> (Usecase 2)
@enduml

uml/reference_02-12-2_Left-to-right-direction

@startuml
left to right direction
user1 --> (Usecase 1)
user2 --> (Usecase 2)
@enduml

uml/reference_02-13-1_Skinparam

@startuml
skinparam handwritten true
skinparam usecase {
  BackgroundColor DarkSeaGreen
  BorderColor DarkSlateGray
  BackgroundColor<< Main >> YellowGreen
  BorderColor<< Main >> YellowGreen
  ArrowColor Olive
  ActorBorderColor black
  ActorFontName Courier
  ActorBackgroundColor<< Human >> Gold
}
User << Human >>
:Main Database: as MySql << Application >>
(Start) << One Shot >>
(Use the application) as (Use) << Main >>
User -> (Start)
User --> (Use)
MySql --> (Use)
@enduml

uml/reference_02-14-1_Complete-example

@startuml
left to right direction
skinparam packageStyle rectangle
actor customer
actor clerk
rectangle checkout {
  customer -- (checkout)
  (checkout) .> (payment) : include
  (help) .> (checkout) : extends
  (checkout) -- clerk
}
@enduml


uml/reference_02-15-1_Business-Use-Case

@startuml
(First usecase)/
(Another usecase)/ as (UC2)
usecase/ UC3
usecase/ (Last\nusecase) as UC4
@enduml

uml/reference_02-15-2_Business-Actor

@startuml
:First Actor:/
:Another\nactor:/ as Man2
actor/ Woman3
actor/ :Last actor: as Person1
@enduml

uml/reference_02-16-1_Change-arrow-color-and-style

@startuml
actor foo
foo --> (bar) : normal
foo --> (bar1) #line:red;line.bold;text:red : red bold
foo --> (bar2) #green;line.dashed;text:green : green dashed
foo --> (bar3) #blue;line.dotted;text:blue : blue dotted
@enduml

uml/reference_02-17-1_Change-element-color-and-style

@startuml
actor a
actor b #pink;line:red;line.bold;text:red
usecase c #palegreen;line:green;line.dashed;text:green
usecase d #aliceblue;line:blue;line.dotted;text:blue
@enduml

uml/reference_03-01-1_Declaring-element

@startuml
abstract abstract
abstract class "abstract class"
annotation annotation
circle circle
() circle_short_form
class class
diamond diamond
<> diamond_short_form
entity entity
enum enum
interface interface
@enduml

uml/reference_03-02-1_Relations-between-classes

@startuml
Class01 <|-- Class02
Class03 *-- Class04
Class05 o-- Class06
Class07 .. Class08
Class09 -- Class10
@enduml

uml/reference_03-02-2_Relations-between-classes

@startuml
Class11 <|.. Class12
Class13 --> Class14
Class15 ..> Class16
Class17 ..|> Class18
Class19 <--* Class20
@enduml

uml/reference_03-02-3_Relations-between-classes

@startuml
Class21 #-- Class22
Class23 x-- Class24
Class25 }-- Class26
Class27 +-- Class28
Class29 ^-- Class30
@enduml

uml/reference_03-03-1_Label-on-relations

@startuml
Class01 "1" *-- "many" Class02 : contains
Class03 o-- Class04 : aggregation
Class05 --> "1" Class06
@enduml

uml/reference_03-03-2_Label-on-relations

@startuml
class Car
Driver - Car : drives >
Car *- Wheel : have 4 >
Car -- Person : < owns
@enduml

uml/reference_03-04-1_Adding-methods

@startuml
Object <|-- ArrayList
Object : equals()
ArrayList : Object[] elementData
ArrayList : size()
@enduml

uml/reference_03-04-2_Adding-methods

@startuml
class Dummy {
  String data
  void methods()
}
class Flight {
  flightNumber : Integer
  departureTime : Date
}
@enduml

uml/reference_03-04-3_Adding-methods

@startuml
class Dummy {
  {field} A field (despite parentheses)
  {method} Some method
}
@enduml

uml/reference_03-05-1_Defining-visibility

@startuml
class Dummy {
  -field1
  #field2
  ~method1()
  +method2()
}
@enduml

uml/reference_03-05-2_Defining-visibility

@startuml
skinparam classAttributeIconSize 0
class Dummy {
  -field1
  #field2
  ~method1()
  +method2()
}
@enduml

uml/reference_03-06-1_Abstract-and-Static

@startuml
class Dummy {
  {static} String id
  {abstract} void methods()
}
@enduml


uml/reference_03-07-1_Advanced-class-body

@startuml
class Foo1 {
  You can use
  several lines
  ..
  as you want
  and group
  ==
  things together.
  __
  You can have as many groups
  as you want
  --
  End of class
}
class User {
  .. Simple Getter ..
  + getName()
  + getAddress()
  .. Some setter ..
  + setName()
  __ private data __
  int age
  -- encrypted --
  String password
}
@enduml


uml/reference_03-08-1_Notes-and-stereotypes

@startuml
class Object << general >>
Object <|--- ArrayList
note top of Object : In java, every class\nextends this one.
note "This is a floating note" as N1
note "This note is connected\nto several objects." as N2
Object .. N2
N2 .. ArrayList
class Foo
note left: On last defined class
@enduml


uml/reference_03-09-1_More-on-notes

@startuml
class Foo
note left: On last defined class
note top of Object
  In java, <size:18>every</size> <u>class</u>
  <b>extends</b>
  <i>this</i> one.
end note
note as N1
  This note is <u>also</u>
  <b><color:royalBlue>on several</color>
  <s>words</s> lines
  And this is hosted by <img:sourceforge.jpg>
end note
@enduml


uml/reference_03-10-1_Note-on-field-or-method

@startuml
class A {
  {static} int counter
  +void {abstract} start(int timeout)
}
note right of A::counter
This member is annotated
end note
note right of A::start
This method is now explained in a UML note
end note
@enduml

uml/reference_03-10-2_Note-on-method-with-the-same-name

@startuml
class A {
  {static} int counter
  +void {abstract} start(int timeoutms)
  +void {abstract} start(Duration timeout)
}
note left of A::counter
This member is annotated
end note
note right of A::"start(int timeoutms)"
This method with int
end note
note right of A::"start(Duration timeout)"
This method with Duration
end note
@enduml

uml/reference_03-11-1_Note-on-links

@startuml
class Dummy
Dummy --> Foo : A link
note on link #red: note that is red
Dummy --> Foo2 : Another link
note right on link #blue
  this is my note on right link
  and in blue
end note
@enduml

uml/reference_03-12-1_Abstract-class-and-interface

@startuml
abstract class AbstractList
abstract AbstractCollection
interface List
interface Collection
List <|-- AbstractList
Collection <|-- AbstractCollection
Collection <|- List
AbstractCollection <|- AbstractList
AbstractList <|-- ArrayList
class ArrayList {
  Object[] elementData
  size()
}
enum TimeUnit {
  DAYS
  HOURS
  MINUTES
}
annotation SuppressWarnings
@enduml

uml/reference_03-13-1_Using-non-letters

@startuml
class "This is my class" as class1
class class2 as "It works this way too"
class2 *-- "foo/dummy" : use
@enduml

uml/reference_03-14-1_Hide-attributes-methods

@startuml
class Dummy1 {
  +myMethods()
}
class Dummy2 {
  +hiddenMethod()
}
class Dummy3 <<Serializable>> {
  String name
}
hide members
hide <<Serializable>> circle
show Dummy1 methods
show <<Serializable>> fields
@enduml

uml/reference_03-15-1_Hide-classes

@startuml
class Foo1
class Foo2
Foo2 *-- Foo1
hide Foo2
@enduml

uml/reference_03-16-1_Remove-classes

@startuml
class Foo1
class Foo2
Foo2 *-- Foo1
remove Foo2
@enduml

uml/reference_03-17-1_Hide-or-Remove-unlinked-class

@startuml
class C1
class C2
class C3
C1 -- C2
@enduml

uml/reference_03-17-2_Hide-or-Remove-unlinked-class

@startuml
class C1
class C2
class C3
C1 -- C2
hide @unlinked
@enduml

uml/reference_03-17-3_Hide-or-Remove-unlinked-class

@startuml
class C1
class C2
class C3
C1 -- C2
remove @unlinked
@enduml

uml/reference_03-18-1_Use-generics

@startuml
class Foo<? extends Element> {
  int size()
}
Foo *- Element
@enduml

uml/reference_03-19-1_Specific-Spot

@startuml
class System << (S,#FF7700) Singleton >>
class Date << (D,orchid) >>
@enduml

uml/reference_03-20-1_Packages

@startuml
package "Classic Collections" #DDDDDD {
  Object <|-- ArrayList
}
package net.sourceforge.plantuml {
  Object <|-- Demo1
  Demo1 *- Demo2
}
@enduml

uml/reference_03-21-1_Packages-style

@startuml
scale 750 width
package foo1 <<Node>> {
  class Class1
}
package foo2 <<Rectangle>> {
  class Class2
}
package foo3 <<Folder>> {
  class Class3
}
package foo4 <<Frame>> {
  class Class4
}
package foo5 <<Cloud>> {
  class Class5
}
package foo6 <<Database>> {
  class Class6
}
@enduml

uml/reference_03-21-2_Packages-style

@startuml
skinparam packageStyle rectangle

package foo1.foo2 {
}

package foo1.foo2.foo3 {
  class Object
}

foo1.foo2 +-- foo1.foo2.foo3
@enduml

uml/reference_03-22-1_Namespaces

@startuml
class BaseClass
namespace net.dummy #DDDDDD {
  .BaseClass <|-- Person
  Meeting o-- Person
  .BaseClass <|- Meeting
}
namespace net.foo {
  net.dummy.Person <|- Person
  .BaseClass <|-- Person
  net.dummy.Meeting o-- Person
}
BaseClass <|-- net.unused.Person
@enduml

uml/reference_03-23-1_Automatic-namespace-creation

@startuml
set namespaceSeparator ::
class X1::X2::foo {
  some info
}
@enduml

uml/reference_03-23-2_Automatic-namespace-creation

@startuml
set namespaceSeparator none
class X1.X2.foo {
  some info
}
@enduml

uml/reference_03-24-1_Lollipop-interface

@startuml
class foo
bar ()- foo
@enduml

uml/reference_03-25-1_Changing-arrows-direction

@startuml
Room o- Student
Room *-- Chair
@enduml

uml/reference_03-25-2_Changing-arrows-direction

@startuml
Student -o Room
Chair --* Room
@enduml

uml/reference_03-25-3_Changing-arrows-direction

@startuml
foo -left-> dummyLeft
foo -right-> dummyRight
foo -up-> dummyUp
foo -down-> dummyDown
@enduml

uml/reference_03-25-4_Changing-arrows-direction

@startuml
left to right direction
foo -left-> dummyLeft
foo -right-> dummyRight
foo -up-> dummyUp
foo -down-> dummyDown
@enduml

uml/reference_03-26-1_Association-classes

@startuml
class Student {
  Name
}
Student "0..*" - "1..*" Course
(Student, Course) .. Enrollment
class Enrollment {
  drop()
  cancel()
}
@enduml

uml/reference_03-26-2_Association-classes

@startuml
class Student {
  Name
}
Student "0..*" -- "1..*" Course
(Student, Course) . Enrollment
class Enrollment {
  drop()
  cancel()
}
@enduml

uml/reference_03-27-1_Association-on-same-classe

@startuml
class Station {
  +name: string
}

class StationCrossing {
  +cost: TimeInterval
}

<> diamond

StationCrossing . diamond
diamond - "from 0..*" Station
diamond - "to 0..* " Station
@enduml

uml/reference_03-28-1_Skinparam

@startuml
skinparam class {
  BackgroundColor PaleGreen
  ArrowColor SeaGreen
  BorderColor SpringGreen
}
skinparam stereotypeCBackgroundColor YellowGreen
Class01 "1" *-- "many" Class02 : contains
Class03 o-- Class04 : aggregation
@enduml

uml/reference_03-29-1_Skinned-Stereotypes

@startuml
skinparam class {
  BackgroundColor PaleGreen
  ArrowColor SeaGreen
  BorderColor SpringGreen
  BackgroundColor<<Foo>> Wheat
  BorderColor<<Foo>> Tomato
}
skinparam stereotypeCBackgroundColor YellowGreen
skinparam stereotypeCBackgroundColor<< Foo >> DimGray
Class01 <<Foo>>
Class03 <<Foo>>
Class01 "1" *-- "many" Class02 : contains
Class03 o-- Class04 : aggregation
@enduml

uml/reference_03-30-1_Color-gradient

@startuml
skinparam backgroundcolor AntiqueWhite/Gold
skinparam classBackgroundColor Wheat|CornflowerBlue
class Foo #red-green
note left of Foo #blue\9932CC
  this is my
  note on this class
  end note
  package example #GreenYellow/LightGoldenRodYellow {
    class Dummy
  }
@enduml


uml/reference_03-31-1_Help-on-layout

@startuml
class Bar1
class Bar2
together {
  class Together1
  class Together2
  class Together3
}
Together1 - Together2
Together2 - Together3
Together2 -[hidden]--> Bar1
Bar1 -[hidden]> Bar2
@enduml

uml/reference_03-32-1_Splitting-large-files

@startuml
' Split into 4 pages
page 2x2
skinparam pageMargin 10
skinparam pageExternalColor gray
skinparam pageBorderColor black
class BaseClass
namespace net.dummy #DDDDDD {
  .BaseClass <|-- Person
  Meeting o-- Person
  .BaseClass <|- Meeting
}
namespace net.foo {
  net.dummy.Person <|- Person
  .BaseClass <|-- Person
  net.dummy.Meeting o-- Person
}
BaseClass <|-- net.unused.Person
@enduml

uml/reference_03-33-1_Extends-and-implements

@startuml
class ArrayList implements List
class ArrayList extends AbstractList
@enduml

uml/reference_03-34-01-1_Bracketed-relations-style-Line-style

@startuml
title Bracketed line style without label
class foo
class bar
bar1 : [bold]
bar2 : [dashed]
bar3 : [dotted]
bar4 : [hidden]
bar5 : [plain]
foo --> bar
foo -[bold]-> bar1
foo -[dashed]-> bar2
foo -[dotted]-> bar3
foo -[hidden]-> bar4
foo -[plain]-> bar5
@enduml

uml/reference_03-34-01-2_Bracketed-relations-style-Line-style

@startuml
title Bracketed line style with label
class foo
class bar
bar1 : [bold]
bar2 : [dashed]
bar3 : [dotted]
bar4 : [hidden]
bar5 : [plain]
foo --> bar          : ?
foo -[bold]-> bar1   : [bold]
foo -[dashed]-> bar2 : [dashed]
foo -[dotted]-> bar3 : [dotted]
foo -[hidden]-> bar4 : [hidden]
foo -[plain]-> bar5  : [plain]
@enduml

uml/reference_03-34-02-1_Bracketed-relations-style-Line-color

@startuml
title Bracketed line color
class foo
class bar
bar1 : [#red]
bar2 : [#green]
bar3 : [#blue]

foo --> bar
foo -[#red]-> bar1   : [#red]
foo -[#green]-> bar2 : [#green]
foo -[#blue]-> bar3  : [#blue]
'foo -[#blue;#yellow;#green]-> bar4
@enduml

uml/reference_03-34-03-1_Bracketed-relations-style-Line-thickness

@startuml
title Bracketed line thickness
class foo
class bar
bar1 : [thickness=1]
bar2 : [thickness=2]
bar3 : [thickness=4]
bar4 : [thickness=8]
bar5 : [thickness=16]

foo --> bar                : ∅
foo -[thickness=1]-> bar1  : [1]
foo -[thickness=2]-> bar2  : [2]
foo -[thickness=4]-> bar3  : [4]
foo -[thickness=8]-> bar4  : [8]
foo -[thickness=16]-> bar5 : [16]
@enduml

uml/reference_03-34-04-1_Bracketed-relations-style-Mix

@startuml
title Bracketed line style mix
class foo
class bar
bar1 : [#red,thickness=1]
bar2 : [#red,dashed,thickness=2]
bar3 : [#green,dashed,thickness=4]
bar4 : [#blue,dotted,thickness=8]
bar5 : [#blue,plain,thickness=16]

foo --> bar                             : ∅
foo -[#red,thickness=1]-> bar1          : [#red,1]
foo -[#red,dashed,thickness=2]-> bar2   : [#red,dashed,2]
foo -[#green,dashed,thickness=4]-> bar3 : [#green,dashed,4]
foo -[#blue,dotted,thickness=8]-> bar4  : [blue,dotted,8]
foo -[#blue,plain,thickness=16]-> bar5  : [blue,plain,16]
@enduml

uml/reference_03-35-1_Change-relation-color-and-style

@startuml
class foo
foo --> bar : normal
foo --> bar1 #line:red;line.bold;text:red  : red bold
foo --> bar2 #green;line.dashed;text:green : green dashed
foo --> bar3 #blue;line.dotted;text:blue   : blue dotted
@enduml

uml/reference_03-36-1_Change-class-color-and-style

@startuml
abstract   abstract
annotation annotation #pink;line:red;line.bold;text:red
class      class      #palegreen;line:green;line.dashed;text:green
interface  interface  #aliceblue;line:blue;line.dotted;text:blue
@enduml

uml/reference_03-36-2_Change-class-color-and-style

@startuml
class bar #line:green;back:lightblue
class bar2 #lightblue;line:green
class Foo1 #back:red;line:00FFFF
class FooDashed #line.dashed:blue
class FooDotted #line.dotted:blue
class FooBold #line.bold
class Demo1 #back:lightgreen|yellow;header:blue/red
@enduml

uml/reference_03-37-1_Arrows-fromto-class-members

@startuml
class Foo {
  + field1
  + field2
}
class Bar {
  + field3
  + field4
}
Foo::field1 --> Bar::field3 : foo
Foo::field2 --> Bar::field4 : bar
@enduml

uml/reference_03-37-2_Arrows-fromto-class-members

@startuml
left to right direction
class User {
  id : INTEGER
  ..
  other_id : INTEGER
}
class Email {
  id : INTEGER
  ..
  user_id : INTEGER
  address : INTEGER
}
User::id *-- Email::user_id
@enduml

uml/reference_04-01-1_Definition-of-objects

@startuml
object firstObject
object "My Second Object" as o2
@enduml

uml/reference_04-02-1_Relations-between-objects

@startuml
object Object01
object Object02
object Object03
object Object04
object Object05
object Object06
object Object07
object Object08
Object01 <|-- Object02
Object03 *-- Object04
Object05 o-- "4" Object06
Object07 .. Object08 : some labels
@enduml

uml/reference_04-03-1_Associations-objects

@startuml
object o1
object o2
diamond dia
object o3

o1 --> dia
o2 --> dia
dia --> o3
@enduml

uml/reference_04-04-1_Adding-fields

@startuml
object user
user : name = "Dummy"
user : id = 123
@enduml

uml/reference_04-04-2_Adding-fields

@startuml
object user {
  name = "Dummy"
  id = 123
}
@enduml

uml/reference_04-06-1_Map-table-or-associative-array

@startuml
map CapitalCity {
UK => London
USA => Washington
Germany => Berlin
}
@enduml

uml/reference_04-06-2_Map-table-or-associative-array

@startuml
map "Map **Contry => CapitalCity**" as CC {
UK => London
USA => Washington
Germany => Berlin
}
@enduml

uml/reference_04-06-3_Map-table-or-associative-array

@startuml
map "map: Map<Integer, String>" as users {
1 => Alice
2 => Bob
3 => Charlie
}
@enduml

uml/reference_04-06-4_Map-table-or-associative-array

@startuml
object London
map CapitalCity {
UK *-> London
USA => Washington
Germany => Berlin
}
@enduml

uml/reference_04-06-5_Map-table-or-associative-array

@startuml
object London
object Washington
object Berlin
object NewYork

map CapitalCity {
UK *-> London
USA *--> Washington
Germany *---> Berlin
}

NewYork --> CapitalCity::USA
@enduml

uml/reference_05-01-1_Simple-Action

@startuml
(*) --> "First Action"
"First Action" --> (*)
@enduml

uml/reference_05-02-1_Label-on-arrows

@startuml
(*) --> "First Action"
-->[You can put also labels] "Second Action"
--> (*)
@enduml

uml/reference_05-03-1_Changing-arrow-direction

@startuml
(*) -up-> "First Action"
-right-> "Second Action"
--> "Third Action"
-left-> (*)
@enduml

uml/reference_05-04-1_Branches

@startuml
(*) --> "Initialization"
if "Some Test" then
  -->[true] "Some Action"
  --> "Another Action"
  -right-> (*)
else
  ->[false] "Something else"
  -->[Ending process] (*)
endif
@enduml

uml/reference_05-04-2_Branches

@startuml
(*) --> "check input"
If "input is verbose" then
--> [Yes] "turn on verbosity"
--> "run command"
else
  --> "run command"
  Endif
  -->(*)
@enduml

uml/reference_05-05-1_More-on-Branches

@startuml
(*) --> if "Some Test" then
-->[true] "action 1"
if "" then
  -> "action 3" as a3
else
  if "Other test" then
    -left-> "action 5"
  else
    --> "action 6"
  endif
endif
else
  ->[false] "action 2"
endif
a3 --> if "last test" then
--> "action 7"
else
  -> "action 8"
endif
@enduml

uml/reference_05-06-1_Synchronization

@startuml
(*) --> ===B1===
--> "Parallel Action 1"
--> ===B2===
===B1=== --> "Parallel Action 2"
--> ===B2===
--> (*)
@enduml

uml/reference_05-07-1_Long-action-description

@startuml
(*) -left-> "this <size:20>action</size>
is <b>very</b> <color:red>long2</color>
and defined on several lines
that contains many <i>text</i>" as A1
-up-> "Another action\n on several lines"
A1 --> "Short action <img:sourceforge.jpg>"
@enduml

uml/reference_05-08-1_Notes

@startuml
(*) --> "Some action"
note right: This action has to be defined
"Some action" --> (*)
note left
  This note is on
  several lines
end note
@enduml

uml/reference_05-09-1_Partition

@startuml
partition Conductor {
  (*) --> "Climbs on Platform"
  --> === S1 ===
  --> Bows
}
partition Audience #LightSkyBlue {
  === S1 === --> Applauds
}
partition Conductor {
  Bows --> === S2 ===
  --> WavesArmes
  Applauds --> === S2 ===
}
partition Orchestra #CCCCEE {
  WavesArmes --> Introduction
  --> "Play music"
}
@enduml

uml/reference_05-10-1_Skinparam

@startuml
skinparam backgroundColor #AAFFFF
skinparam activity {
  StartColor red
  BarColor SaddleBrown
  EndColor Silver
  BackgroundColor Peru
  BackgroundColor<< Begin >> Olive
  BorderColor Peru
  FontName Impact
}
(*) --> "Climbs on Platform" << Begin >>
--> === S1 ===
--> Bows
--> === S2 ===
--> WavesArmes
--> (*)
@enduml

uml/reference_05-11-1_Octagon

@startuml
'Default is skinparam activityShape roundBox
skinparam activityShape octagon
(*) --> "First Action"
"First Action" --> (*)
@enduml

uml/reference_05-12-1_Complete-example

@startuml
title Servlet Container
(*) --> "ClickServlet.handleRequest()"
--> "new Page"
if "Page.onSecurityCheck" then
  ->[true] "Page.onInit()"
  if "isForward?" then
    ->[no] "Process controls"
    if "continue processing?" then
      -->[yes] ===RENDERING===
    else
      -->[no] ===REDIRECT_CHECK===
    endif
  else
    -->[yes] ===RENDERING===
  endif
  if "is Post?" then
    -->[yes] "Page.onPost()"
    --> "Page.onRender()" as render
    --> ===REDIRECT_CHECK===
  else
    -->[no] "Page.onGet()"
    --> render
  endif
else
  -->[false] ===REDIRECT_CHECK===
endif
if "Do redirect?" then
  ->[yes] "redirect request"
  --> ==BEFORE_DESTROY===
else
  if "Do Forward?" then
    -left->[yes] "Forward request"
    --> ==BEFORE_DESTROY===
  else
    -right->[no] "Render page template"
    --> ==BEFORE_DESTROY===
  endif
endif
--> "Page.onDestroy()"
-->(*)
@enduml

uml/reference_06-01-1_Simple-action

@startuml
:Hello world;
:This is on defined on
several **lines**;
@enduml

uml/reference_06-02-1_Start-Stop-End

@startuml
start
:Hello world;
:This is on defined on
several **lines**;
stop
@enduml

uml/reference_06-02-2_Start-Stop-End

@startuml
start
:Hello world;
:This is on defined on
several **lines**;
end
@enduml

uml/reference_06-03-01-1_Conditional-Several-tests-horizontal-mode

@startuml
start
if (condition A) then (yes)
  :Text 1;
elseif (condition B) then (yes)
:Text 2;
stop
elseif (condition C) then (yes)
:Text 3;
elseif (condition D) then (yes)
:Text 4;
else (nothing)
  :Text else;
endif
stop
@enduml

uml/reference_06-03-01-2_Conditional-Several-tests-vertical-mode

@startuml
!pragma useVerticalIf on
start
if (condition A) then (yes)
  :Text 1;
elseif (condition B) then (yes)
:Text 2;
stop
elseif (condition C) then (yes)
:Text 3;
elseif (condition D) then (yes)
:Text 4;
else (nothing)
  :Text else;
endif
stop
@enduml

uml/reference_06-03-1_Conditional

@startuml
start
if (Graphviz installed?) then (yes)
  :process all\ndiagrams;
else (no)
  :process only
  __sequence__ and __activity__ diagrams;
endif
stop
@enduml

uml/reference_06-03-2_Conditional

@startuml
if (color?) is (<color:red>red) then
  :print red;
else
  :print not red;
@enduml

uml/reference_06-03-3_Conditional

@startuml
if (counter?) equals (5) then
  :print 5;
else
  :print not 5;
@enduml

uml/reference_06-04-1_Conditional-with-stop-on-an-action

@startuml
if (condition?) then
  :error;
  stop
endif
#palegreen:action;
@enduml

uml/reference_06-04-2_Conditional-with-stop-on-an-action

@startuml
if (condition?) then
  #pink:error;
  kill
endif
#palegreen:action;
@enduml

uml/reference_06-04-3_Conditional-with-stop-on-an-action

@startuml
if (condition?) then
  #pink:error;
  detach
endif
#palegreen:action;
@enduml

uml/reference_06-05-1_Repeat-loop

@startuml
start
repeat
:read data;
:generate diagrams;
repeat while (more data?) is (yes)
->no;
stop
@enduml

uml/reference_06-05-2_Repeat-loop

@startuml
start
repeat
:read data;
:generate diagrams;
repeat while (more data?)
stop
@enduml

uml/reference_06-06-1_Break-on-a-repeat-loop

@startuml
start
repeat
  :Test something;
    if (Something went wrong?) then (no)
      #palegreen:OK;
      break
    endif
    ->NOK;
    :Alert "Error with long text";
repeat while (Something went wrong with long text?) is (yes) not (no)
->//merged step//;
:Alert "Sucess";
stop
@endum

uml/reference_06-07-1_While-loop

@startuml
start
while (data available?)
  :read data;
  :generate diagrams;
endwhile
stop
@enduml

uml/reference_06-07-2_While-loop

@startuml
while (check filesize ?) is (not empty)
  :read file;
endwhile (empty)
:close file;
@enduml

uml/reference_06-08-1_Parallel-processing

@startuml
start
if (multiprocessor?) then (yes)
  fork
    :Treatment 1;
  fork again
    :Treatment 2;
  end fork
else (monoproc)
  :Treatment 1;
  :Treatment 2;
endif
@enduml

uml/reference_06-09-01-1_Split-processing

@startuml
start
split
  :A;
  split again
    :B;
    split again
      :C;
      split again
        :a;
        :b;
      end split
      :D;
    end
@enduml

uml/reference_06-09-02-1_Split-processing

@startuml
split
  -[hidden]->
  :A;
  split again
    -[hidden]->
    :B;
    split again
      -[hidden]->
      :C;
    end split
    :D;
@enduml

uml/reference_06-09-02-2_Split-processing

@startuml
split
  -[hidden]->
  :A;
  split again
    -[hidden]->
    :a;
    :b;
    split again
      -[hidden]->
      (Z)
    end split
    :D;
@enduml

uml/reference_06-09-03-1_Split-processing

@startuml
start
split
  :A;
  kill
  split again
    :B;
    detach
    split again
      :C;
      kill
    end split
@enduml

uml/reference_06-09-03-2_Split-processing

@startuml
start
split
  :A;
  kill
  split again
    :b;
    :c;
    detach
    split again
      (Z)
      detach
      split again
      end
      split again
        stop
      end split
@enduml

uml/reference_06-10-1_Notes

@startuml
start
:foo1;
floating note left: This is a note
:foo2;
note right
  This note is on several
  //lines// and can
  contain <b>HTML</b>
  ====
  * Calling the method ""foo()"" is prohibited
end note
stop
@enduml

uml/reference_06-10-2_Notes

@startuml
start
repeat :Enter data;
:Submit;
backward :Warning;
note right: Note
repeat while (Valid?) is (No) not (Yes)
stop
@enduml

uml/reference_06-11-1_Colors

@startuml
start
:starting progress;
#HotPink:reading configuration files
These files should edited at this point!;
#AAAAAA:ending of the process;
@enduml

uml/reference_06-12-1_Lines-without-arrows

@startuml
skinparam ArrowHeadColor none
start
:Hello world;
:This is on defined on
several **lines**;
stop
@enduml

uml/reference_06-12-2_Lines-without-arrows

@startuml
skinparam ArrowHeadColor none
start
repeat :Enter data;
:Submit;
backward :Warning;
repeat while (Valid?) is (No) not (Yes)
stop
@enduml

uml/reference_06-13-1_Arrows

@startuml
:foo1;
-> You can put text on arrows;
if (test) then
  -[#blue]->
  :foo2;
  -[#green,dashed]-> The text can
  also be on several lines
  and **very** long...;
  :foo3;
else
  -[#black,dotted]->
  :foo4;
endif
-[#gray,bold]->
:foo5;
@enduml

uml/reference_06-14-1_Connector

@startuml
start
:Some activity;
(A)
detach
(A)
:Other activity;
@enduml

uml/reference_06-15-1_Color-on-connector

@startuml
start
:The connector below
wishes he was blue;
#blue:(B)
:This next connector
feels that she would
be better off green;
#green:(G)
stop
@enduml

uml/reference_06-16-1_Grouping-or-partition

@startuml
start
partition Initialization {
  :read config file;
  :init internal variable;
}
partition Running {
  :wait for user interaction;
  :print information;
}
stop
@enduml

uml/reference_06-17-1_Swimlanes

@startuml
|Swimlane1|
start
:foo1;
|#AntiqueWhite|Swimlane2|
:foo2;
:foo3;
|Swimlane1|
:foo4;
|Swimlane2|
:foo5;
stop
@enduml

uml/reference_06-17-2_Swimlanes

@startuml
|#pink|Actor_For_red|
start
if (color?) is (red) then
  #pink:**action red**;
  :foo1;
else (not red)
  |#lightgray|Actor_For_no_red|
  #lightgray:**action not red**;
  :foo2;
endif
|Next_Actor|
#lightblue:foo3;
:foo4;
|Final_Actor|
#palegreen:foo5;
stop
@enduml

uml/reference_06-18-1_Detach-or-kill

@startuml
:start;
fork
  :foo1;
  :foo2;
fork again
  :foo3;
  detach
endfork
if (foo4) then
  :foo5;
  detach
endif
:foo6;
detach
:foo7;
stop
@enduml

uml/reference_06-18-2_Detach-or-kill

@startuml
:start;
fork
  :foo1;
  :foo2;
fork again
  :foo3;
  kill
endfork
if (foo4) then
  :foo5;
  kill
endif
:foo6;
kill
:foo7;
stop
@enduml

uml/reference_06-19-1_SDL

@startuml
:Ready;
:next(o)|
:Receiving;
split
  :nak(i)<
  :ack(o)>
  split again
    :ack(i)<
    :next(o)
    on several line|
    :i := i + 1]
    :ack(o)>
    split again
      :err(i)<
      :nak(o)>
      split again
        :foo/
        split again
          :i > 5}
          stop
        end split
        :finish;
@enduml


uml/reference_06-20-1_Complete-example

@startuml
start
:ClickServlet.handleRequest();
:new page;
if (Page.onSecurityCheck) then (true)
  :Page.onInit();
  if (isForward?) then (no)
    :Process controls;
    if (continue processing?) then (no)
      stop
    endif

    if (isPost?) then (yes)
      :Page.onPost();
    else (no)
      :Page.onGet();
    endif
    :Page.onRender();
  endif
else (false)
endif

if (do redirect?) then (yes)
  :redirect process;
else
  if (do forward?) then (yes)
    :Forward request;
  else (no)
    :Render page template;
  endif
endif

stop
@enduml

uml/reference_06-21-01-1_Condition-Style

@startuml
skinparam conditionStyle inside
start
repeat
:act1;
:act2;
repeatwhile (<b>end)
:act3;
@enduml

uml/reference_06-21-01-2_Condition-Style

@startuml
start
repeat
:act1;
:act2;
repeatwhile (<b>end)
:act3;
@enduml

uml/reference_06-21-02-1_Condition-Style

@startuml
skinparam conditionStyle diamond
start
repeat
:act1;
:act2;
repeatwhile (<b>end)
:act3;
@enduml

uml/reference_06-21-03-1_Condition-Style

@startuml
skinparam conditionStyle InsideDiamond
start
repeat
:act1;
:act2;
repeatwhile (<b>end)
:act3;
@enduml

uml/reference_06-21-03-2_Condition-Style

@startuml
skinparam conditionStyle foo1
start
repeat
:act1;
:act2;
repeatwhile (<b>end)
:act3;
@enduml

uml/reference_06-22-01-1_Condition-End-Style

@startuml
skinparam ConditionEndStyle diamond
:A;
if (decision) then (yes)
  :B1;
else (no)
endif
:C;
@enduml

uml/reference_06-22-01-2_Condition-End-Style

@startuml
skinparam ConditionEndStyle diamond
:A;
if (decision) then (yes)
  :B1;
else (no)
  :B2;
endif
:C;
@enduml

uml/reference_06-22-02-1_Condition-End-Style

@startuml
skinparam ConditionEndStyle hline
:A;
if (decision) then (yes)
  :B1;
else (no)
endif
:C;
@enduml

uml/reference_06-22-02-2_Condition-End-Style

@startuml
skinparam ConditionEndStyle hline
:A;
if (decision) then (yes)
  :B1;
else (no)
  :B2;
endif
:C;
@enduml

uml/reference_07-01-1_Components

@startuml
[First component]
[Another component] as Comp2
component Comp3
component [Last\ncomponent] as Comp4
@enduml

uml/reference_07-02-1_Interfaces

@startuml
() "First Interface"
() "Another interface" as Interf2
interface Interf3
interface "Last\ninterface" as Interf4
@enduml

uml/reference_07-03-1_Basic-example

@startuml
DataAccess - [First Component]
[First Component] ..> HTTP : use
@enduml

uml/reference_07-04-1_Using-notes

@startuml
interface "Data Access" as DA
DA - [First Component]
[First Component] ..> HTTP : use
note left of HTTP : Web Service only
note right of [First Component]
  A note can also
  be on several lines
end note
@enduml

uml/reference_07-05-1_Grouping-Components

@startuml
package "Some Group" {
  HTTP - [First Component]
  [Another Component]
}
node "Other Groups" {
  FTP - [Second Component]
  [First Component] --> FTP
}
cloud {
  [Example 1]
}
database "MySql" {
  folder "This is my folder" {
    [Folder 3]
  }
  frame "Foo" {
    [Frame 4]
  }
}
[Another Component] --> [Example 1]
[Example 1] --> [Folder 3]
[Folder 3] --> [Frame 4]
@enduml

uml/reference_07-06-1_Changing-arrows-direction

@startuml
[Component] --> Interface1
[Component] -> Interface2
@enduml

uml/reference_07-06-2_Changing-arrows-direction

@startuml
Interface1 <-- [Component]
Interface2 <- [Component]
@enduml

uml/reference_07-06-3_Changing-arrows-direction

@startuml
[Component] -left-> left
[Component] -right-> right
[Component] -up-> up
[Component] -down-> down
@enduml

uml/reference_07-06-4_Changing-arrows-direction

@startuml
left to right direction
[Component] -left-> left
[Component] -right-> right
[Component] -up-> up
[Component] -down-> down
@enduml

uml/reference_07-07-1_Use-UML2-notation

@startuml
interface "Data Access" as DA
DA - [First Component]
[First Component] ..> HTTP : use
@enduml

uml/reference_07-08-1_Use-UML1-notation

@startuml
skinparam componentStyle uml1
interface "Data Access" as DA
DA - [First Component]
[First Component] ..> HTTP : use
@enduml

uml/reference_07-09-1_Use-rectangle-notation

@startuml
skinparam componentStyle rectangle
interface "Data Access" as DA
DA - [First Component]
[First Component] ..> HTTP : use
@enduml

uml/reference_07-10-1_Long_description

@startuml
component comp1 [
This component
has a long comment
on several lines
]
@enduml

uml/reference_07-11-1_Individual-colors

@startuml
component [Web Server] #Yellow
@enduml

uml/reference_07-12-1_Using-Sprite-in-Stereotype

@startuml
sprite $businessProcess [16x16/16] {
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFF0FFFFF
FFFFFFFFFF00FFFF
FF00000000000FFF
FF000000000000FF
FF00000000000FFF
FFFFFFFFFF00FFFF
FFFFFFFFFF0FFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
}
rectangle " End to End\nbusiness process" <<$businessProcess>> {
  rectangle "inner process 1" <<$businessProcess>> as src
  rectangle "inner process 2" <<$businessProcess>> as tgt
  src -> tgt
}
@enduml

uml/reference_07-13-1_Skinparam

@startuml
skinparam interface {
  backgroundColor RosyBrown
  borderColor orange
}
skinparam component {
  FontSize 13
  BackgroundColor<<Apache>> Red
  BorderColor<<Apache>> #FF6655
  FontName Courier
  BorderColor black
  BackgroundColor gold
  ArrowFontName Impact
  ArrowColor #FF6655
  ArrowFontColor #777777
}
() "Data Access" as DA
DA - [First Component]
[First Component] ..> () HTTP : use
HTTP - [Web Server] << Apache >>
@enduml

uml/reference_07-13-2_Skinparam

@startuml
[AA] <<static lib>>
[BB] <<shared lib>>
[CC] <<static lib>>
node node1
node node2 <<shared node>>
database Production
skinparam component {
  backgroundColor<<static lib>> DarkKhaki
  backgroundColor<<shared lib>> Green
}
skinparam node {
  borderColor Green
  backgroundColor Yellow
  backgroundColor<<shared node>> Magenta
}
skinparam databaseBackgroundColor Aqua
@enduml

uml/reference_07-14-01-1_componentStyle

@startuml
skinparam BackgroundColor transparent
skinparam componentStyle uml2
component A {
component "A.1" {
}
component A.44 {
[A4.1]
  }
  component "A.2"
  [A.3]
  component A.5 [
  A.5]
  component A.6 [
  ]
}
[a]->[b]
@enduml

uml/reference_07-14-01-2_componentStyle

@startuml
skinparam BackgroundColor transparent
skinparam componentStyle rectangle
component A {
component "A.1" {
  }
  component A.44 {
  [A4.1]
}
component "A.2"
[A.3]
component A.5 [
A.5]
component A.6 [
]
}
[a]->[b]
@enduml

uml/reference_07-15-1_Hide-or-Remove-unlinked-component

@startuml
component C1
component C2
component C3
C1 -- C2
@enduml

uml/reference_07-15-2_Hide-or-Remove-unlinked-component

@startuml
component C1
component C2
component C3
C1 -- C2
hide @unlinked
@enduml

uml/reference_07-15-3_Hide-or-Remove-unlinked-component

@startuml
component C1
component C2
component C3
C1 -- C2
remove @unlinked
@enduml

uml/reference_08-01-1_Declaring-element

@startuml
actor actor
actor/ "actor/"
agent agent
artifact artifact
boundary boundary
card card
circle circle
cloud cloud
collections collections
component component
control control
database database
entity entity
file file
folder folder
frame frame
hexagon hexagon
interface interface
label label
node node
package package
queue queue
rectangle rectangle
stack stack
storage storage
usecase usecase
usecase/ "usecase/"
@enduml

uml/reference_08-01-2_Declaring-element

@startuml
folder folder [
This is a <b>folder
----
You can use separator
====
of different kind
....
and style
]
node node [
This is a <b>node
----
You can use separator
====
of different kind
....
and style
]
database database [
This is a <b>database
----
You can use separator
====
of different kind
....
and style
]
usecase usecase [
This is a <b>usecase
----
You can use separator
====
of different kind
....
and style
]
card card [
This is a <b>card
----
You can use separator
====
of different kind
....
and style
<i><color:blue>(add from V1.2020.7)</color></i>
]
@enduml

uml/reference_08-02-01-1_Declaring-element-Actor

@startuml
actor actor1
:actor2:
@enduml

uml/reference_08-02-02-1_Declaring-element-Component

@startuml
component component1
[component2]
@enduml

uml/reference_08-02-03-1_Declaring-element-Interface

@startuml
interface interface1
() "interface2"
label "//interface example//"
@enduml

uml/reference_08-02-04-1_Declaring-element-Usecase

@startuml
usecase usecase1
(usecase2)
@enduml

uml/reference_08-03-1_Linking-or-arrow

@startuml
node node1
node node2
node node3
node node4
node node5
node1 -- node2 : label1
node1 .. node3 : label2
node1 ~~ node4 : label3
node1 == node5
@enduml

uml/reference_08-03-2_Linking-or-arrow

@startuml
artifact artifact1
artifact artifact2
artifact artifact3
artifact artifact4
artifact artifact5
artifact artifact6
artifact artifact7
artifact artifact8
artifact artifact9
artifact artifact10
artifact1 --> artifact2
artifact1 --* artifact3
artifact1 --o artifact4
artifact1 --+ artifact5
artifact1 --# artifact6
artifact1 -->> artifact7
artifact1 --0 artifact8
artifact1 --^ artifact9
artifact1 --(0 artifact10
@enduml

uml/reference_08-03-3_Linking-or-arrow

@startuml
cloud cloud1
cloud cloud2
cloud cloud3
cloud cloud4
cloud cloud5
cloud1 -0- cloud2
cloud1 -0)- cloud3
cloud1 -(0- cloud4
cloud1 -(0)- cloud5
@enduml

uml/reference_08-03-4_Linking-or-arrow

@startuml
actor foo1
actor foo2
foo1 <-0-> foo2
foo1 <-(0)-> foo2
(ac1) -le(0)-> left1
ac1 -ri(0)-> right1
ac1 .up(0).> up1
ac1 ~up(0)~> up2
ac1 -do(0)-> down1
ac1 -do(0)-> down2
actor1 -0)- actor2
component comp1
component comp2
comp1 *-0)-+ comp2
[comp3] <-->> [comp4]
@enduml

uml/reference_08-04-01-1_Bracketed-arrow-style-Line-style

@startuml
node foo
title Bracketed line style without label
foo --> bar
foo -[bold]-> bar1
foo -[dashed]-> bar2
foo -[dotted]-> bar3
foo -[hidden]-> bar4
foo -[plain]-> bar5
@enduml

uml/reference_08-04-01-2_Bracketed-arrow-style-Line-style

@startuml
title Bracketed line style with label
node foo
foo --> bar          : ?
foo -[bold]-> bar1   : [bold]
foo -[dashed]-> bar2 : [dashed]
foo -[dotted]-> bar3 : [dotted]
foo -[hidden]-> bar4 : [hidden]
foo -[plain]-> bar5  : [plain]
@enduml

uml/reference_08-04-02-1_Bracketed-arrow-style-Line-color

@startuml
title Bracketed line color
node foo
foo --> bar
foo -[#red]-> bar1   : [#red]
foo -[#green]-> bar2 : [#green]
foo -[#blue]-> bar3  : [#blue]
foo -[#blue;#yellow;#green]-> bar4
@enduml

uml/reference_08-04-03-1_Bracketed-arrow-style-Line-thickness

@startuml
title Bracketed line thickness
node foo
foo --> bar                : ?
foo -[thickness=1]-> bar1  : [1]
foo -[thickness=2]-> bar2  : [2]
foo -[thickness=4]-> bar3  : [4]
foo -[thickness=8]-> bar4  : [8]
foo -[thickness=16]-> bar5 : [16]
@enduml

uml/reference_08-04-04-1_Bracketed-arrow-style-Mix

@startuml
title Bracketed line style mix
node foo
foo --> bar                                   : ?
foo -[#red,thickness=1]-> bar1                : [#red,1]
foo -[#red,dashed,thickness=2]-> bar2         : [#red,dashed,2]
foo -[#green,dashed,thickness=4]-> bar3       : [#green,dashed,4]
foo -[#blue,dotted,thickness=8]-> bar4        : [blue,dotted,8]
foo -[#blue,plain,thickness=16]-> bar5        : [blue,plain,16]
foo -[#blue;#green,dashed,thickness=4]-> bar6 : [blue;green,dashed,4]
@enduml

uml/reference_08-05-1_Change-arrow-color-and-style

@startuml
node foo
foo --> bar : normal
foo --> bar1 #line:red;line.bold;text:red  : red bold
foo --> bar2 #green;line.dashed;text:green : green dashed
foo --> bar3 #blue;line.dotted;text:blue   : blue dotted
@enduml

uml/reference_08-06-1_Change-element-color-and-style

@startuml
agent a
cloud c #pink;line:red;line.bold;text:red
file  f #palegreen;line:green;line.dashed;text:green
node  n #aliceblue;line:blue;line.dotted;text:blue
@enduml

uml/reference_08-06-2_Change-element-color-and-style

@startuml
agent a
cloud c #pink;line:red;line.bold;text:red [
c
cloud description
]
file f #palegreen;line:green;line.dashed;text:green {
  [c1]
  [c2]
}
frame frame {
  node n #aliceblue;line:blue;line.dotted;text:blue
}
@enduml

uml/reference_08-07-1_Nestable-elements

@startuml
artifact artifact {
}
card card {
}
cloud cloud {
}
component component {
}
database database {
}
file file {
}
folder folder {
}
frame frame {
}
hexagon hexagon {
}
node node {
}
package package {
}
queue queue {
}
rectangle rectangle {
}
stack stack {
}
storage storage {
}
@enduml

uml/reference_08-08-01-1_Example-with-one-level

@startuml
artifact artifactVeryLOOOOOOOOOOOOOOOOOOOg as "artifact" {
  file f1
}
card cardVeryLOOOOOOOOOOOOOOOOOOOg as "card" {
file f2
}
cloud cloudVeryLOOOOOOOOOOOOOOOOOOOg as "cloud" {
  file f3
}
component componentVeryLOOOOOOOOOOOOOOOOOOOg as "component" {
file f4
}
database databaseVeryLOOOOOOOOOOOOOOOOOOOg as "database" {
  file f5
}
file fileVeryLOOOOOOOOOOOOOOOOOOOg as "file" {
  file f6
}
folder folderVeryLOOOOOOOOOOOOOOOOOOOg as "folder" {
  file f7
}
frame frameVeryLOOOOOOOOOOOOOOOOOOOg as "frame" {
  file f8
}
hexagon hexagonVeryLOOOOOOOOOOOOOOOOOOOg as "hexagon" {
file f9
}
node nodeVeryLOOOOOOOOOOOOOOOOOOOg as "node" {
  file f10
}
package packageVeryLOOOOOOOOOOOOOOOOOOOg as "package" {
  file f11
}
queue queueVeryLOOOOOOOOOOOOOOOOOOOg as "queue" {
file f12
}
rectangle rectangleVeryLOOOOOOOOOOOOOOOOOOOg as "rectangle" {
  file f13
}
stack stackVeryLOOOOOOOOOOOOOOOOOOOg as "stack" {
file f14
}
storage storageVeryLOOOOOOOOOOOOOOOOOOOg as "storage" {
  file f15
}
@enduml

uml/reference_08-08-02-1_Other-example

@startuml
artifact Foo1 {
  folder Foo2
}
folder Foo3 {
  artifact Foo4
}
frame Foo5 {
  database Foo6
}
cloud vpc {
  node ec2 {
    stack stack
  }
}
@enduml

uml/reference_08-08-02-2_Other-example

@startuml
node Foo1 {
  cloud Foo2
}
cloud Foo3 {
  frame Foo4
}
database Foo5 {
  storage Foo6
}
storage Foo7 {
  storage Foo8
}
@enduml

uml/reference_08-08-03-1_Full-nesting

@startuml
artifact artifact {
  card card {
  cloud cloud {
    component component {
    database database {
      file file {
        folder folder {
          frame frame {
            hexagon hexagon {
            node node {
              package package {
                queue queue {
                rectangle rectangle {
                  stack stack {
                  storage storage {
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
}
}
}
}
}
@enduml

uml/reference_08-08-03-2_Full-nesting

@startuml
storage storage {
  stack stack {
  rectangle rectangle {
    queue queue {
    package package {
      node node {
        hexagon hexagon {
        frame frame {
          folder folder {
            file file {
              database database {
                component component {
                cloud cloud {
                  card card {
                  artifact artifact {
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
}
}
}
}
}
@enduml

uml/reference_08-09-01-1_Simple-alias-with-as

@startuml
node Node1 as n1
node "Node 2" as n2
file f1 as "File 1"
cloud c1 as "this
is
a
cloud"
cloud c2 [this
is
another
cloud]
n1 -> n2
n1 --> f1
f1 -> c1
c1 -> c2
@enduml

uml/reference_08-09-02-1_Examples-of-long-alias

@startuml
actor       "actor"       as actorVeryLOOOOOOOOOOOOOOOOOOOg
agent       "agent"       as agentVeryLOOOOOOOOOOOOOOOOOOOg
artifact    "artifact"    as artifactVeryLOOOOOOOOOOOOOOOOOOOg
boundary    "boundary"    as boundaryVeryLOOOOOOOOOOOOOOOOOOOg
card        "card"        as cardVeryLOOOOOOOOOOOOOOOOOOOg
cloud       "cloud"       as cloudVeryLOOOOOOOOOOOOOOOOOOOg
collections "collections" as collectionsVeryLOOOOOOOOOOOOOOOOOOOg
component   "component"   as componentVeryLOOOOOOOOOOOOOOOOOOOg
control     "control"     as controlVeryLOOOOOOOOOOOOOOOOOOOg
database    "database"    as databaseVeryLOOOOOOOOOOOOOOOOOOOg
entity      "entity"      as entityVeryLOOOOOOOOOOOOOOOOOOOg
file        "file"        as fileVeryLOOOOOOOOOOOOOOOOOOOg
folder      "folder"      as folderVeryLOOOOOOOOOOOOOOOOOOOg
frame       "frame"       as frameVeryLOOOOOOOOOOOOOOOOOOOg
hexagon     "hexagon"     as hexagonVeryLOOOOOOOOOOOOOOOOOOOg
interface   "interface"   as interfaceVeryLOOOOOOOOOOOOOOOOOOOg
label       "label"       as labelVeryLOOOOOOOOOOOOOOOOOOOg
node        "node"        as nodeVeryLOOOOOOOOOOOOOOOOOOOg
package     "package"     as packageVeryLOOOOOOOOOOOOOOOOOOOg
queue       "queue"       as queueVeryLOOOOOOOOOOOOOOOOOOOg
stack       "stack"       as stackVeryLOOOOOOOOOOOOOOOOOOOg
rectangle   "rectangle"   as rectangleVeryLOOOOOOOOOOOOOOOOOOOg
storage     "storage"     as storageVeryLOOOOOOOOOOOOOOOOOOOg
usecase     "usecase"     as usecaseVeryLOOOOOOOOOOOOOOOOOOOg
@enduml

uml/reference_08-09-02-2_Examples-of-long-alias

@startuml
actor       actorVeryLOOOOOOOOOOOOOOOOOOOg       as "actor"
agent       agentVeryLOOOOOOOOOOOOOOOOOOOg       as "agent"
artifact    artifactVeryLOOOOOOOOOOOOOOOOOOOg    as "artifact"
boundary    boundaryVeryLOOOOOOOOOOOOOOOOOOOg    as "boundary"
card        cardVeryLOOOOOOOOOOOOOOOOOOOg        as "card"
cloud       cloudVeryLOOOOOOOOOOOOOOOOOOOg       as "cloud"
collections collectionsVeryLOOOOOOOOOOOOOOOOOOOg as "collections"
component   componentVeryLOOOOOOOOOOOOOOOOOOOg   as "component"
control     controlVeryLOOOOOOOOOOOOOOOOOOOg     as "control"
database    databaseVeryLOOOOOOOOOOOOOOOOOOOg    as "database"
entity      entityVeryLOOOOOOOOOOOOOOOOOOOg      as "entity"
file        fileVeryLOOOOOOOOOOOOOOOOOOOg        as "file"
folder      folderVeryLOOOOOOOOOOOOOOOOOOOg      as "folder"
frame       frameVeryLOOOOOOOOOOOOOOOOOOOg       as "frame"
hexagon     hexagonVeryLOOOOOOOOOOOOOOOOOOOg     as "hexagon"
interface   interfaceVeryLOOOOOOOOOOOOOOOOOOOg   as "interface"
label       labelVeryLOOOOOOOOOOOOOOOOOOOg       as "label"
node        nodeVeryLOOOOOOOOOOOOOOOOOOOg        as "node"
package     packageVeryLOOOOOOOOOOOOOOOOOOOg     as "package"
queue       queueVeryLOOOOOOOOOOOOOOOOOOOg       as "queue"
stack       stackVeryLOOOOOOOOOOOOOOOOOOOg       as "stack"
rectangle   rectangleVeryLOOOOOOOOOOOOOOOOOOOg   as "rectangle"
storage     storageVeryLOOOOOOOOOOOOOOOOOOOg     as "storage"
usecase     usecaseVeryLOOOOOOOOOOOOOOOOOOOg     as "usecase"
@enduml

uml/reference_08-10-1_Round-corner

@startuml
skinparam rectangle {
  roundCorner<<Concept>> 25
}
rectangle "Concept Model" <<Concept>> {
  rectangle "Example 1" <<Concept>> as ex1
  rectangle "Another rectangle"
}
@enduml

uml/reference_08-11-01-1_Specific-SkinParameter-roundCorner

@startuml
skinparam roundCorner 15
actor actor
agent agent
artifact artifact
boundary boundary
card card
circle circle
cloud cloud
collections collections
component component
control control
database database
entity entity
file file
folder folder
frame frame
hexagon hexagon
interface interface
label label
node node
package package
queue queue
rectangle rectangle
stack stack
storage storage
usecase usecase
@enduml

uml/reference_08-12-1_Appendix-All-type-of-arrow-line

@startuml
left to right direction
skinparam nodesep 5

f3 ~~ b3 : ""~~""\n//dotted//
f2 .. b2 : ""..""\n//dashed//
f1 == b1 : ""==""\n//bold//
f0 -- b0 : ""--""\n//plain//
@enduml

uml/reference_08-13-01-1_Type-of-arrow-head

@startuml
left to right direction
skinparam nodesep 5

f13 --0   b13 : ""--0""
f12 --@   b12 : ""--@""
f11 --:|> b11 : ""--:|>""
f10 --||> b10 : ""--||>""
f9  --|>  b9  : ""--|>""
f8  --^   b8  : ""--^ ""
f7  --\\  b7  : ""--\\\\""
f6  --#   b6  : ""--# ""
f5  --+   b5  : ""--+ ""
f4  --o   b4  : ""--o ""
f3  --*   b3  : ""--* ""
f2  -->>  b2  : ""-->>""
f1  -->   b1  : ""--> ""
f0  --    b0  : ""-- ""
@enduml

uml/reference_08-13-02-1_Type-of-0-arrow-or-circle-arrow

@startuml
left to right direction
skinparam nodesep 5
f10 0--0   b10 : "" 0--0 ""
f9  )--(   b9  : "" )--(""
f8  0)--(0 b8  : "" 0)--(0""
f7  0)--   b7  : "" 0)-- ""
f6  -0)-   b6  : "" -0)-\n ""
f5  -(0)-  b5  : "" -(0)-\n""
f4  -(0-   b4  : "" -(0-\n ""
f3  --(0   b3  : "" --(0 ""
f2  --(    b2  : "" --( ""
f1  --0    b1  : "" --0 ""
@enduml

uml/reference_08-14-01-1_Simple-element

@startuml
actor actor #aliceblue;line:blue;line.dotted;text:blue
actor/ "actor/" #aliceblue;line:blue;line.dotted;text:blue
agent agent #aliceblue;line:blue;line.dotted;text:blue
artifact artifact #aliceblue;line:blue;line.dotted;text:blue
boundary boundary #aliceblue;line:blue;line.dotted;text:blue
card card #aliceblue;line:blue;line.dotted;text:blue
circle circle #aliceblue;line:blue;line.dotted;text:blue
cloud cloud #aliceblue;line:blue;line.dotted;text:blue
collections collections #aliceblue;line:blue;line.dotted;text:blue
component component #aliceblue;line:blue;line.dotted;text:blue
control control #aliceblue;line:blue;line.dotted;text:blue
database database #aliceblue;line:blue;line.dotted;text:blue
entity entity #aliceblue;line:blue;line.dotted;text:blue
file file #aliceblue;line:blue;line.dotted;text:blue
folder folder #aliceblue;line:blue;line.dotted;text:blue
frame frame #aliceblue;line:blue;line.dotted;text:blue
hexagon hexagon #aliceblue;line:blue;line.dotted;text:blue
interface interface #aliceblue;line:blue;line.dotted;text:blue
label label #aliceblue;line:blue;line.dotted;text:blue
node node #aliceblue;line:blue;line.dotted;text:blue
package package #aliceblue;line:blue;line.dotted;text:blue
queue queue #aliceblue;line:blue;line.dotted;text:blue
rectangle rectangle #aliceblue;line:blue;line.dotted;text:blue
stack stack #aliceblue;line:blue;line.dotted;text:blue
storage storage #aliceblue;line:blue;line.dotted;text:blue
usecase usecase #aliceblue;line:blue;line.dotted;text:blue
usecase/ "usecase/" #aliceblue;line:blue;line.dotted;text:blue
@enduml

uml/reference_08-14-03-1_Without-sub-element

@startuml
artifact artifact #aliceblue;line:blue;line.dotted;text:blue {
}
card card #aliceblue;line:blue;line.dotted;text:blue {
}
cloud cloud #aliceblue;line:blue;line.dotted;text:blue {
}
component component #aliceblue;line:blue;line.dotted;text:blue {
}
database database #aliceblue;line:blue;line.dotted;text:blue {
}
file file #aliceblue;line:blue;line.dotted;text:blue {
}
folder folder #aliceblue;line:blue;line.dotted;text:blue {
}
frame frame #aliceblue;line:blue;line.dotted;text:blue {
}
hexagon hexagon #aliceblue;line:blue;line.dotted;text:blue {
}
node node #aliceblue;line:blue;line.dotted;text:blue {
}
package package #aliceblue;line:blue;line.dotted;text:blue {
}
queue queue #aliceblue;line:blue;line.dotted;text:blue {
}
rectangle rectangle #aliceblue;line:blue;line.dotted;text:blue {
}
stack stack #aliceblue;line:blue;line.dotted;text:blue {
}
storage storage #aliceblue;line:blue;line.dotted;text:blue {
}
@enduml

uml/reference_08-14-04-1_With-sub-element

@startuml
artifact artifactVeryLOOOOOOOOOOOOOOOOOOOg as "artifact" #aliceblue;line:blue;line.dotted;text:blue {
  file f1
}
card cardVeryLOOOOOOOOOOOOOOOOOOOg as "card" #aliceblue;line:blue;line.dotted;text:blue {
file f2
}
cloud cloudVeryLOOOOOOOOOOOOOOOOOOOg as "cloud" #aliceblue;line:blue;line.dotted;text:blue {
  file f3
}
component componentVeryLOOOOOOOOOOOOOOOOOOOg as "component" #aliceblue;line:blue;line.dotted;text:blue {
file f4
}
database databaseVeryLOOOOOOOOOOOOOOOOOOOg as "database" #aliceblue;line:blue;line.dotted;text:blue {
  file f5
}
file fileVeryLOOOOOOOOOOOOOOOOOOOg as "file" #aliceblue;line:blue;line.dotted;text:blue {
  file f6
}
folder folderVeryLOOOOOOOOOOOOOOOOOOOg as "folder" #aliceblue;line:blue;line.dotted;text:blue {
  file f7
}
frame frameVeryLOOOOOOOOOOOOOOOOOOOg as "frame" #aliceblue;line:blue;line.dotted;text:blue {
  file f8
}
hexagon hexagonVeryLOOOOOOOOOOOOOOOOOOOg as "hexagon" #aliceblue;line:blue;line.dotted;text:blue {
file f9
}
node nodeVeryLOOOOOOOOOOOOOOOOOOOg as "node" #aliceblue;line:blue;line.dotted;text:blue {
  file f10
}
package packageVeryLOOOOOOOOOOOOOOOOOOOg as "package" #aliceblue;line:blue;line.dotted;text:blue {
  file f11
}
queue queueVeryLOOOOOOOOOOOOOOOOOOOg as "queue" #aliceblue;line:blue;line.dotted;text:blue {
file f12
}
rectangle rectangleVeryLOOOOOOOOOOOOOOOOOOOg as "rectangle" #aliceblue;line:blue;line.dotted;text:blue {
  file f13
}
stack stackVeryLOOOOOOOOOOOOOOOOOOOg as "stack" #aliceblue;line:blue;line.dotted;text:blue {
file f14
}
storage storageVeryLOOOOOOOOOOOOOOOOOOOg as "storage" #aliceblue;line:blue;line.dotted;text:blue {
  file f15
}
@enduml

uml/reference_08-15-02-1_Global-style-on-componentDiagram

@startuml
<style>
componentDiagram {
BackGroundColor palegreen
LineThickness 1
LineColor red
}
</style>
actor actor
actor/ "actor/"
agent agent
artifact artifact
boundary boundary
card card
circle circle
cloud cloud
collections collections
component component
control control
database database
entity entity
file file
folder folder
frame frame
hexagon hexagon
interface interface
label label
node node
package package
queue queue
rectangle rectangle
stack stack
storage storage
usecase usecase
usecase/ "usecase/"
@enduml

uml/reference_08-15-03-1_Style-for-each-element

@startuml
<style>
actor {
BackGroundColor #f80c12
LineThickness 1
LineColor black
}
agent {
BackGroundColor #f80c12
LineThickness 1
LineColor black
}
artifact {
  BackGroundColor #ee1100
  LineThickness 1
  LineColor black
}
boundary {
BackGroundColor #ee1100
LineThickness 1
LineColor black
}
card {
BackGroundColor #ff3311
LineThickness 1
LineColor black
}
circle {
BackGroundColor #ff3311
LineThickness 1
LineColor black
}
cloud {
  BackGroundColor #ff4422
  LineThickness 1
  LineColor black
}
collections {
BackGroundColor #ff4422
LineThickness 1
LineColor black
}
component {
BackGroundColor #ff6644
LineThickness 1
LineColor black
}
control {
BackGroundColor #ff6644
LineThickness 1
LineColor black
}
database {
  BackGroundColor #ff9933
  LineThickness 1
  LineColor black
}
entity {
  BackGroundColor #feae2d
  LineThickness 1
  LineColor black
}
file {
  BackGroundColor #feae2d
  LineThickness 1
  LineColor black
}
folder {
  BackGroundColor #ccbb33
  LineThickness 1
  LineColor black
}
frame {
  BackGroundColor #d0c310
  LineThickness 1
  LineColor black
}
hexagon {
BackGroundColor #aacc22
LineThickness 1
LineColor black
}
interface {
  BackGroundColor #69d025
  LineThickness 1
  LineColor black
}
label {
BackGroundColor black
LineThickness 1
LineColor black
}
node {
  BackGroundColor #22ccaa
  LineThickness 1
  LineColor black
}
package {
  BackGroundColor #12bdb9
  LineThickness 1
  LineColor black
}
queue {
BackGroundColor #11aabb
LineThickness 1
LineColor black
}
rectangle {
  BackGroundColor #4444dd
  LineThickness 1
  LineColor black
}
stack {
BackGroundColor #3311bb
LineThickness 1
LineColor black
}
storage {
  BackGroundColor #3b0cbd
  LineThickness 1
  LineColor black
}
usecase {
BackGroundColor #442299
LineThickness 1
LineColor black
}
</style>
actor actor
actor/ "actor/"
agent agent
artifact artifact
boundary boundary
card card
circle circle
cloud cloud
collections collections
component component
control control
database database
entity entity
file file
folder folder
frame frame
hexagon hexagon
interface interface
label label
node node
package package
queue queue
rectangle rectangle
stack stack
storage storage
usecase usecase
usecase/ "usecase/"
@enduml

uml/reference_08-15-05-1_Global-style-on-componentDiagram

@startuml
<style>
componentDiagram {
BackGroundColor palegreen
LineThickness 2
LineColor red
}
</style>
artifact artifact {
}
card card {
}
cloud cloud {
}
component component {
}
database database {
}
file file {
}
folder folder {
}
frame frame {
}
hexagon hexagon {
}
node node {
}
package package {
}
queue queue {
}
rectangle rectangle {
}
stack stack {
}
storage storage {
}
@enduml

uml/reference_08-15-06-1_Style-for-each-nested-element

@startuml
<style>
artifact {
  BackGroundColor #ee1100
  LineThickness 1
  LineColor black
}
card {
BackGroundColor #ff3311
LineThickness 1
LineColor black
}
cloud {
  BackGroundColor #ff4422
  LineThickness 1
  LineColor black
}
component {
BackGroundColor #ff6644
LineThickness 1
LineColor black
}
database {
  BackGroundColor #ff9933
  LineThickness 1
  LineColor black
}
file {
  BackGroundColor #feae2d
  LineThickness 1
  LineColor black
}
folder {
  BackGroundColor #ccbb33
  LineThickness 1
  LineColor black
}
frame {
  BackGroundColor #d0c310
  LineThickness 1
  LineColor black
}
hexagon {
BackGroundColor #aacc22
LineThickness 1
LineColor black
}
node {
  BackGroundColor #22ccaa
  LineThickness 1
  LineColor black
}
package {
  BackGroundColor #12bdb9
  LineThickness 1
  LineColor black
}
queue {
BackGroundColor #11aabb
LineThickness 1
LineColor black
}
rectangle {
  BackGroundColor #4444dd
  LineThickness 1
  LineColor black
}
stack {
BackGroundColor #3311bb
LineThickness 1
LineColor black
}
storage {
  BackGroundColor #3b0cbd
  LineThickness 1
  LineColor black
}
</style>
artifact artifact {
}
card card {
}
cloud cloud {
}
component component {
}
database database {
}
file file {
}
folder folder {
}
frame frame {
}
hexagon hexagon {
}
node node {
}
package package {
}
queue queue {
}
rectangle rectangle {
}
stack stack {
}
storage storage {
}
@enduml

uml/reference_08-15-08-1_Global-style-on-componentDiagram

@startuml
<style>
componentDiagram {
BackGroundColor palegreen
LineThickness 1
LineColor red
}
</style>
artifact e1 as "artifact" {
  file f1
}
card e2 as "card" {
file f2
}
cloud e3 as "cloud" {
  file f3
}
component e4 as "component" {
file f4
}
database e5 as "database" {
  file f5
}
file e6 as "file" {
  file f6
}
folder e7 as "folder" {
  file f7
}
frame e8 as "frame" {
  file f8
}
hexagon e9 as "hexagon" {
file f9
}
node e10 as "node" {
  file f10
}
package e11 as "package" {
  file f11
}
queue e12 as "queue" {
file f12
}
rectangle e13 as "rectangle" {
  file f13
}
stack e14 as "stack" {
file f14
}
storage e15 as "storage" {
  file f15
}
@enduml

uml/reference_08-15-09-1_Style-for-each-nested-element

@startuml
<style>
artifact {
  BackGroundColor #ee1100
  LineThickness 1
  LineColor black
}
card {
BackGroundColor #ff3311
LineThickness 1
LineColor black
}
cloud {
  BackGroundColor #ff4422
  LineThickness 1
  LineColor black
}
component {
BackGroundColor #ff6644
LineThickness 1
LineColor black
}
database {
  BackGroundColor #ff9933
  LineThickness 1
  LineColor black
}
file {
  BackGroundColor #feae2d
  LineThickness 1
  LineColor black
}
folder {
  BackGroundColor #ccbb33
  LineThickness 1
  LineColor black
}
frame {
  BackGroundColor #d0c310
  LineThickness 1
  LineColor black
}
hexagon {
BackGroundColor #aacc22
LineThickness 1
LineColor black
}
node {
  BackGroundColor #22ccaa
  LineThickness 1
  LineColor black
}
package {
  BackGroundColor #12bdb9
  LineThickness 1
  LineColor black
}
queue {
BackGroundColor #11aabb
LineThickness 1
LineColor black
}
rectangle {
  BackGroundColor #4444dd
  LineThickness 1
  LineColor black
}
stack {
BackGroundColor #3311bb
LineThickness 1
LineColor black
}
storage {
  BackGroundColor #3b0cbd
  LineThickness 1
  LineColor black
}
</style>
artifact e1 as "artifact" {
  file f1
}
card e2 as "card" {
file f2
}
cloud e3 as "cloud" {
  file f3
}
component e4 as "component" {
file f4
}
database e5 as "database" {
  file f5
}
file e6 as "file" {
  file f6
}
folder e7 as "folder" {
  file f7
}
frame e8 as "frame" {
  file f8
}
hexagon e9 as "hexagon" {
file f9
}
node e10 as "node" {
  file f10
}
package e11 as "package" {
  file f11
}
queue e12 as "queue" {
file f12
}
rectangle e13 as "rectangle" {
  file f13
}
stack e14 as "stack" {
file f14
}
storage e15 as "storage" {
  file f15
}
@enduml

uml/reference_09-01-1_Simple_State

@startuml
[*] --> State1
State1 --> [*]
State1 : this is a string
State1 : this is another string
State1 -> State2
State2 --> [*]
@enduml

uml/reference_09-02-1_Change_state_rendering

@startuml
hide empty description
[*] --> State1
State1 --> [*]
State1 : this is a string
State1 : this is another string
State1 -> State2
State2 --> [*]
@enduml

uml/reference_09-03-01-1_Internal-sub-state

@startuml
scale 350 width
[*] --> NotShooting
state NotShooting {
  [*] --> Idle
  Idle --> Configuring : EvConfig
  Configuring --> Idle : EvConfig
}
state Configuring {
  [*] --> NewValueSelection
  NewValueSelection --> NewValuePreview : EvNewValue
  NewValuePreview --> NewValueSelection : EvNewValueRejected
  NewValuePreview --> NewValueSelection : EvNewValueSaved
  state NewValuePreview {
    State1 -> State2
  }
}
@enduml

uml/reference_09-03-02-1_Sub-state-to-sub-state

@startuml
state A {
  state X {
  }
  state Y {
  }
}
state B {
  state Z {
  }
}
X --> Z
Z --> Y
@enduml

uml/reference_09-04-1_Long_name

@startuml
scale 600 width
[*] -> State1
State1 --> State2 : Succeeded
State1 --> [*] : Aborted
State2 --> State3 : Succeeded
State2 --> [*] : Aborted
state State3 {
  state "Accumulate Enough Data\nLong State Name" as long1
  long1 : Just a test
  [*] --> long1
  long1 --> long1 : New Data
  long1 --> ProcessData : Enough Data
}
State3 --> State3 : Failed
State3 --> [*] : Succeeded / Save Result
State3 --> [*] : Aborted
@enduml

uml/reference_09-05-1_History

@startuml
[*] -> State1
State1 --> State2 : Succeeded
State1 --> [*] : Aborted
State2 --> State3 : Succeeded
State2 --> [*] : Aborted
state State3 {
  state "Accumulate Enough Data" as long1
  long1 : Just a test
  [*] --> long1
  long1 --> long1 : New Data
  long1 --> ProcessData : Enough Data
  State2 --> [H]: Resume
}
State3 --> State2 : Pause
State2 --> State3[H*]: DeepResume
State3 --> State3 : Failed
State3 --> [*] : Succeeded / Save Result
State3 --> [*] : Aborted
@enduml

uml/reference_09-06-1_Fork

@startuml
state fork_state <<fork>>
[*] --> fork_state
fork_state --> State2
fork_state --> State3
state join_state <<join>>
State2 --> join_state
State3 --> join_state
join_state --> State4
State4 --> [*]
@enduml

uml/reference_09-07-01-1_Horizontal-separator---

@startuml
[*] --> Active
state Active {
  [*] -> NumLockOff
  NumLockOff --> NumLockOn : EvNumLockPressed
  NumLockOn --> NumLockOff : EvNumLockPressed
  --
  [*] -> CapsLockOff
  CapsLockOff --> CapsLockOn : EvCapsLockPressed
  CapsLockOn --> CapsLockOff : EvCapsLockPressed
  --
  [*] -> ScrollLockOff
  ScrollLockOff --> ScrollLockOn : EvCapsLockPressed
  ScrollLockOn --> ScrollLockOff : EvCapsLockPressed
}
@enduml

uml/reference_09-07-02-1_Vertical-separator

@startuml
[*] --> Active
state Active {
  [*] -> NumLockOff
  NumLockOff --> NumLockOn : EvNumLockPressed
  NumLockOn --> NumLockOff : EvNumLockPressed
  ||
  [*] -> CapsLockOff
  CapsLockOff --> CapsLockOn : EvCapsLockPressed
  CapsLockOn --> CapsLockOff : EvCapsLockPressed
  ||
  [*] -> ScrollLockOff
  ScrollLockOff --> ScrollLockOn : EvCapsLockPressed
  ScrollLockOn --> ScrollLockOff : EvCapsLockPressed
}
@enduml

uml/reference_09-08-1_Conditional

@startuml
state "Req(Id)" as ReqId <<sdlreceive>>
state "Minor(Id)" as MinorId
state "Major(Id)" as MajorId
state c <<choice>>
Idle --> ReqId
ReqId --> c
c --> MinorId : [Id <= 10]
c --> MajorId : [Id > 10]
@enduml

uml/reference_09-09-1_Stereotypes-full-example

@startuml
state choice1 <<choice>>
state fork1 <<fork>>
state join2 <<join>>
state end3 <<end>>
[*] --> choice1 : from start\nto choice
choice1 --> fork1 : from choice\nto fork
choice1 --> join2 : from choice\nto join
choice1 --> end3 : from choice\nto end
fork1 ---> State1 : from fork\nto state
fork1 --> State2 : from fork\nto state
State2 --> join2 : from state\nto join
State1 --> [*] : from state\nto end
join2 --> [*] : from join\nto end
@enduml

uml/reference_09-10-1_Point

@startuml
state Somp {
  state entry1 <<entryPoint>>
  state entry2 <<entryPoint>>
  state sin
  entry1 --> sin
  entry2 -> sin
  sin -> sin2
  sin2 --> exitA <<exitPoint>>
}
[*] --> entry1
exitA --> Foo
Foo1 -> entry2
@enduml

uml/reference_09-11-1_Pin

@startuml
state Somp {
  state entry1 <<inputPin>>
  state entry2 <<inputPin>>
  state sin
  entry1 --> sin
  entry2 -> sin
  sin -> sin2
  sin2 --> exitA <<outputPin>>
}
[*] --> entry1
exitA --> Foo
Foo1 -> entry2
@enduml

uml/reference_09-12-1_Expansion

@startuml
state Somp {
  state entry1 <<expansionInput>>
  state entry2 <<expansionInput>>
  state sin
  entry1 --> sin
  entry2 -> sin
  sin -> sin2
  sin2 --> exitA <<expansionOutput>>
}
[*] --> entry1
exitA --> Foo
Foo1 -> entry2
@enduml

uml/reference_09-13-1_Arrow_direction

@startuml
[*] -up-> First
First -right-> Second
Second --> Third
Third -left-> Last
@enduml

uml/reference_09-14-1_Change-line-color-and-style

@startuml
State S1
State S2
S1 -[#DD00AA]-> S2
S1 -left[#yellow]-> S3
S1 -up[#red,dashed]-> S4
S1 -right[dotted,#blue]-> S5
X1 -[dashed]-> X2
Z1 -[dotted]-> Z2
Y1 -[#blue,bold]-> Y2
@enduml

uml/reference_09-15-1_Note

@startuml
[*] --> Active
Active --> Inactive
note left of Active : this is a short\nnote
note right of Inactive
  A note can also
  be defined on
  several lines
end note
@enduml

uml/reference_09-15-2_Note

@startuml
state foo
note "This is a floating note" as N1
@enduml

uml/reference_09-16-1_More_in_notes

@startuml
[*] --> NotShooting
state "Not Shooting State" as NotShooting {
  state "Idle mode" as Idle
  state "Configuring mode" as Configuring
  [*] --> Idle
  Idle --> Configuring : EvConfig
  Configuring --> Idle : EvConfig
}
note right of NotShooting : This is a note on a composite state
@enduml

uml/reference_09-17-1_More-in-notes

@startuml
[*] --> NotShooting
state "Not Shooting State" as NotShooting {
  state "Idle mode" as Idle
  state "Configuring mode" as Configuring
  [*] --> Idle
  Idle --> Configuring : EvConfig
  Configuring --> Idle : EvConfig
}
note right of NotShooting : This is a note on a composite state
@enduml

uml/reference_09-18-1_Inline-color

@startuml
state CurrentSite #pink {
  state HardwareSetup #lightblue {
    state Site #brown
    Site -[hidden]-> Controller
    Controller -[hidden]-> Devices
  }
  state PresentationSetup{
    Groups -[hidden]-> PlansAndGraphics
  }
  state Trends #FFFF77
  state Schedule #magenta
  state AlarmSupression
}
@enduml

uml/reference_09-19-1_Skinparam

@startuml
skinparam backgroundColor LightYellow
skinparam state {
  StartColor MediumBlue
  EndColor Red
  BackgroundColor Peru
  BackgroundColor<<Warning>> Olive
  BorderColor Gray
  FontName Impact
}
[*] --> NotShooting
state "Not Shooting State" as NotShooting {
  state "Idle mode" as Idle <<Warning>>
  state "Configuring mode" as Configuring
  [*] --> Idle
  Idle --> Configuring : EvConfig
  Configuring --> Idle : EvConfig
}
NotShooting --> [*]
@enduml

uml/reference_09-20-1_Changing-style

@startuml
<style>
stateDiagram {
BackgroundColor Peru
'LineColor Gray
FontName Impact
FontColor Red
arrow {
FontSize 13
LineColor Blue
  }
}
</style>

[*] --> NotShooting
state "Not Shooting State" as NotShooting {
  state "Idle mode" as Idle <<Warning>>
  state "Configuring mode" as Configuring
  [*] --> Idle
  Idle --> Configuring : EvConfig
  Configuring --> Idle : EvConfig
}

NotShooting --> [*]
@enduml

uml/reference_09-21-1_Change-state-color-and-style

@startuml
state FooGradient #red-green ##00FFFF
state FooDashed #red|green ##[dashed]blue {
}
state FooDotted ##[dotted]blue {
}
state FooBold ##[bold] {
}
state Foo1 ##[dotted]green {
  state inner1 ##[dotted]yellow
}
state out ##[dotted]gold
state Foo2 ##[bold]green {
  state inner2 ##[dotted]yellow
}
inner1 -> inner2
out -> inner2
@enduml

uml/reference_09-21-2_Change-state-color-and-style

@startuml
state FooGradient #red-green;line:00FFFF
state FooDashed #red|green;line.dashed;line:blue {
}
state FooDotted #line.dotted;line:blue {
}
state FooBold #line.bold {
}
state Foo1 #line.dotted;line:green {
  state inner1 #line.dotted;line:yellow
}
state out #line.dotted;line:gold
state Foo2 #line.bold;line:green {
  state inner2 #line.dotted;line:yellow
}
inner1 -> inner2
out -> inner2
@enduml

uml/reference_09-21-3_Change-state-color-and-style

@startuml
state s1 : s1 description
state s2 #pink;line:red;line.bold;text:red : s2 description
state s3 #palegreen;line:green;line.dashed;text:green : s3 description
state s4 #aliceblue;line:blue;line.dotted;text:blue : s4 description
@enduml

uml/reference_10-01-1_Declaring-participant

@startuml
robust "Web Browser" as WB
concise "Web User" as WU
@0
WU is Idle
WB is Idle
@100
WU is Waiting
WB is Processing
@300
WB is Waiting
@enduml

uml/reference_10-02-1_Binary-and-Clock

@startuml
clock clk with period 1
binary "Enable" as EN
@0
EN is low
@5
EN is high
@10
EN is low
@enduml

uml/reference_10-03-1_Adding-message

@startuml
robust "Web Browser" as WB
concise "Web User" as WU
@0
WU is Idle
WB is Idle
@100
WU -> WB : URL
WU is Waiting
WB is Processing
@300
WB is Waiting
@enduml

uml/reference_10-04-1_Relative-time

@startuml
robust "DNS Resolver" as DNS
robust "Web Browser" as WB
concise "Web User" as WU

@0
WU is Idle
WB is Idle
DNS is Idle

@+100
WU -> WB : URL
WU is Waiting
WB is Processing

@+200
WB is Waiting
WB -> DNS@+50 : Resolve URL

@+100
DNS is Processing

@+300
DNS is Idle
@enduml

uml/reference_10-05-1_Anchor-Points

@startuml
clock clk with period 1
binary "enable" as EN
concise "dataBus" as db
@0 as :start
@5 as :en_high
@10 as :en_low
@:start
EN is low
db is "0x0000"
@:en_high
EN is high
@:en_low
EN is low
@:en_high-2
db is "0xf23a"
@:en_high+6
db is "0x0000"
@enduml

uml/reference_10-06-1_Participant-oriented

@startuml
robust "Web Browser" as WB
concise "Web User" as WU
@WB
0 is idle
+200 is Proc.
+100 is Waiting
@WU
0 is Waiting
+500 is ok
@enduml

uml/reference_10-07-1_Setting-scale

@startuml
concise "Web User" as WU
scale 100 as 50 pixels
@WU
0 is Waiting
+500 is ok
@enduml

uml/reference_10-08-1_Initial-state

@startuml
robust "Web Browser" as WB
concise "Web User" as WU
WB is Initializing
WU is Absent
@WB
0 is idle
+200 is Processing
+100 is Waiting
@WU
0 is Waiting
+500 is ok
@enduml

uml/reference_10-09-1_Intricated-state

@startuml
robust "Signal1" as S1
robust "Signal2" as S2
S1 has 0,1,2,hello
S2 has 0,1,2
@0
S1 is 0
S2 is 0
@100
S1 is {0,1} #SlateGrey
S2 is {0,1}
@200
S1 is 1
S2 is 0
@300
S1 is hello
S2 is {0,2}
@enduml

uml/reference_10-10-1_Hidden-state

@startuml
concise "Web User" as WU
@0
WU is {-}
@100
WU is A1
@200
WU is {-}
@300
WU is {hidden}
@400
WU is A3
@500
WU is {-}
@enduml

uml/reference_10-11-1_Hide-time-axis

@startuml
hide time-axis
concise "Web User" as WU
WU is Absent
@WU
0 is Waiting
+500 is ok
@enduml

uml/reference_10-12-1_Using-Time-and-Date

@startuml
robust "Web Browser" as WB
concise "Web User" as WU
@2019/07/02
WU is Idle
WB is Idle
@2019/07/04
WU is Waiting : some note
WB is Processing : some other note
@2019/07/05
WB is Waiting
@enduml

uml/reference_10-12-2_Using-Time-and-Date

@startuml
robust "Web Browser" as WB
concise "Web User" as WU
@1:15:00
WU is Idle
WB is Idle
@1:16:30
WU is Waiting : some note
WB is Processing : some other note
@1:17:30
WB is Waiting
@enduml

uml/reference_10-13-1_Adding-constraint

@startuml
robust "Web Browser" as WB
concise "Web User" as WU
WB is Initializing
WU is Absent
@WB
0 is idle
+200 is Processing
+100 is Waiting
WB@0 <-> @50 : {50 ms lag}
@WU
0 is Waiting
+500 is ok
@200 <-> @+150 : {150 ms}
@enduml

uml/reference_10-14-1_Highlighted-period

@startuml
robust "Web Browser" as WB
concise "Web User" as WU
@0
WU is Idle
WB is Idle
@100
WU -> WB : URL
WU is Waiting #LightCyan;line:Aqua
@200
WB is Proc.
@300
WU -> WB@350 : URL2
WB is Waiting
@+200
WU is ok
@+200
WB is Idle
highlight 200 to 450 #Gold;line:DimGrey : This is my caption
@enduml

uml/reference_10-15-1_Adding-texts

@startuml
Title this is my title
header: some header
footer: some footer
legend
  Some legend
end legend
caption some caption
robust "Web Browser" as WB
concise "Web User" as WU
@0
WU is Idle
WB is Idle
@100
WU is Waiting
WB is Processing
@300
WB is Waiting
@enduml

uml/reference_10-16-1_Complete-example

@startuml
concise "Client" as Client
concise "Server" as Server
concise "Response freshness" as Cache
Server is idle
Client is idle
@Client
0 is send
Client -> Server@+25 : GET
+25 is await
+75 is recv
+25 is idle
+25 is send
Client -> Server@+25 : GET\nIf-Modified-Since: 150
+25 is await
+50 is recv
+25 is idle
@100 <-> @275 : no need to re-request from server
@Server
25 is recv
+25 is work
+25 is send
Server -> Client@+25 : 200 OK\nExpires: 275
+25 is idle
+75 is recv
+25 is send
Server -> Client@+25 : 304 Not Modified
+25 is idle
@Cache
75 is fresh
+200 is stale
@enduml

uml/reference_10-17-1_Digital-Example

@startuml
scale 5 as 150 pixels
clock clk with period 1
binary "enable" as en
binary "R/W" as rw
binary "data Valid" as dv
concise "dataBus" as db
concise "address bus" as addr
@6 as :write_beg
@10 as :write_end
@15 as :read_beg
@19 as :read_end
@0
en is low
db is "0x0"
addr is "0x03f"
rw is low
dv is 0
@:write_beg-3
en is high
@:write_beg-2
db is "0xDEADBEEF"
@:write_beg-1
dv is 1
@:write_beg
rw is high
@:write_end
rw is low
dv is low
@:write_end+1
rw is low
db is "0x0"
addr is "0x23"
@12
dv is high
@13
db is "0xFFFF"
@20
en is low
dv is low
@21
db is "0x0"
highlight :write_beg to :write_end #Gold:Write
highlight :read_beg to :read_end #lightBlue:Read
db@:write_beg-1 <-> @:write_end : setup time
db@:write_beg-1 -> addr@:write_end+1 : hold
@enduml

uml/reference_10-18-1_Adding-color

@startuml
concise "LR" as LR
concise "ST" as ST
LR is AtPlace #palegreen
ST is AtLoad #gray
@LR
0 is Lowering
100 is Lowered #pink
350 is Releasing
@ST
200 is Moving
@enduml

uml/reference_11-01-01-1_Complex-example

@startjson
{
  "firstName": "John",
  "lastName": "Smith",
  "isAlive": true,
  "age": 27,
  "address": {
    "streetAddress": "21 2nd Street",
    "city": "New York",
    "state": "NY",
    "postalCode": "10021-3100"
  },
  "phoneNumbers": [
    {
      "type": "home",
      "number": "212 555-1234"
    },
    {
      "type": "office",
      "number": "646 555-4567"
    }
  ],
  "children": [],
  "spouse": null
}
@endjson

uml/reference_11-01-1_Display-JSON-Data

@startjson
{
  "fruit":"Apple",
  "size":"Large",
  "color":"Red"
}
@endjson

uml/reference_11-02-1_Highlight-parts

@startjson
#highlight "lastName"
#highlight "address" / "city"
#highlight "phoneNumbers" / "0" / "number"
{
  "firstName": "John",
  "lastName": "Smith",
  "isAlive": true,
  "age": 28,
  "address": {
    "streetAddress": "21 2nd Street",
    "city": "New York",
    "state": "NY",
    "postalCode": "10021-3100"
  },
  "phoneNumbers": [
    {
      "type": "home",
      "number": "212 555-1234"
    },
    {
      "type": "office",
      "number": "646 555-4567"
    }
  ],
  "children": [],
  "spouse": null
}
@endjson

uml/reference_11-03-01-1_Synthesis-of-all-JSON-basic-element

@startjson
{
"null": null,
"true": true,
"false": false,
"JSON_Number": [-1, -1.1, "<color:green>TBC"],
"JSON_String": "a\nb\rc\td <color:green>TBC...",
"JSON_Object": {
  "{}": {},
  "k_int": 123,
  "k_str": "abc",
  "k_obj": {"k": "v"}
},
"JSON_Array" : [
  [],
  [true, false],
  [-1, 1],
  ["a", "b", "c"],
  ["mix", null, true, 1, {"k": "v"}]
]
}
@endjson

uml/reference_11-04-01-1_Array-type

@startjson
{
"Numeric": [1, 2, 3],
"String ": ["v1a", "v2b", "v3c"],
"Boolean": [true, false, true]
}
@endjson

uml/reference_11-04-03-1_Number-array

@startjson
[1, 2, 3]
@endjson

uml/reference_11-04-04-1_String-array

@startjson
["1a", "2b", "3c"]
@endjson

uml/reference_11-04-05-1_Boolean-array

@startjson
[true, false, true]
@endjson

uml/reference_11-05-1_JSON-numbers

@startjson
{
"DecimalNumber": [-1, 0, 1],
"DecimalNumber . Digits": [-1.1, 0.1, 1.1],
"DecimalNumber ExponentPart": [1E5]
}
@endjson

uml/reference_11-06-01-1_JSON-Unicode

@startjson
{
"<color:blue><b>code": "<color:blue><b>value",
"a\\u005Cb":           "a\u005Cb",
"\\uD83D\\uDE10":      "\uD83D\uDE10",
"😐":                  "😐"
}
@endjson

uml/reference_11-06-02-1_JSON-two-character-escape-sequence

@startjson
{
"**legend**: character name":              ["**two-character escape sequence**", "example (between 'a' and 'b')"],
"quotation mark character (U+0022)":       ["\\\"", "a\"b"],
"reverse solidus character (U+005C)":      ["\\\\", "a\\b"],
"solidus character (U+002F)":              ["\\\/", "a\/b"],
"backspace character (U+0008)":            ["\\b", "a\bb"],
"form feed character (U+000C)":            ["\\f", "a\fb"],
"line feed character (U+000A)":            ["\\n", "a\nb"],
"carriage return character (U+000D)":      ["\\r", "a\rb"],
"character tabulation character (U+0009)": ["\\t", "a\tb"]
}
@endjson

uml/reference_11-06-02-2_JSON-two-character-escape-sequence

@startjson
[
"\\\\",
"\\n",
"\\r",
"\\t"
]
@endjson

uml/reference_11-07-1_Minimal-JSON-examples

@startjson
"Hello world!"
@endjson

uml/reference_11-07-2_Minimal-JSON-examples

@startjson
42
@endjson

uml/reference_11-07-3_Minimal-JSON-examples

@startjson
true
@endjson

uml/reference_11-08-01-1_Without-style

@startjson
#highlight "1" / "hr"
[
  {
   "name": "Mark McGwire",
   "hr": 65,
   "avg": 0.278
  },
  {
    "name": "Sammy Sosa",
    "hr": 63,
    "avg": 0.288
  }
]
@endjson

uml/reference_11-08-02-1_With-style

@startjson
<style>
jsonDiagram {
  node {
    BackGroundColor Khaki
    LineColor lightblue
    FontName Helvetica
    FontColor red
    FontSize 18
    FontStyle bold
    RoundCorner 0
    LineThickness 2
    LineStyle 10;5
    separator {
      LineThickness 0.5
      LineColor black
      LineStyle 1;5
    }
  }
  arrow {
    BackGroundColor lightblue
    LineColor green
    LineThickness 2
    LineStyle 2;5
  }
  highlight {
    BackGroundColor red
    FontColor white
    FontStyle italic
  }
}
</style>
#highlight "1" / "hr"
[
  {
    "name": "Mark McGwire",
    "hr": 65,
    "avg": 0.278
  },
  {
    "name": "Sammy Sosa",
    "hr": 63,
    "avg": 0.288
  }
]
@endjson

uml/reference_12-01-1_Complex-example

@startyaml
doe: "a deer, a female deer"
ray: "a drop of golden sun"
pi: 3.14159
xmas: true
french-hens: 3
calling-birds:
  - huey
  - dewey
  - louie
  - fred
xmas-fifth-day:
  calling-birds: four
  french-hens: 3
  golden-rings: 5
  partridges:
    count: 1
    location: "a pear tree"
  turtle-doves: two
@endyaml

uml/reference_12-02-1_Specific-key-with-symbols-or-unicode

@startyaml
@fruit: Apple
$size: Large
&color: Red
❤: Heart
‰: Per mille
@endyaml


uml/reference_12-03-01-1_Normal-style

@startyaml
#highlight "french-hens"
#highlight "xmas-fifth-day" / "partridges"

doe: "a deer, a female deer"
ray: "a drop of golden sun"
pi: 3.14159
xmas: true
french-hens: 3
calling-birds:
  - huey
  - dewey
  - louie
  - fred
xmas-fifth-day:
  calling-birds: four
  french-hens: 3
  golden-rings: 5
  partridges:
    count: 1
    location: "a pear tree"
  turtle-doves: two
@endyaml


uml/reference_12-03-02-1_Customised-style

@startyaml
<style>
yamlDiagram {
    highlight {
      BackGroundColor red
      FontColor white
      FontStyle italic
    }
}
</style>
#highlight "french-hens"
#highlight "xmas-fifth-day" / "partridges"

doe: "a deer, a female deer"
ray: "a drop of golden sun"
pi: 3.14159
xmas: true
french-hens: 3
calling-birds:
  - huey
  - dewey
  - louie
  - fred
xmas-fifth-day:
  calling-birds: four
  french-hens: 3
  golden-rings: 5
  partridges:
    count: 1
    location: "a pear tree"
  turtle-doves: two
@endyaml


uml/reference_12-04-01-1_Without-style

@startyaml
  -
    name: Mark McGwire
    hr:   65
    avg:  0.278
  -
    name: Sammy Sosa
    hr:   63
    avg:  0.288
@endyaml


uml/reference_12-04-02-1_With-style

@startyaml
<style>
yamlDiagram {
  node {
    BackGroundColor lightblue
    LineColor lightblue
    FontName Helvetica
    FontColor red
    FontSize 18
    FontStyle bold
    BackGroundColor Khaki
    RoundCorner 0
    LineThickness 2
    LineStyle 10;5
    separator {
      LineThickness 0.5
      LineColor black
      LineStyle 1;5
    }
  }
  arrow {
    BackGroundColor lightblue
    LineColor green
    LineThickness 2
    LineStyle 2;5
  }
}
</style>
  -
    name: Mark McGwire
    hr:   65
    avg:  0.278
  -
    name: Sammy Sosa
    hr:   63
    avg:  0.288
@endyaml


uml/reference_12-1_Display-YAML-Data

@startyaml
fruit: Apple
size: Large
color: Red
@endyaml

uml/reference_13-01-1_Simple-diagram

@startuml
nwdiag {
network dmz {
address = "210.x.x.x/24"

web01 [address = "210.x.x.1"];
web02 [address = "210.x.x.2"];
  }
  network internal {
  address = "172.x.x.x/24";

  web01 [address = "172.x.x.1"];
  web02 [address = "172.x.x.2"];
  db01;
  db02;
}
}
@enduml


uml/reference_13-02-1_Define-multiple-addresses

@startuml
nwdiag {
network dmz {
address = "210.x.x.x/24"

// set multiple addresses (using comma)
web01 [address = "210.x.x.1, 210.x.x.20"];
web02 [address = "210.x.x.2"];
  }
  network internal {
  address = "172.x.x.x/24";

  web01 [address = "172.x.x.1"];
  web02 [address = "172.x.x.2"];
  db01;
  db02;
}
}
@enduml


uml/reference_13-03-01-1_Define-group-inside-network-definitions

@startuml
nwdiag {
network Sample_front {
address = "192.168.10.0/24";

// define group
group web {
  web01 [address = ".1"];
  web02 [address = ".2"];
}
  }
  network Sample_back {
  address = "192.168.20.0/24";
  web01 [address = ".1"];
  web02 [address = ".2"];
  db01 [address = ".101"];
  db02 [address = ".102"];

  // define network using defined nodes
  group db {
    db01;
    db02;
  }
}
}
@enduml


uml/reference_13-03-02-1_Define-group-outside-of-network-definitions

@startuml
nwdiag {
// define group outside of network definitions
group {
  color = "#FFAAAA";

  web01;
  web02;
  db01;
}

network dmz {
web01;
web02;
  }
  network internal {
  web01;
  web02;
  db01;
  db02;
}
}
@enduml


uml/reference_13-03-04-1_Example-with-2-group

@startuml
nwdiag {
group {
  color = "#FFaaaa";
  web01;
  db01;
}
group {
  color = "#aaaaFF";
  web02;
  db02;
}
network dmz {
address = "210.x.x.x/24"

web01 [address = "210.x.x.1"];
web02 [address = "210.x.x.2"];
  }
  network internal {
  address = "172.x.x.x/24";

  web01 [address = "172.x.x.1"];
  web02 [address = "172.x.x.2"];
  db01 ;
  db02 ;
}
}
@enduml


uml/reference_13-03-05-1_Example-with-3-group

@startuml
nwdiag {
group {
  color = "#FFaaaa";
  web01;
  db01;
}
group {
  color = "#aaFFaa";
  web02;
  db02;
}
group {
  color = "#aaaaFF";
  web03;
  db03;
}

network dmz {
web01;
web02;
web03;
  }
  network internal {
  web01;
  db01 ;
  web02;
  db02 ;
  web03;
  db03;
}
}
@enduml


uml/reference_13-04-01-1_Extended-Syntax-Network

@startuml
nwdiag {
network Sample_front {
address = "192.168.10.0/24"
color = "red"

// define group
group web {
  web01 [address = ".1, .2", shape = "node"]
  web02 [address = ".2, .3"]
}
  }
  network Sample_back {
  address = "192.168.20.0/24"
  color = "palegreen"
  web01 [address = ".1"]
  web02 [address = ".2"]
  db01 [address = ".101", shape = database ]
  db02 [address = ".102"]

  // define network using defined nodes
  group db {
    db01;
    db02;
  }
}
}
@enduml


uml/reference_13-04-02-1_Extended-Syntax-Group

@startuml
nwdiag {
group {
  color = "#CCFFCC";
  description = "Long group description";

  web01;
  web02;
  db01;
}

network dmz {
web01;
web02;
  }
  network internal {
  web01;
  web02;
  db01 [address = ".101", shape = database];
}
}
@enduml


uml/reference_13-05-1_Using-Sprites

@startuml
!include <office/Servers/application_server>
!include <office/Servers/database_server>

nwdiag {
network dmz {
address = "210.x.x.x/24"

// set multiple addresses (using comma)
web01 [address = "210.x.x.1, 210.x.x.20",  description = "<$application_server>\n web01"]
web02 [address = "210.x.x.2",  description = "<$application_server>\n web02"];
  }
  network internal {
  address = "172.x.x.x/24";

  web01 [address = "172.x.x.1"];
  web02 [address = "172.x.x.2"];
  db01 [address = "172.x.x.100",  description = "<$database_server>\n db01"];
  db02 [address = "172.x.x.101",  description = "<$database_server>\n db02"];
}
}
@enduml


uml/reference_13-06-1_Using-OpenIconic

@startuml

nwdiag {
group nightly {
  color = "#FFAAAA";
  description = "<&clock> Restarted nightly <&clock>";
  web02;
  db01;
}
network dmz {
address = "210.x.x.x/24"

user [description = "<&person*4.5>\n user1"];
// set multiple addresses (using comma)
web01 [address = "210.x.x.1, 210.x.x.20",  description = "<&cog*4>\nweb01"]
web02 [address = "210.x.x.2",  description = "<&cog*4>\nweb02"];

  }
  network internal {
  address = "172.x.x.x/24";

  web01 [address = "172.x.x.1"];
  web02 [address = "172.x.x.2"];
  db01 [address = "172.x.x.100",  description = "<&spreadsheet*4>\n db01"];
  db02 [address = "172.x.x.101",  description = "<&spreadsheet*4>\n db02"];
  ptr  [address = "172.x.x.110",  description = "<&print*4>\n ptr01"];
}
}
@enduml


uml/reference_13-07-1_Same-nodes-on-more-than-two-networks

@startuml
nwdiag {
// define group at outside network definitions
group {
  color = "#7777FF";

  web01;
  web02;
  db01;
}

network dmz {
color = "pink"

web01;
web02;
  }

  network internal {
  web01;
  web02;
  db01 [shape = database ];
}

network internal2 {
color = "LightBlue";

web01;
web02;
db01;
  }

}
@enduml


uml/reference_13-08-1_Peer-networks

@startuml
nwdiag {
inet [shape = cloud];
inet -- router;

network {
router;
web01;
web02;
  }
}
@enduml


uml/reference_13-09-01-1_Without-group

@startuml
nwdiag {
internet [ shape = cloud];
internet -- router;

network proxy {
router;
app;
    }
    network default {
    app;
    db;
  }
}
@enduml


uml/reference_13-09-02-1_Group-on-first

@startuml
nwdiag {
internet [ shape = cloud];
internet -- router;

group {
  color = "pink";
  app;
  db;
}

network proxy {
router;
app;
  }

  network default {
  app;
  db;
}
}
@enduml


uml/reference_13-09-03-1_Group-on-second

@startuml
nwdiag {
internet [ shape = cloud];
internet -- router;

network proxy {
router;
app;
  }

  group {
    color = "pink";
    app;
    db;
  }

  network default {
  app;
  db;
}
}
@enduml


uml/reference_13-09-04-1_Group-on-third

@startuml
nwdiag {
internet [ shape = cloud];
internet -- router;

network proxy {
router;
app;
  }
  network default {
  app;
  db;
}
group {
  color = "pink";
  app;
  db;
}
}
@enduml


uml/reference_13-10-1_Add-title-caption-header-footer-or-legend-on-network-diagram

@startuml

header some header

footer some footer

title My title

nwdiag {
network inet {
web01 [shape = cloud]
  }
}

legend
  The legend
end legend

caption This is caption
@enduml


uml/reference_13-11-1_Change-width-of-the-networks

@startuml
nwdiag {
network NETWORK_BASE {
dev_A [address = "dev_A" ]
dev_B [address = "dev_B" ]
  }
  network IntNET1 {
  dev_B [address = "dev_B1" ]
  dev_M [address = "dev_M1" ]
}
network IntNET2 {
dev_B [address = "dev_B2" ]
dev_M [address = "dev_M2" ]
 }
}
@enduml


uml/reference_13-11-2_Change-width-of-the-networks

@startuml
nwdiag {
network NETWORK_BASE {
width = full
dev_A   [address = "dev_A" ]
dev_B [address = "dev_B" ]
  }
  network IntNET1 {
  width = full
  dev_B [address = "dev_B1" ]
  dev_M [address = "dev_M1" ]
}
network IntNET2 {
width = full
dev_B [address = "dev_B2" ]
dev_M [address = "dev_M2" ]
 }
}
@enduml


uml/reference_13-11-3_Change-width-of-the-networks

@startuml
nwdiag {
network NETWORK_BASE {
width = full
dev_A   [address = "dev_A" ]
dev_B [address = "dev_B" ]
  }
  network IntNET1 {
  width = full
  dev_B [address = "dev_B1" ]
  dev_M [address = "dev_M1" ]
}
network IntNET2 {
dev_B [address = "dev_B2" ]
dev_M [address = "dev_M2" ]
 }
}
@enduml


uml/reference_13-12-1_Other-internal-networks

@startuml
nwdiag {
network LAN1 {
a [address = "a1"];
  }
  network LAN2 {
  a [address = "a2"];
  switch;
}
switch -- equip;
equip -- printer;
}
@enduml


uml/reference_13-12-2_Other-internal-networks

@startuml
nwdiag {
network LAN1 {
a [address = "a1"];
  }
  network LAN2 {
  a [address = "a2"];
  switch [address = "s2"];
}
switch -- equip;
equip [address = "e3"];
equip -- printer;
printer [address = "USB"];
}
@enduml


uml/reference_14-01-1_Basic-widgets

@startsalt
{
  Just plain text
  [This is my button]
  ()  Unchecked radio
  (X) Checked radio
  []  Unchecked box
  [X] Checked box
  "Enter text here   "
  ^This is a droplist^
}
@endsalt


uml/reference_14-02-1_Using-grid

@startsalt
{
  Login    | "MyName   "
  Password | "****     "
  [Cancel] | [  OK   ]
}
@endsalt


uml/reference_14-02-2_Using-grid

@startsalt
{+
  Login    | "MyName   "
  Password | "****     "
  [Cancel] | [  OK   ]
}
@endsalt


uml/reference_14-03-1_Group-box

@startsalt
{^"My group box"
  Login    | "MyName   "
  Password | "****     "
  [Cancel] | [  OK   ]
}
@endsalt


uml/reference_14-04-1_Using-separator

@startsalt
{
  Text1
  ..
  "Some field"
  ==
  Note on usage
  ~~
  Another text
  --
  [Ok]
}
@endsalt


uml/reference_14-05-1_Tree-widget

@startsalt
{
{T
 + World
 ++ America
 +++ Canada
 +++ USA
 ++++ New York
 ++++ Boston
 +++ Mexico
 ++ Europe
 +++ Italy
 +++ Germany
 ++++ Berlin
 ++ Africa
}
}
@endsalt


uml/reference_14-06-1_Tree-table

@startsalt
{
{T
+Region        | Population    | Age
+ World        | 7.13 billion  | 30
++ America     | 964 million   | 30
+++ Canada     | 35 million    | 30
+++ USA        | 319 million   | 30
++++ NYC       | 8 million     | 30
++++ Boston    | 617 thousand  | 30
+++ Mexico     | 117 million   | 30
++ Europe      | 601 million   | 30
+++ Italy      | 61 million    | 30
+++ Germany    | 82 million    | 30
++++ Berlin    | 3 million     | 30
++ Africa      | 1 billion     | 30
}
}
@endsalt


uml/reference_14-06-2_Tree-table

@startsalt
{
..
== with T!
{T!
+Region        | Population    | Age
+ World        | 7.13 billion  | 30
++ America     | 964 million   | 30
}
..
== with T-
{T-
+Region        | Population    | Age
+ World        | 7.13 billion  | 30
++ America     | 964 million   | 30
}
..
== with T+
{T+
+Region        | Population    | Age
+ World        | 7.13 billion  | 30
++ America     | 964 million   | 30
}
..
== with T#
{T#
+Region        | Population    | Age
+ World        | 7.13 billion  | 30
++ America     | 964 million   | 30
}
..
}
@endsalt


uml/reference_14-07-1_Enclosing-brackets

@startsalt
{
Name         | "                 "
Modifiers:   | { (X) public | () default | () private | () protected
                [] abstract | [] final   | [] static }
Superclass:  | { "java.lang.Object " | [Browse...] }
}
@endsalt


uml/reference_14-08-1_Adding-tabs

@startsalt
{+
{/ <b>General | Fullscreen | Behavior | Saving }
{
{ Open image in: | ^Smart Mode^ }
[X] Smooth images when zoomed
[X] Confirm image deletion
[ ] Show hidden images
}
[Close]
}
@endsalt


uml/reference_14-08-2_Adding-tabs

@startsalt
{+
{/ <b>General
Fullscreen
Behavior
Saving } |
{
{ Open image in: | ^Smart Mode^ }
[X] Smooth images when zoomed
[X] Confirm image deletion
[ ] Show hidden images
[Close]
}
}
@endsalt


uml/reference_14-09-1_Using-menu

@startsalt
{+
{* File | Edit | Source | Refactor }
{/ General | Fullscreen | Behavior | Saving }
{
{ Open image in: | ^Smart Mode^ }
[X] Smooth images when zoomed
[X] Confirm image deletion
[ ] Show hidden images
}
[Close]
}
@endsalt


uml/reference_14-09-2_Using-menu

@startsalt
{+
{* File | Edit | Source | Refactor
 Refactor | New | Open File | - | Close | Close All }
{/ General | Fullscreen | Behavior | Saving }
{
{ Open image in: | ^Smart Mode^ }
[X] Smooth images when zoomed
[X] Confirm image deletion
[ ] Show hidden images
}
[Close]
}
@endsalt


uml/reference_14-09-3_Using-menu

@startsalt
{+
{* File | Edit | Source | Refactor }
{/ General | Fullscreen | Behavior | Saving }
{
{ Open image in: | ^Smart Mode^^Normal Mode^ }
[X] Smooth images when zoomed
[X] Confirm image deletion
[ ] Show hidden images
}
[Close]
}
@endsalt


uml/reference_14-10-1_Advanced-table

@startsalt
{#
. | Column 2 | Column 3
Row header 1 | value 1 | value 2
Row header 2 | A long cell | *
}
@endsalt


uml/reference_14-11-1_Scroll-Bars

@startsalt
{S
Message
.
.
.
.
}
@endsalt


uml/reference_14-11-2_Scroll-Bars

@startsalt
{SI
Message
.
.
.
.
}
@endsalt


uml/reference_14-11-3_Scroll-Bars

@startsalt
{S-
Message
.
.
.
.
}
@endsalt


uml/reference_14-12-1_Coloros

@startsalt
{
  <color:Blue>Just plain text
  [This is my default button]
  [<color:green>This is my green button]
  [<color:#9a9a9a>This is my disabled button]
  []  <color:red>Unchecked box
  [X] <color:green>Checked box
  "Enter text here   "
  ^This is a droplist^
  ^<color:#9a9a9a>This is a disabled droplist^
  ^<color:red>This is a red droplist^
}
@endsalt


uml/reference_14-13-1_Pseudo-sprite

@startsalt
 {
 [X] checkbox|[] checkbox
 () radio | (X) radio
 This is a text|[This is my button]|This is another text
 "A field"|"Another long Field"|[A button]
 <<folder
 ............
 .XXXXX......
 .X...X......
 .XXXXXXXXXX.
 .X........X.
 .X........X.
 .X........X.
 .X........X.
 .XXXXXXXXXX.
 ............
 >>|<color:blue>other folder|<<folder>>
^Droplist^
}
@endsalt


uml/reference_14-14-1_OpenIconic

@startsalt
{
  Login<&person> | "MyName   "
  Password<&key> | "****     "
  [Cancel <&circle-x>] | [OK <&account-login>]
}
@endsalt


uml/reference_14-14-2_OpenIconic

@startuml
listopeniconic
@enduml


uml/reference_14-15-1_Include-Salt-on-activity-diagram

@startuml
(*) --> "
{{
salt
{+
<b>an example
choose one option
()one
()two
[ok]
}
}}
" as choose

choose -right-> "
{{
salt
{+
<b>please wait
operation in progress
<&clock>
[cancel]
}
}}
" as wait
wait -right-> "
{{
salt
{+
<b>success
congratulations!
[ok]
}
}}
" as success

wait -down-> "
{{
salt
{+
<b>error
failed, sorry
[ok]
}
}}
"
@enduml


uml/reference_14-15-2_Include-Salt-on-activity-diagram

@startuml
!unquoted procedure SALT($x)
"{{
salt
%invoke_procedure("_"+$x)
}}" as $x
!endprocedure

!procedure _choose()
{+
<b>an example
choose one option
()one
()two
[ok]
}
!endprocedure

!procedure _wait()
{+
<b>please wait
operation in progress
<&clock>
[cancel]
}
!endprocedure

!procedure _success()
{+
<b>success
congratulations!
[ok]
}
!endprocedure

!procedure _error()
{+
<b>error
failed, sorry
[ok]
}
!endprocedure

(*) --> SALT(choose)
-right-> SALT(wait)
wait -right-> SALT(success)
wait -down-> SALT(error)
@enduml


uml/reference_14-16-1_Include-salt-on-while-condition-of-activity-diagram

@startuml
start
while (\n{{\nsalt\n{+\nPassword | "****     "\n[Cancel] | [  OK   ]}\n}}\n) is (Incorrect)
  :log attempt;
  :attempt_count++;
  if (attempt_count > 4) then (yes)
    :increase delay timer;
    :wait for timer to expire;
  else (no)
  endif
endwhile (correct)
:log request;
:disable service;
@enduml


uml/reference_15-01-1_Archimate-keyword

@startuml
archimate #Technology "VPN Server" as vpnServerA <<technology-device>>

rectangle GO #lightgreen
rectangle STOP #red
rectangle WAIT #orange
@enduml


uml/reference_15-02-1_Defining-Junctions

@startuml
!define Junction_Or circle #black
!define Junction_And circle #whitesmoke

Junction_And JunctionAnd
Junction_Or JunctionOr

archimate #Technology "VPN Server" as vpnServerA <<technology-device>>

rectangle GO #lightgreen
rectangle STOP #red
rectangle WAIT #orange
GO -up-> JunctionOr
STOP -up-> JunctionOr
STOP -down-> JunctionAnd
WAIT -down-> JunctionAnd
@enduml


uml/reference_15-03-1_Example-1

@startuml
skinparam rectangle<<behavior>> {
  roundCorner 25
}
sprite $bProcess jar:archimate/business-process
sprite $aService jar:archimate/application-service
sprite $aComponent jar:archimate/application-component

rectangle "Handle claim"  as HC <<$bProcess>><<behavior>> #Business
rectangle "Capture Information"  as CI <<$bProcess>><<behavior>> #Business
rectangle "Notify\nAdditional Stakeholders" as NAS <<$bProcess>><<behavior>> #Business
rectangle "Validate" as V <<$bProcess>><<behavior>> #Business
rectangle "Investigate" as I <<$bProcess>><<behavior>> #Business
rectangle "Pay" as P <<$bProcess>><<behavior>> #Business

HC *-down- CI
HC *-down- NAS
HC *-down- V
HC *-down- I
HC *-down- P

CI -right->> NAS
NAS -right->> V
V -right->> I
I -right->> P

rectangle "Scanning" as scanning <<$aService>><<behavior>> #Application
rectangle "Customer admnistration" as customerAdministration <<$aService>><<behavior>> #Application
rectangle "Claims admnistration" as claimsAdministration <<$aService>><<behavior>> #Application
rectangle Printing <<$aService>><<behavior>> #Application
rectangle Payment <<$aService>><<behavior>> #Application

scanning -up-> CI
customerAdministration  -up-> CI
claimsAdministration -up-> NAS
claimsAdministration -up-> V
claimsAdministration -up-> I
Payment -up-> P

Printing -up-> V
Printing -up-> P

rectangle "Document\nManagement\nSystem" as DMS <<$aComponent>> #Application
rectangle "General\nCRM\nSystem" as CRM <<$aComponent>>  #Application
rectangle "Home & Away\nPolicy\nAdministration" as HAPA <<$aComponent>> #Application
rectangle "Home & Away\nFinancial\nAdministration" as HFPA <<$aComponent>>  #Application

DMS .up.|> scanning
DMS .up.|> Printing
CRM .up.|> customerAdministration
HAPA .up.|> claimsAdministration
HFPA .up.|> Payment

legend left
  Example from the "Archisurance case study" (OpenGroup).
  See
  ====
  <$bProcess> :business process
  ====
  <$aService> : application service
  ====
  <$aComponent> : application component
endlegend
@enduml


uml/reference_15-04-1_Example-2

@startuml
skinparam roundcorner 25
rectangle "Capture Information"  as CI <<$archimate/business-process>> #Business
@enduml


uml/reference_15-05-1_List-possible-sprites

@startuml
listsprite
@enduml


uml/reference_15-06-02-1_Archimate-elements

@startuml
!include <archimate/Archimate>
Motivation_Stakeholder(StakeholderElement, "Stakeholder Description")
@enduml


uml/reference_15-06-02-2_Archimate-elements

@startuml
!include <archimate/Archimate>
Business_Service(BService, "Business Service")
@enduml


uml/reference_15-06-03-1_Archimate-relationships

@startuml
!include <archimate/Archimate>
Motivation_Stakeholder(StakeholderElement, "Stakeholder Description")
Business_Service(BService, "Business Service")
Rel_Composition(StakeholderElement, BService, "Description for the relationship")
@enduml


uml/reference_15-06-03-2_Archimate-relationships

@startuml
!include <archimate/Archimate>
Motivation_Stakeholder(StakeholderElement, "Stakeholder Description")
Business_Service(BService, "Business Service")
Rel_Composition_Down(StakeholderElement, BService, "Description for the relationship")
@enduml


uml/reference_15-06-04-1_Appendice-Examples-of-all-Archimate-RelationTypes

@startuml
left to right direction
skinparam nodesep 4
!include <archimate/Archimate>
Rel_Triggering(i15, j15, Triggering)
Rel_Specialization(i14, j14, Specialization)
Rel_Serving(i13, j13, Serving)
Rel_Realization(i12, j12, Realization)
Rel_Influence(i11, j11, Influence)
Rel_Flow(i10, j10, Flow)
Rel_Composition(i9, j9, Composition)
Rel_Association_dir(i8, j8, Association_dir)
Rel_Association(i7, j7, Association)
Rel_Assignment(i6, j6, Assignment)
Rel_Aggregation(i5, j5, Aggregation)
Rel_Access_w(i4, j4, Access_w)
Rel_Access_rw(i3, j3, Access_rw)
Rel_Access_r(i2, j2, Access_r)
Rel_Access(i1, j1, Access)
@enduml


uml/reference_16-01-01-1_Declaring-tasks-Duration

@startgantt
[Prototype design] lasts 15 days
[Test prototype] lasts 10 days
@endgantt

uml/reference_16-01-02-1_Declaring-tasks-Start

@startuml
[Prototype design] lasts 15 days
[Test prototype] lasts 10 days
Project starts 2020-07-01
[Prototype design] starts 2020-07-01
[Test prototype] starts 2020-07-16
@enduml

uml/reference_16-01-03-1_Declaring-tasks-End

@startuml
[Prototype design] lasts 15 days
[Test prototype] lasts 10 days
Project starts 2020-07-01
[Prototype design] ends 2020-07-15
[Test prototype] ends 2020-07-25
@enduml

uml/reference_16-01-04-1_StartEnd

@startuml
Project starts 2020-07-01
[Prototype design] starts 2020-07-01
[Test prototype] starts 2020-07-16
[Prototype design] ends 2020-07-15
[Test prototype] ends 2020-07-25
@enduml

uml/reference_16-02-1_One-line-declaration

@startuml
Project starts 2020-07-01
[Prototype design] starts 2020-07-01 and ends 2020-07-15
[Test prototype] starts 2020-07-16 and lasts 10 days
@enduml

uml/reference_16-03-1_Adding-constraints

@startgantt
[Prototype design] lasts 15 days
[Test prototype] lasts 10 days
[Test prototype] starts at [Prototype design]'s end
@endgantt

uml/reference_16-03-2_Adding-constraints

@startgantt
[Prototype design] lasts 10 days
[Code prototype] lasts 10 days
[Write tests] lasts 5 days
[Code prototype] starts at [Prototype design]'s end
[Write tests] starts at [Code prototype]'s start
@endgantt

uml/reference_16-04-1_Short-names

@startgantt
[Prototype design] as [D] lasts 15 days
[Test prototype] as [T] lasts 10 days
[T] starts at [D]'s end
@endgantt

uml/reference_16-05-1_Customize-colors

@startgantt
[Prototype design] lasts 13 days
[Test prototype] lasts 4 days
[Test prototype] starts at [Prototype design]'s end
[Prototype design] is colored in Fuchsia/FireBrick
[Test prototype] is colored in GreenYellow/Green
@endgantt

uml/reference_16-06-1_Completion-status

@startgantt
[foo] lasts 21 days
[foo] is 40% completed
[bar] lasts 30 days and is 10% complete
@endgantt

uml/reference_16-07-01-1_Milestone-Relative-milestone

@startgantt
[Test prototype] lasts 10 days
[Prototype completed] happens at [Test prototype]'s end
[Setup assembly line] lasts 12 days
[Setup assembly line] starts at [Test prototype]'s end
@endgantt

uml/reference_16-07-02-1_Milestone-Absolute-milestone

@startgantt
Project starts 2020-07-01
[Test prototype] lasts 10 days
[Prototype completed] happens 2020-07-10
[Setup assembly line] lasts 12 days
[Setup assembly line] starts at [Test prototype]'s end
@endgantt

uml/reference_16-07-03-1_Milestone-of-maximum-end-of-tasks

@startgantt
[Task1] lasts 4 days
then [Task1.1] lasts 4 days
[Task1.2] starts at [Task1]'s end and lasts 7 days
[Task2] lasts 5 days
then [Task2.1] lasts 4 days
[MaxTaskEnd] happens at [Task1.1]'s end
[MaxTaskEnd] happens at [Task1.2]'s end
[MaxTaskEnd] happens at [Task2.1]'s end
@endgantt

uml/reference_16-08-1_Hyperlinks

@startgantt
[task1] lasts 10 days
[task1] links to [[http://plantuml.com]]
@endgantt

uml/reference_16-09-1_Calendar

@startgantt
Project starts the 20th of september 2017
[Prototype design] as [TASK1] lasts 13 days
[TASK1] is colored in Lavender/LightBlue
@endgantt

uml/reference_16-10-1_Coloring-days

@startgantt
Project starts the 2020/09/01
2020/09/07 is colored in salmon
2020/09/13 to 2020/09/16 are colored in lightblue
[Prototype design] as [TASK1] lasts 22 days
[TASK1] is colored in Lavender/LightBlue
[Prototype completed] happens at [TASK1]'s end
@endgantt

uml/reference_16-11-01-1_Changing-scale-Daily

@startuml
saturday are closed
sunday are closed
Project starts the 1st of january 2021
[Prototype design end] as [TASK1] lasts 19 days
[TASK1] is colored in Lavender/LightBlue
[Testing] lasts 14 days
[TASK1]->[Testing]
2021-01-18 to 2021-01-22 are named [End's committee]
2021-01-18 to 2021-01-22 are colored in salmon
@enduml

uml/reference_16-11-02-1_Changing-scale-Weekly

@startuml
printscale weekly
saturday are closed
sunday are closed
Project starts the 1st of january 2021
[Prototype design end] as [TASK1] lasts 19 days
[TASK1] is colored in Lavender/LightBlue
[Testing] lasts 14 days
[TASK1]->[Testing]
2021-01-18 to 2021-01-22 are named [End's committee]
2021-01-18 to 2021-01-22 are colored in salmon
@enduml

uml/reference_16-11-02-2_Changing-scale-Weekly

@startgantt
printscale weekly
Project starts the 20th of september 2020
[Prototype design] as [TASK1] lasts 130 days
[TASK1] is colored in Lavender/LightBlue
[Testing] lasts 20 days
[TASK1]->[Testing]
2021-01-18 to 2021-01-22 are named [End's committee]
2021-01-18 to 2021-01-22 are colored in salmon
@endgantt

uml/reference_16-11-03-1_Changing-scale-Monthly

@startgantt
projectscale monthly
Project starts the 20th of september 2020
[Prototype design] as [TASK1] lasts 130 days
[TASK1] is colored in Lavender/LightBlue
[Testing] lasts 20 days
[TASK1]->[Testing]
2021-01-18 to 2021-01-22 are named [End's committee]
2021-01-18 to 2021-01-22 are colored in salmon
@endgantt

uml/reference_16-12-1_Close-day

@startgantt
project starts the 2018/04/09
saturday are closed
sunday are closed
2018/05/01 is closed
2018/04/17 to 2018/04/19 is closed
[Prototype design] lasts 14 days
[Test prototype] lasts 4 days
[Test prototype] starts at [Prototype design]'s end
[Prototype design] is colored in Fuchsia/FireBrick
[Test prototype] is colored in GreenYellow/Green
@endgantt

uml/reference_16-12-2_Close-day

@startgantt
2020-07-07 to 2020-07-17 is closed
2020-07-13 is open
Project starts the 2020-07-01
[Prototype design] lasts 10 days
Then [Test prototype] lasts 10 days
@endgantt

uml/reference_16-13-1_Simplified-task-succession

@startgantt
[Prototype design] lasts 14 days
then [Test prototype] lasts 4 days
then [Deploy prototype] lasts 6 days
@endgantt

uml/reference_16-13-2_Simplified-task-succession

@startgantt
[Prototype design] lasts 14 days
[Build prototype] lasts 4 days
[Prepare test] lasts 6 days
[Prototype design] -> [Build prototype]
[Prototype design] -> [Prepare test]
@endgantt

uml/reference_16-14-1_Separator

@startgantt
[Task1] lasts 10 days
then [Task2] lasts 4 days
-- Phase Two --
then [Task3] lasts 5 days
then [Task4] lasts 6 days
@endgantt

uml/reference_16-15-1_Working-with-resources

@startgantt
[Task1] on {Alice} lasts 10 days
[Task2] on {Bob:50%} lasts 2 days
then [Task3] on {Alice:25%} lasts 1 days
@endgantt

uml/reference_16-15-2_Working-with-resources

@startgantt
[Task1] on {Alice} {Bob} lasts 20 days
@endgantt

uml/reference_16-15-3_Working-with-resources

@startgantt
project starts on 2020-06-19
[Task1] on {Alice} lasts 10 days
{Alice} is off on 2020-06-24 to 2020-06-26
@endgantt

uml/reference_16-16-1_Complex-example

@startgantt
[Prototype design] lasts 13 days and is colored in Lavender/LightBlue
[Test prototype] lasts 9 days and is colored in Coral/Green and starts 3 days after [Prototype design]'s end
[Write tests] lasts 5 days and ends at [Prototype design]'s end
[Hire tests writers] lasts 6 days and ends at [Write tests]'s start
[Init and write tests report] is colored in Coral/Green
[Init and write tests report] starts 1 day before [Test prototype]'s start and ends at [Test prototype]'s end
@endgantt

uml/reference_16-17-1_Comments

@startgantt
' This is a comment
[T1] lasts 3 days
/' this comment
is on several lines '/
[T2] starts at [T1]'s end and lasts 1 day
@endgantt

uml/reference_16-18-01-1_Without-style

@startuml
[Task1] lasts 20 days
note bottom
  memo1 ...
  memo2 ...
  explanations1 ...
  explanations2 ...
end note
[Task2] lasts 4 days
[Task1] -> [Task2]
-- Separator title --
[M1] happens on 5 days after [Task1]'s end
-- end --
@enduml

uml/reference_16-18-02-1_With-style

@startuml
<style>
ganttDiagram {
task {
FontName Helvetica
FontColor red
FontSize 18
PlantUML Language Reference Guide (1.2021.2)
268 / 415
16.18
Using style
16
GANTT DIAGRAM
FontStyle bold
BackGroundColor GreenYellow
LineColor blue
}
milestone {
FontColor blue
FontSize 25
FontStyle italic
BackGroundColor yellow
LineColor red
}
note {
  FontColor DarkGreen
  FontSize 10
  LineColor OrangeRed
}
arrow {
FontName Helvetica
FontColor red
FontSize 18
FontStyle bold
BackGroundColor GreenYellow
LineColor blue
}
separator {
LineColor red
BackGroundColor green
FontSize 16
FontStyle bold
FontColor purple
}
}
</style>
[Task1] lasts 20 days
note bottom
  memo1 ...
  memo2 ...
  explanations1 ...
  explanations2 ...
end note
[Task2] lasts 4 days
[Task1] -> [Task2]
-- Separator title --
[M1] happens on 5 days after [Task1]'s end
-- end --
@enduml

uml/reference_16-19-1_Add-notes

@startgantt
[task01] lasts 15 days
note bottom
memo1 ...
memo2 ...
explanations1 ...
explanations2 ...
end note
[task01] -> [task02]
@endgantt

uml/reference_16-19-2_Add-notes

@startgantt
[task01] lasts 15 days
note bottom
memo1 ...
memo2 ...
explanations1 ...
explanations2 ...
end note
[task01] -> [task02]
[task03] lasts 5 days
@endgantt

uml/reference_16-19-3_Add-notes

@startgantt
-- test01 --
[task01] lasts 4 days
note bottom
'note left
memo1 ...
memo2 ...
explanations1 ...
explanations2 ...
end note
[task02] lasts 8 days
[task01] -> [task02]
note bottom
'note left
memo1 ...
memo2 ...
explanations1 ...
explanations2 ...
end note
-- test02 --
[task03] as [t3] lasts 7 days
[t3] -> [t4]
@endgantt

uml/reference_16-19-4_Add-notes

@startgantt
Project starts 2020-09-01
[taskA] starts 2020-09-01 and lasts 3 days
[taskB] starts 2020-09-10 and lasts 3 days
[taskB] displays on same row as [taskA]
[task01] starts 2020-09-05 and lasts 4 days
then [task02] lasts 8 days
note bottom
note for task02
more notes
end note
then [task03] lasts 7 days
note bottom
note for task03
more notes
end note
-- separator --
[taskC] starts 2020-09-02 and lasts 5 days
[taskD] starts 2020-09-09 and lasts 5 days
[taskD] displays on same row as [taskC]
[task 10] starts 2020-09-05 and lasts 5 days
then [task 11] lasts 5 days
note bottom
note for task11
more notes
end note
@endgantt

uml/reference_16-20-1_Pause-tasks

@startgantt
Project starts the 5th of december 2018
saturday are closed
sunday are closed
2018/12/29 is opened
[Prototype design] lasts 17 days
[Prototype design] pauses on 2018/12/13
[Prototype design] pauses on 2018/12/14
[Prototype design] pauses on monday
[Test prototype] starts at [Prototype design]'s end and lasts 2 weeks
@endgantt

uml/reference_16-21-1_Change-link-colors

@startgantt
[T1] lasts 4 days
[T2] lasts 4 days and starts 3 days after [T1]'s end with blue dotted link
[T3] lasts 4 days and starts 3 days after [T2]'s end with green bold link
[T4] lasts 4 days and starts 3 days after [T3]'s end with green dashed link
@endgantt

uml/reference_16-21-2_Change-link-colors

@startuml
<style>
ganttDiagram {
arrow {
LineColor blue
  }
}
</style>
[Prototype design] lasts 7 days
[Build prototype] lasts 4 days
[Prepare test] lasts 6 days
[Prototype design] -[#FF00FF]-> [Build prototype]
[Prototype design] -[dotted]-> [Prepare test]
Then [Run test]  lasts 4 days
@enduml

uml/reference_16-22-1_Tasks-or-Milestones-on-the-same-line

@startgantt
[Prototype design] lasts 13 days
[Test prototype] lasts 4 days and 1 week
[Test prototype] starts 1 week and 2 days after [Prototype design]'s end
[Test prototype] displays on same row as [Prototype design]
[r1] happens on 5 days after [Prototype design]'s end
[r2] happens on 5 days after [r1]'s end
[r3] happens on 5 days after [r2]'s end
[r2] displays on same row as [r1]
[r3] displays on same row as [r1]
@endgantt

uml/reference_16-23-1_Highlight-today

@startgantt
Project starts the 20th of september 2018
sunday are close
2018/09/21 to 2018/09/23 are colored in salmon
2018/09/21 to 2018/09/30 are named [Vacation in the Bahamas]
today is 30 days after start and is colored in #AAF
[Foo] happens 40 days after start
[Dummy] lasts 10 days and starts 10 days after start
@endgantt

uml/reference_16-24-1_Task-between-two-milestones

@startgantt
project starts on 2020-07-01
[P_start] happens 2020-07-03
[P_end] happens 2020-07-13
[Prototype design] occurs from [P_start] to [P_end]
@endgantt

uml/reference_16-26-1_Add-title-header-footer-caption-or-legend-on-gantt-diagram

@startuml
header some header
footer some footer
title My title
[Prototype design] lasts 13 days
legend
  The legend
end legend
caption This is caption
@enduml

uml/reference_16-27-1_Removing-Foot-Boxes

@startgantt
hide footbox
title Foot Box removed
[Prototype design] lasts 15 days
[Test prototype] lasts 10 days
@endgantt

uml/reference_16-27-2_Removing-Foot-Boxes

@startgantt
Project starts the 20th of september 2017
[Prototype design] as [TASK1] lasts 13 days
[TASK1] is colored in Lavender/LightBlue
hide footbox
@endgantt

uml/reference_16-27-3_Removing-Foot-Boxes

@startgantt
hide footbox
printscale weekly
saturday are closed
sunday are closed
Project starts the 1st of january 2021
[Prototype design end] as [TASK1] lasts 19 days
[TASK1] is colored in Lavender/LightBlue
[Testing] lasts 14 days
[TASK1]->[Testing]
2021-01-18 to 2021-01-22 are named [End's committee]
2021-01-18 to 2021-01-22 are colored in salmon
@endgantt

uml/reference_16-27-4_Removing-Foot-Boxes

@startgantt
hide footbox
projectscale monthly
Project starts the 20th of september 2020
[Prototype design] as [TASK1] lasts 130 days
[TASK1] is colored in Lavender/LightBlue
[Testing] lasts 20 days
[TASK1]->[Testing]
2021-01-18 to 2021-01-22 are named [End's committee]
2021-01-18 to 2021-01-22 are colored in salmon
@endgantt

uml/reference_17-01-1_OrgMode-syntax

@startmindmap
* Debian
** Ubuntu
*** Linux Mint
*** Kubuntu
*** Lubuntu
*** KDE Neon
** LMDE
** SolydXK
** SteamOS
** Raspbian with a very long name
*** <s>Raspmbc</s> => OSMC
*** <s>Raspyfi</s> => Volumio
@endmindmap

uml/reference_17-02-1_Markdown-syntax

@startmindmap
* root node
  * some first level node
    * second level node
    * another second level node
  * another first level node
@endmindmap

uml/reference_17-03-1_Arithmetic-notation

@startmindmap
+ OS
++ Ubuntu
+++ Linux Mint
+++ Kubuntu
+++ Lubuntu
+++ KDE Neon
++ LMDE
++ SolydXK
++ SteamOS
++ Raspbian
-- Windows 95
-- Windows 98
-- Windows NT
--- Windows 8
--- Windows 10
@endmindmap

uml/reference_17-04-1_Multilines

@startmindmap
* Class Templates
**:Example 1
<code>
template <typename T>
class cname{
void f1()<U+003B>
...
}
</code>
;
**:Example 2
<code>
other template <typename T>
class cname{
...
</code>
;
@endmindmap

uml/reference_17-05-01-1_With-inline-color

@startmindmap
*[#Orange] Colors
**[#lightgreen] Green
**[#FFBBCC] Rose
**[#lightblue] Blue
@endmindmap

uml/reference_17-05-01-2_With-inline-color

@startmindmap
+[#Orange] Colors
++[#lightgreen] Green
++[#FFBBCC] Rose
--[#lightblue] Blue
@endmindmap

uml/reference_17-05-01-3_With-inline-color

@startmindmap
*[#Orange] root node
 *[#lightgreen] some first level node
  *[#FFBBCC] second level node
  *[#lightblue] another second level node
 *[#lightgreen] another first level node
@endmindmap

uml/reference_17-05-02-1_With-style-color

@startmindmap
<style>
mindmapDiagram {
  .green {
    BackgroundColor lightgreen
  }
  .rose {
    BackgroundColor #FFBBCC
  }
  .your_style_name {
    BackgroundColor lightblue
  }
}
</style>
* Colors
** Green <<green>>
** Rose <<rose>>
** Blue <<your_style_name>>
@endmindmap

uml/reference_17-05-02-2_With-style-color

@startmindmap
<style>
mindmapDiagram {
  .green {
    BackgroundColor lightgreen
  }
  .rose {
    BackgroundColor #FFBBCC
  }
  .your_style_name {
    BackgroundColor lightblue
  }
}
</style>
+ Colors
++ Green <<green>>
++ Rose <<rose>>
-- Blue <<your_style_name>>
@endmindmap

uml/reference_17-05-02-3_With-style-color

@startmindmap
<style>
mindmapDiagram {
  .green {
    BackgroundColor lightgreen
  }
  .rose {
    BackgroundColor #FFBBCC
  }
  .your_style_name {
    BackgroundColor lightblue
  }
}
</style>
* root node
 * some first level node <<green>>
  * second level node <<rose>>
  * another second level node <<your_style_name>>
 * another first level node <<green>>
@endmindmap

uml/reference_17-06-1_Removing-box

@startmindmap
* root node
** some first level node
***_ second level node
***_ another second level node
***_ foo
***_ bar
***_ foobar
** another first level node
@endmindmap

uml/reference_17-06-2_Removing-box

@startmindmap
*_ root node
**_ some first level node
***_ second level node
***_ another second level node
***_ foo
***_ bar
***_ foobar
**_ another first level node
@endmindmap

uml/reference_17-06-3_Removing-box

@startmindmap
+ root node
++ some first level node
+++_ second level node
+++_ another second level node
+++_ foo
+++_ bar
+++_ foobar
++_ another first level node
-- some first right level node
--_ another first right level node
@endmindmap

uml/reference_17-07-1_Changing-diagram-direction

@startmindmap
* count
** 100
*** 101
*** 102
** 200
left side
** A
*** AA
*** AB
** B
@endmindmap

uml/reference_17-08-1_Complete-example

@startmindmap
caption figure 1
title My super title

* <&flag>Debian
** <&globe>Ubuntu
*** Linux Mint
*** Kubuntu
*** Lubuntu
*** KDE Neon
** <&graph>LMDE
** <&pulse>SolydXK
** <&people>SteamOS
** <&star>Raspbian with a very long name
*** <s>Raspmbc</s> => OSMC
*** <s>Raspyfi</s> => Volumio
header
My super header
endheader
center footer My super footer
legend right
Short
legend
endlegend
@endmindmap

uml/reference_17-09-01-1_Changing-style-node-depth

@startmindmap
<style>
mindmapDiagram {
  node {
    BackgroundColor lightGreen
  }
  :depth(1) {
    BackGroundColor white
  }
}
</style>
* Linux
** NixOS
** Debian
*** Ubuntu
**** Linux Mint
**** Kubuntu
**** Lubuntu
**** KDE Neon
@endmindmap

uml/reference_17-09-02-1_Changing-style-boxless

@startmindmap
<style>
mindmapDiagram {
  node {
    BackgroundColor lightGreen
  }
  boxless {
    FontColor darkgreen
  }
}
</style>
* Linux
** NixOS
** Debian
***_ Ubuntu
**** Linux Mint
**** Kubuntu
**** Lubuntu
**** KDE Neon
@endmindmap

uml/reference_17-10-1_Word-Wrap

@startmindmap
<style>
node {
  Padding 12
  Margin 3
  HorizontalAlignment center
  LineColor blue
  LineThickness 3.0
  BackgroundColor gold
  RoundCorner 40
  MaximumWidth 100
}
rootNode {
  LineStyle 8.0;3.0
  LineColor red
  BackgroundColor white
  LineThickness 1.0
  RoundCorner 0
  Shadowing 0.0
}
leafNode {
  LineColor gold
  RoundCorner 0
  Padding 3
}
arrow {
  LineStyle 4
  LineThickness 0.5
  LineColor green
}
</style>
* Hi =)
** sometimes i have node in wich i want to write a long text
*** this results in really huge diagram
**** of course, i can explicit split with a\nnew line
**** but it could be cool if PlantUML was able to split long lines, maybe with an option
@endmindmap

uml/reference_18-01-1_OrgMode-syntax

@startwbs
* Business Process Modelling WBS
** Launch the project
*** Complete Stakeholder Research
*** Initial Implementation Plan
** Design phase
*** Model of AsIs Processes Completed
**** Model of AsIs Processes Completed1
**** Model of AsIs Processes Completed2
*** Measure AsIs performance metrics
*** Identify Quick Wins
** Complete innovate phase
@endwbs

uml/reference_18-02-1_Change-direction

@startwbs
* Business Process Modelling WBS
** Launch the project
*** Complete Stakeholder Research
*** Initial Implementation Plan
** Design phase
*** Model of AsIs Processes Completed
****< Model of AsIs Processes Completed1
****> Model of AsIs Processes Completed2
***< Measure AsIs performance metrics
***< Identify Quick Wins
@endwbs

uml/reference_18-03-1_Arithmetic-notation

@startwbs
+ New Job
++ Decide on Job Requirements
+++ Identity gaps
+++ Review JDs
++++ Sign-Up for courses
++++ Volunteer
++++ Reading
++- Checklist
+++- Responsibilities
+++- Location
++ CV Upload Done
+++ CV Updated
++++ Spelling & Grammar
++++ Check dates
---- Skills
+++ Recruitment sites chosen
@endwbs

uml/reference_18-04-02-1_Several-boxless-node

@startwbs
+ Project
 + Part One
  + Task 1.1
   - LeftTask 1.2
   + Task 1.3
  + Part Two
   + Task 2.1
   + Task 2.2
   -_ Task 2.2.1 To the left boxless
   -_ Task 2.2.2 To the Left boxless
   +_ Task 2.2.3 To the right boxless
@endwbs

uml/reference_18-04-03-1_All-boxless-node

@startwbs
+_ Project
 +_ Part One
  +_ Task 1.1
   -_ LeftTask 1.2
   +_ Task 1.3
  +_ Part Two
   +_ Task 2.1
   +_ Task 2.2
   -_ Task 2.2.1 To the left boxless
   -_ Task 2.2.2 To the Left boxless
   +_ Task 2.2.3 To the right boxless
@endwbs

uml/reference_18-04-05-1_Several-boxless-node

@startwbs
* World
** America
***_ Canada
***_ Mexico
***_ USA
** Europe
***_ England
***_ Germany
***_ Spain
@endwbs

uml/reference_18-04-06-1_All-boxless-node

@startwbs
*_ World
**_ America
***_ Canada
***_ Mexico
***_ USA
**_ Europe
***_ England
***_ Germany
***_ Spain
@endwbs

uml/reference_18-05-1_Colors

@startwbs
*[#SkyBlue] this is the partner workpackage
**[#pink] this is my workpackage
** this is another workpackage
@endwbs

uml/reference_18-05-2_Colors

@startwbs
+[#SkyBlue] this is the partner workpackage
++[#pink] this is my workpackage
++ this is another workpackage
@endwbs

uml/reference_18-05-3_Colors

@startwbs
<style>
wbsDiagram {
  .pink {
    BackgroundColor pink
  }
  .your_style_name {
    BackgroundColor SkyBlue
  }
}
</style>
* this is the partner workpackage <<your_style_name>>
** this is my workpackage <<pink>>
** this is another workpackage
@endwbs

uml/reference_18-05-4_Colors

@startwbs
<style>
wbsDiagram {
  .pink {
    BackgroundColor pink
  }
  .your_style_name {
    BackgroundColor SkyBlue
  }
}
</style>
+ this is the partner workpackage <<your_style_name>>
++ this is my workpackage <<pink>>
++ this is another workpackage
@endws

uml/reference_18-06-1_Using-style

@startwbs
<style>
wbsDiagram {
  // all lines (meaning connector and borders, there are no other lines in WBS) are black by default
  Linecolor black
  arrow {
    // note that connector are actually "arrow" even if they don't look like as arrow
    // This is to be consistent with other UML diagrams. Not 100% sure that it's a good idea
    // So now connector are green
    LineColor green
  }
  :depth(0) {
    // will target root node
    BackgroundColor White
    RoundCorner 10
    LineColor red
    // Because we are targetting depth(0) for everything, border and connector for level 0 will be red
  }
  arrow {
    :depth(2) {
      // Targetting only connector between Mexico-Chihuahua and USA-Texas
      LineColor blue
      LineStyle 4
      LineThickness .5
    }
  }
  node {
    :depth(2) {
      LineStyle 2
      LineThickness 2.5
    }
  }
  boxless {
    // will target boxless node with '_'
    FontColor darkgreen
  }
}
</style>
* World
** America
*** Canada
*** Mexico
**** Chihuahua
*** USA
**** Texas
***< New York
** Europe
***_ England
***_ Germany
***_ Spain
@endwbs

uml/reference_18-07-1_Word-Wrap

@startwbs
<style>
node {
  Padding 12
  Margin 3
  HorizontalAlignment center
  LineColor blue
  LineThickness 3.0
  BackgroundColor gold
  RoundCorner 40
  MaximumWidth 100
}

rootNode {
  LineStyle 8.0;3.0
  LineColor red
  BackgroundColor white
  LineThickness 1.0
  RoundCorner 0
  Shadowing 0.0
}
leafNode {
  LineColor gold
  RoundCorner 0
  Padding 3
}
arrow {
  LineStyle 4
  LineThickness 0.5
  LineColor green
}
</style>
* Hi =)
** sometimes i have node in wich i want to write a long text
*** this results in really huge diagram
**** of course, i can explicit split with a\nnew line
**** but it could be cool if PlantUML was able to split long lines, maybe with an option who specify the maximum width of a node
@endwbs

uml/reference_19-01-1_Standalone-diagram

@startmath
f(t)=(a_0)/2 + sum_(n=1)^ooa_ncos((npit)/L)+sum_(n=1)^oo b_n\ sin((npit)/L)
@endmath

uml/reference_19-01-2_Standalone-diagram

@startlatex
\sum_{i=0}^{n-1} (a_i + b_i^2)
@endlatex

uml/reference_19-1_Maths

@startuml
:<math>int_0^1f(x)dx</math>;
:<math>x^2+y_1+z_12^34</math>;
note right
  Try also
  <math>d/dxf(x)=lim_(h->0)(f(x+h)-f(x))/h</math>
  <latex>P(y|\mathbf{x}) \mbox{ or } f(\mathbf{x})+\epsilon</latex>
end note
@enduml

uml/reference_19-2_Maths

@startuml
Bob -> Alice : Can you solve: <math>ax^2+bx+c=0</math>
Alice --> Bob: <math>x = (-b+-sqrt(b^2-4ac))/(2a)</math>
@enduml

uml/reference_20-01-1_Information-Engineering-Relations

@startuml
Entity01 }|..|| Entity02
Entity03 }o..o| Entity04
Entity05 ||--o{ Entity06
Entity07 |o--|| Entity08
@enduml


uml/reference_20-02-1_Entities

@startuml
entity Entity01 {
  * identifying_attribute
  --
  * mandatory_attribute
  optional_attribute
}
@enduml


uml/reference_20-02-2_Entities

@startuml
entity Entity01 {
  optional attribute
  **optional bold attribute**
  * **mandatory bold attribute**
}
@enduml


uml/reference_20-03-1_Complete-Example

@startuml

' hide the spot
hide circle

' avoid problems with angled crows feet
skinparam linetype ortho

entity "Entity01" as e01 {
  *e1_id : number <<generated>>
  --
  *name : text
  description : text
}

entity "Entity02" as e02 {
  *e2_id : number <<generated>>
  --
  *e1_id : number <<FK>>
  other_details : text
}

entity "Entity03" as e03 {
  *e3_id : number <<generated>>
  --
  e1_id : number <<FK>>
  other_details : text
}

e01 ||..o{ e02
e01 |o..o{ e03

@enduml


uml/reference_21-02-1_Zoom

@startuml
scale 180*90
Bob->Alice : hello
@enduml

uml/reference_21-03-1_Title

@startuml
skinparam titleBorderRoundCorner 15
skinparam titleBorderThickness 2
skinparam titleBorderColor red
skinparam titleBackgroundColor Aqua-CadetBlue
title Simple communication\nexample
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
@enduml

uml/reference_21-03-2_Title

@startuml
title
  <u>Simple</u> communication example
  on <i>several</i> lines and using <back:cadetblue>creole tags</back>
end title
Alice -> Bob: Authentication Request
Bob -> Alice: Authentication Response
@enduml

uml/reference_21-04-1_Caption

@startuml
caption figure 1
Alice -> Bob: Hello
@enduml

uml/reference_21-05-1_Footer-and-header

@startuml
Alice -> Bob: Authentication Request
header
<font color=red>Warning:</font>
Do not use in production.
endheader
center footer Generated for demonstration
@enduml

uml/reference_21-06-1_Legend-the-diagram

@startuml
Alice -> Bob : Hello
legend right
  Short
  legend
  endlegend
@enduml

uml/reference_21-06-2_Legend-the-diagram

@startuml
Alice -> Bob : Hello
legend top left
  Short
  legend
  endlegend
@enduml

uml/reference_22-01-1_Emphasized-text

@startuml
Alice -> Bob : hello --there-- here
... Some ~~long delay~~ ...
Bob -> Alice : ok
note left
  This is **bold**
  This is //italics//
  This is ""monospaced""
  This is --stricken-out--
  This is __underlined__
  This is ~~wave-underlined~~
end note
@enduml


uml/reference_22-02-1_Lists

@startuml
object demo {
  * Bullet list
  * Second item
}
note left
  * Bullet list
  * Second item
  ** Sub item
end note

legend
  # Numbered list
  # Second item
  ## Sub item
  ## Another sub item
  * Can't quite mix
  * Numbers and bullets
  # Third item
end legend
@enduml


uml/reference_22-03-1_Escape-character

@startuml
object demo {
  This is not ~___underscored__.
  This is not ~""monospaced"".
}
@enduml


uml/reference_22-04-1_Horizontal-lines

@startuml
database DB1 as "
You can have horizontal line
----
Or double line
====
Or strong line
____
Or dotted line
..My title..
Enjoy!
"
note right
  This is working also in notes
  You can also add title in all these lines
  ==Title==
  --Another title--
end note

@enduml


uml/reference_22-05-1_Headingsuml

@startuml
usecase UC1 as "
= Extra-large heading
Some text
== Large heading
Other text
=== Medium heading
Information
....
==== Small heading"
@enduml


uml/reference_22-06-1_Legacy-HTML

@startuml
:* You can change <color:red>text color</color>
* You can change <back:cadetblue>background color</back>
* You can change <size:18>size</size>
* You use <u>legacy</u> <b>HTML <i>tag</i></b>
* You use <u:red>color</u> <s:green>in HTML</s> <w:#0000FF>tag</w>
----
* Use image : <img:http://plantuml.com/logo3.png>
;
@enduml


uml/reference_22-07-1_Code

@startuml
Alice -> Bob : hello
note right
  <code>
  main() {
  printf("Hello world");
}
</code>
end note
@enduml


uml/reference_22-07-2_Code

@startuml
Alice -> Bob : hello
note left
  <code>
  This is **bold**
  This is //italics//
  This is ""monospaced""
  This is --stricken-out--
  This is __underlined__
  This is ~~wave-underlined~~
  --test Unicode and icons--
  This is <U+221E> long
  This is a <&code> icon
  </code>
end note
note right
  This is **bold**
  This is //italics//
  This is ""monospaced""
  This is --stricken-out--
  This is __underlined__
  This is ~~wave-underlined~~
  --test Unicode and icons--
  This is <U+221E> long
  This is a <&code> icon
end note
@enduml


uml/reference_22-08-01-1_Create-a-table

@startuml
skinparam titleFontSize 14
title
  Example of simple table
  |= |= table |= header |
  | a | table | row |
  | b | table | row |
end title
[*] --> State1
@enduml


uml/reference_22-08-02-1_Add-color-on-rows-or-cells

@startuml
start
:Here is the result
|= |= table |= header |
| a | table | row |
|<#FF8080> red |<#80FF80> green |<#8080FF> blue |
<#yellow>| b | table | row |;
@enduml


uml/reference_22-08-03-1_Add-color-on-border-and-text

@startuml
title
  <#lightblue,#red>|=  Step  |=  Date  |=  Name  |=  Status  |=  Link  |
  <#lightgreen>|  1.1  |  TBD  | plantuml news |<#Navy><color:OrangeRed><b> Unknown  | [[https://plantuml.com/news plantuml news]] |
end title
@enduml


uml/reference_22-08-04-1_No-border-or-same-color-as-the-background

@startuml
node n
note right of n
  <#FBFB77,#FBFB77>|= Husky / Yorkie |= Foo |
  | SourceTree1 | foo1 |
  | ST2 | foo2 |
end note
@enduml


uml/reference_22-08-05-1_Bold-header-or-not

@startuml
note as deepCSS0
  |<#white> Husky / Yorkie |
  |=<#gainsboro> SourceTree0 |
endnote

note as deepCSS1
  |= <#white> Husky / Yorkie |= Foo |
  |<#gainsboro><r> SourceTree1 | foo1 |
endnote

note as deepCSS2
  |= Husky / Yorkie |
  |<#gainsboro> SourceTree2 |
endnote

note as deepCSS3
  <#white>|= Husky / Yorkie |= Foo |
  |<#gainsboro> SourceTree1 | foo1 |
endnote
@enduml


uml/reference_22-09-1_Tree

@startuml
skinparam titleFontSize 14
title
  Example of Tree
  |_ First line
  |_ **Bom (Model)**
  |_ prop1
  |_ prop2
  |_ prop3
  |_ Last line
end title
[*] --> State1
@enduml


uml/reference_22-09-2_Tree

@startuml
class Foo {
  **Bar (Model)**
  |_ prop
  |_ **Bom (Model)**
  |_ prop2
  |_ prop3
  |_ prop3.1
  |_ prop4 :(
  --
}
@enduml


uml/reference_22-09-3_Tree

@startuml
[A] as A
rectangle "Box B" {
  component B [
  Level 1
  |_ Level 2a
  |_ Level 3a
  |_ Level 3b
  |_ Level 3c
  |_ Level 4a
  |_ Level 3d
  |_ Level 2b
  |_ Level 3e
  ]
}
A -> B
@enduml


uml/reference_22-10-1_Special-characters

@startuml
usecase direct as "this is ∞ long"
usecase ampHash as "this is also &#8734; long"
usecase angleBrackets as "this is also <U+221E> long"
@enduml


uml/reference_22-11-1_OpenIconic

@startuml
title: <size:20><&heart>Use of OpenIconic<&heart></size>
class Wifi
note left
  Click on <&wifi>
end note
@enduml


uml/reference_22-11-2_OpenIconic

@startuml
listopeniconic
@enduml


uml/reference_22-12-01-1_Activity

@startuml
start
:**test list 1**
* Bullet list
* Second item
** Sub item
*** Sub sub item
* Third item
----
**test list 2**
# Numbered list
# Second item
## Sub item
## Another sub item
# Third item;
stop
@enduml


uml/reference_22-12-02-1_Class

@startuml

class a {
  **test list 1**
  * Bullet list
  * Second item
  ** Sub item
  *** Sub sub item
  * Third item
  ----
  **test list 2**
  # Numbered list
  # Second item
  ## Sub item
  ## Another sub item
  # Third item
}

a -- b

@enduml


uml/reference_22-12-03-1_Component-Deployment-Use-Case

@startuml
node n [
**test list 1**
* Bullet list
* Second item
** Sub item
*** Sub sub item
* Third item
----
**test list 2**
# Numbered list
# Second item
## Sub item
## Another sub item
# Third item
]

file f as "
**test list 1**
* Bullet list
* Second item
** Sub item
*** Sub sub item
* Third item
----
**test list 2**
# Numbered list
# Second item
## Sub item
## Another sub item
# Third item
"
@enduml


uml/reference_22-12-05-1_Object

@startuml
object user {
  **test list 1**
  * Bullet list
  * Second item
  ** Sub item
  *** Sub sub item
  * Third item
  ----  
  **test list 2**
  # Numbered list
  # Second item
  ## Sub item
  ## Another sub item
  # Third item
}

@enduml


uml/reference_22-12-06-1_MindMap

@startmindmap

* root
** d1
**:**test list 1**
* Bullet list
* Second item
** Sub item
*** Sub sub item
* Third item
----
**test list 2**
# Numbered list
# Second item
## Sub item
## Another sub item
# Third item;


@endmindmap


uml/reference_22-12-08-1_Note

@startuml
note as n
  **test list 1**
  * Bullet list
  * Second item
  ** Sub item
  *** Sub sub item
  * Third item
  ----
  **test list 2**
  # Numbered list
  # Second item
  ## Sub item
  ## Another sub item
  # Third item
end note
@enduml


uml/reference_22-13-01-1_Activity

@startuml
start
:You can have horizontal line
----
Or double line
====
Or strong line
____
Or dotted line
..My title..
Or dotted title
//and title... //
==Title==
Or double-line title
--Another title--
Or single-line title
Enjoy!;
stop
@enduml


uml/reference_22-13-02-1_Class

@startuml

class a {
  You can have horizontal line
  ----
  Or double line
  ====
  Or strong line
  ____
  Or dotted line
  ..My title..
  Or dotted title
  //and title... //
  ==Title==
  Or double-line title
  --Another title--
  Or single-line title
  Enjoy!
}

a -- b

@enduml


uml/reference_22-13-03-1_Component-Deployment-Use-Case

@startuml
node n [
You can have horizontal line
----
Or double line
====
Or strong line
____
Or dotted line
..My title..
//and title... //
==Title==
--Another title--
Enjoy!
]

file f as "
You can have horizontal line
----
Or double line
====
Or strong line
____
Or dotted line
..My title..
//and title... //
==Title==
--Another title--
Enjoy!
"

person p [

You can have horizontal line
----
Or double line
====
Or strong line
____
Or dotted line
..My title..
//and title... //
==Title==
--Another title--
Enjoy!

]
@enduml


uml/reference_22-13-05-1_Object

@startuml
object user {
  You can have horizontal line
  ----
  Or double line
  ====
  Or strong line
  ____
  Or dotted line
  ..My title..
  //and title... //
  ==Title==
  --Another title--
  Enjoy!
}

@enduml


uml/reference_22-13-06-1_MindMap

@startmindmap

* root
** d1
**:You can have horizontal line
----
Or double line
====
Or strong line
____
Or dotted line
..My title..
//and title... //
==Title==
--Another title--
Enjoy!;

@endmindmap


uml/reference_22-13-08-1_Note

@startuml
note as n
  You can have horizontal line
  ----
  Or double line
  ====
  Or strong line
  ____
  Or dotted line
  ..My title..
  //and title... //
  ==Title==
  --Another title--
  Enjoy!
end note
@enduml


uml/reference_22-14-1_Style-equivalent-between-Creole-and-HTML

@startmindmap
* Style equivalent\n(between Creole and HTML)
**:**Creole**
----
<#silver>|= code|= output|
| \n This is ""~**bold**""\n | \n This is **bold** |
| \n This is ""~//italics//""\n | \n This is //italics// |
| \n This is ""~""monospaced~"" ""\n | \n This is ""monospaced"" |
| \n This is ""~--stroked--""\n | \n This is --stroked-- |
| \n This is ""~__underlined__""\n |  \n This is __underlined__ |
| \n This is ""<U+007E><U+007E>waved<U+007E><U+007E>""\n | \n This is ~~waved~~ |;
**:<b>Legacy HTML like
----
<#silver>|= code|= output|
| \n This is ""~<b>bold</b>""\n | \n This is <b>bold</b> |
| \n This is ""~<i>italics</i>""\n | \n This is <i>italics</i> |
| \n This is ""~<font:monospaced>monospaced</font>""\n | \n This is <font:monospaced>monospaced</font> |
| \n This is ""~<s>stroked</s>""\n | \n  This is <s>stroked</s> |
| \n This is ""~<u>underlined</u>""\n | \n This is <u>underlined</u> |
| \n This is ""~<w>waved</w>""\n | \n This is <w>waved</w> |

And color as a bonus...
<#silver>|= code|= output|
| \n This is ""~<s:""<color:green>""green""</color>"">stroked</s>""\n | \n  This is <s:green>stroked</s> |
| \n This is ""~<u:""<color:red>""red""</color>"">underlined</u>""\n | \n This is <u:red>underlined</u> |
| \n This is ""~<w:""<color:#0000FF>""#0000FF""</color>"">waved</w>""\n | \n This is <w:#0000FF>waved</w> |;
@endmindmap


uml/reference_23-01-1_Changing-colors

@startuml
sprite $foo1 {
FFFFFFFFFFFFFFF
F0123456789ABCF
F0123456789ABCF
F0123456789ABCF
F0123456789ABCF
F0123456789ABCF
F0123456789ABCF
F0123456789ABCF
F0123456789ABCF
FFFFFFFFFFFFFFF
}
Alice -> Bob : Testing <$foo1,scale=3.4,color=orange>
@enduml


uml/reference_23-04-1_Examples

@startuml
sprite $printer [15x15/8z] NOtH3W0W208HxFz_kMAhj7lHWpa1XC716sz0Pq4MVPEWfBHIuxP3L6kbTcizR8tAhzaqFvXwvFfPEqm0
start
:click on <$printer> to print the page;
@enduml


uml/reference_23-04-2_Examples

@startuml
sprite $bug [15x15/16z] PKzR2i0m2BFMi15p__FEjQEqB1z27aeqCqixa8S4OT7C53cKpsHpaYPDJY_12MHM-BLRyywPhrrlw3qumqNThmXgd1TOterAZmOW8sgiJafogofWRwtV3nCF
sprite $printer [15x15/8z] NOtH3W0W208HxFz_kMAhj7lHWpa1XC716sz0Pq4MVPEWfBHIuxP3L6kbTcizR8tAhzaqFvXwvFfPEqm0
sprite $disk {
444445566677881
436000000009991
43600000000ACA1
53700000001A7A1
53700000012B8A1
53800000123B8A1
63800001233C9A1
634999AABBC99B1
744566778899AB1
7456AAAAA99AAB1
8566AFC228AABB1
8567AC8118BBBB1
867BD4433BBBBB1
39AAAAABBBBBBC1
}

title Use of sprites (<$printer>, <$bug>...)

class Example {
  Can have some bug : <$bug>
  Click on <$disk> to save
}

note left : The printer <$printer> is available

@enduml


uml/reference_23-06-1_Listing-Sprites

@startuml

!define osaPuml https://raw.githubusercontent.com/Crashedmind/PlantUML-opensecurityarchitecture2-icons/master
!include osaPuml/Common.puml
!include osaPuml/User/all.puml

listsprites
@enduml


uml/reference_23-1_Defining-and-using-sprites

@startuml
sprite $foo1 {
FFFFFFFFFFFFFFF
F0123456789ABCF
F0123456789ABCF
F0123456789ABCF
F0123456789ABCF
F0123456789ABCF
F0123456789ABCF
F0123456789ABCF
F0123456789ABCF
FFFFFFFFFFFFFFF
}
Alice -> Bob : Testing <$foo1>
@enduml


uml/reference_23-2_Defining-and-using-sprites

@startuml
sprite $foo1 {
FFFFFFFFFFFFFFF
F0123456789ABCF
F0123456789ABCF
F0123456789ABCF
F0123456789ABCF
F0123456789ABCF
F0123456789ABCF
F0123456789ABCF
F0123456789ABCF
FFFFFFFFFFFFFFF
}
Alice -> Bob : Testing <$foo1{scale=3}>
@enduml


uml/reference_24-03-1_Black-and-White

@startuml

skinparam monochrome true

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


uml/reference_24-04-1_Shadowing

@startuml

left to right direction

skinparam shadowing<<no_shadow>> false
skinparam shadowing<<with_shadow>> true

actor User
(Glowing use case) <<with_shadow>> as guc
(Flat use case) <<no_shadow>> as fuc
User -- guc
User -- fuc

@enduml


uml/reference_24-05-1_Reverse-colors

@startuml

skinparam monochrome reverse

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


uml/reference_24-06-1_Colors

@startuml
colors
@enduml


uml/reference_24-08-1_Text-Alignment

@startuml
skinparam sequenceMessageAlign center
Alice -> Bob : Hi
Bob -> Alice : This is very long
@enduml


uml/reference_24-08-2_Text-Alignment

@startuml
skinparam sequenceMessageAlign right
Alice -> Bob : Hi
Bob -> Alice : This is very long
@enduml


uml/reference_24-08-3_Text-Alignment

@startuml
skinparam sequenceMessageAlign direction
Alice -> Bob : Hi
Bob -> Alice: Hi
@enduml


uml/reference_24-09-1_Examples

@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


uml/reference_24-09-2_Examples

@startuml
skinparam handwritten true

skinparam actor {
  BorderColor black
  FontName Courier
  BackgroundColor<< Human >> Gold
}

skinparam usecase {
  BackgroundColor DarkSeaGreen
  BorderColor DarkSlateGray

  BackgroundColor<< Main >> YellowGreen
  BorderColor<< Main >> YellowGreen

  ArrowColor Olive
}

User << Human >>
:Main Database: as MySql << Application >>
(Start) << One Shot >>
(Use the application) as (Use) << Main >>

User -> (Start)
User --> (Use)

MySql --> (Use)
@enduml


uml/reference_24-09-3_Examples

@startuml
skinparam roundcorner 20
skinparam class {
  BackgroundColor PaleGreen
  ArrowColor SeaGreen
  BorderColor SpringGreen
}
skinparam stereotypeCBackgroundColor YellowGreen

Class01 "1" *-- "many" Class02 : contains

Class03 o-- Class04 : aggregation
@enduml


uml/reference_24-09-4_Examples

@startuml
skinparam interface {
  backgroundColor RosyBrown
  borderColor orange
}

skinparam component {
  FontSize 13
  BackgroundColor<<Apache>> LightCoral
  BorderColor<<Apache>> #FF6655
  FontName Courier
  BorderColor black
  BackgroundColor gold
  ArrowFontName Impact
  ArrowColor #FF6655
  ArrowFontColor #777777
}

() "Data Access" as DA
[Web Server] << Apache >>

DA - [First Component]
[First Component] ..> () HTTP : use
HTTP - [Web Server]
@enduml


uml/reference_24-09-5_Examples

@startuml
[AA] <<static lib>>
[BB] <<shared lib>>
[CC] <<static lib>>

node node1
node node2 <<shared node>>
database Production

skinparam component {
  backgroundColor<<static lib>> DarkKhaki
  backgroundColor<<shared lib>> Green
}

skinparam node {
  borderColor Green
  backgroundColor Yellow
  backgroundColor<<shared node>> Magenta
}
skinparam databaseBackgroundColor Aqua
@enduml


uml/reference_24-10-1_List-of-all-skinparam-parameters

@startuml
help skinparams
@enduml


uml/reference_25-02-1_Variable-definition

@startuml
!$ab = "foo1"
!$cd = "foo2"
!$ef = $ab + $cd
Alice -> Bob : $ab
Alice -> Bob : $cd
Alice -> Bob : $ef
@enduml

uml/reference_25-04-1_Conditions

@startuml
!$a = 10
!$ijk = "foo"
Alice -> Bob : A
!if ($ijk == "foo") && ($a+10>=4)
Alice -> Bob : yes
!else
Alice -> Bob : This should not appear
!endif
Alice -> Bob : B
@enduml


uml/reference_25-05-1_While-loop

@startuml
!procedure $foo($arg)
:procedure start;
!while $arg!=0
!$i=3
#palegreen:arg=$arg;
!while $i!=0
:arg=$arg and i=$i;
!$i = $i - 1
!endwhile
!$arg = $arg - 1
!endwhile
:procedure end;
!endprocedure

start
$foo(2)
end
@enduml


uml/reference_25-05-2_While-loop

@startmindmap
!procedure $foo($arg)
  !while $arg!=0
    !$i=3
    **[#palegreen] arg = $arg
    !while $i!=0
      *** i = $i
      !$i = $i - 1
    !endwhile
    !$arg = $arg - 1
  !endwhile
!endprocedure

*:While
Loop;
$foo(2)
@endmindmap


uml/reference_25-06-1_Procedure

@startuml
!procedure $msg($source, $destination)
$source --> $destination
!endprocedure

!procedure $init_class($name)
class $name {
  $addCommonMethod()
}
!endprocedure


!procedure $addCommonMethod()
toString()
hashCode()
!endprocedure


$init_class("foo1")
$init_class("foo2")
$msg("foo1", "foo2")
@enduml


uml/reference_25-07-1_Return-function

@startuml
!function $double($a)
!return $a + $a
!endfunction

Alice -> Bob : The double of 3 is $double(3)
@enduml


uml/reference_25-07-2_Return-function

@startuml
!function $double($a) !return $a + $a

Alice -> Bob : The double of 3 is $double(3)
Alice -> Bob : $double("This work also for strings.")
@enduml


uml/reference_25-07-3_Return-function

@startuml
!function $dummy()
!local $ijk = "local"
!return "Alice -> Bob : " + $ijk
!endfunction

!global $ijk = "foo"

Alice -> Bob : $ijk
$dummy()
Alice -> Bob : $ijk
@enduml


uml/reference_25-08-1_Default-argument-value

@startuml
!function $inc($value, $step=1)
!return $value + $step
!endfunction

Alice -> Bob : Just one more $inc(3)
Alice -> Bob : Add two to three : $inc(3, 2)
@enduml


uml/reference_25-08-2_Default-argument-value

@startuml
!procedure defaulttest($x, $y="DefaultY", $z="DefaultZ")
note over Alice
  x = $x
  y = $y
  z = $z
end note
!endprocedure

defaulttest(1, 2, 3)
defaulttest(1, 2)
defaulttest(1)
@enduml


uml/reference_25-09-1_Unquoted-procedure-or-function

@startuml
!unquoted function id($text1, $text2="FOO") !return $text1 + $text2

alice -> bob : id(aa)
alice -> bob : id(ab,cd)
@enduml


uml/reference_25-10-1_Keywords-arguments

@startuml

!unquoted procedure $element($alias, $description="", $label="", $technology="", $size=12, $colour="green")
rectangle $alias as "
<color:$colour><<$alias>></color>
==$label==
//<size:$size>[$technology]</size>//

$description"
!endprocedure

$element(myalias, "This description is %newline()on several lines", $size=10, $technology="Java")
@enduml


uml/reference_25-11-1_Including-files-or-URL

@startuml

interface List
List : int size()
List : void clear()
List <|.. ArrayList
@enduml


uml/reference_25-14-1_Logging

@startuml
!function bold($text)
!$result = "<b>"+ $text +"</b>"
!log Calling bold function with $text. The result is $result
!return $result
!endfunction

Alice -> Bob : This is bold("bold")
Alice -> Bob : This is bold("a second call")
@enduml


uml/reference_25-15-1_Memory-dump

@startuml
!function $inc($string)
!$val = %intval($string)
!log value is $val
!dump_memory
!return $val+1
!endfunction

Alice -> Bob : 4 $inc("3")
!unused = "foo"
!dump_memory EOF
@enduml


uml/reference_25-16-1_Assertion

@startuml
Alice -> Bob : Hello
!assert %strpos("abcdef", "cd")==3 : "This always fails"
@enduml


uml/reference_25-19-1_Argument-concatenation

@startuml
!unquoted procedure COMP_TEXTGENCOMP(name)
[name] << Comp >>
interface Ifc << IfcType >> AS name##Ifc
name##Ifc - [name]
!endprocedure
COMP_TEXTGENCOMP(dummy)
@enduml


uml/reference_25-20-1_Dynamic-invocation

@startuml
!procedure $go()
Bob -> Alice : hello
!endprocedure

!$wrapper = "$go"

%invoke_procedure($wrapper)
@enduml


uml/reference_25-20-2_Dynamic-invocation

@startuml
!procedure $go($txt)
Bob -> Alice : $txt
!endprocedure

%invoke_procedure("$go", "hello from Bob...")
@enduml


uml/reference_25-20-3_Dynamic-invocation

@startuml
!function bold($text)
!return "<b>"+ $text +"</b>"
!endfunction

Alice -> Bob : %call_user_func("bold", "Hello") there
@enduml


uml/reference_25-21-1_Evaluation-of-addition-depending-of-data-types

@startuml
title
  <#LightBlue>|= |=  $a |=  $b |=  <U+0025>string($a + $b)|
  <#LightGray>| type | str | str | str (concatenation) |
  | example |= "a" |= "b" |= %string("a" + "b") |
  <#LightGray>| type | str | int | str (concatenation) |
  | ex.|= "a" |=  2  |= %string("a" + 2)   |
  <#LightGray>| type | str | int | str (concatenation) |
  | ex.|=  1  |= "b" |= %string(1 + "b")   |
  <#LightGray>| type | bool | str | str (concatenation) |
  | ex.|= <U+0025>true() |= "b" |= %string(%true() + "b") |
  <#LightGray>| type | str | bool | str (concatenation) |
  | ex.|= "a" |= <U+0025>false() |= %string("a" + %false()) |
  <#LightGray>| type |  int  |  int | int (addition of int) |
  | ex.|=  1  |=  2  |= %string(1 + 2)     |
  <#LightGray>| type |  bool  |  int | int (addition) |
  | ex.|= <U+0025>true() |= 2 |= %string(%true() + 2) |
  <#LightGray>| type |  int  |  bool | int (addition) |
  | ex.|=  1  |= <U+0025>false() |= %string(1 + %false()) |
  <#LightGray>| type |  int  |  int | int (addition) |
  | ex.|=  1  |=  <U+0025>intval("2")  |= %string(1 + %intval("2")) |
end title
@enduml


uml/reference_26-01-1_Examples

@startuml
skinparam handwritten true
skinparam backgroundColor #EEEBDC

actor 使用者
participant "頭等艙" as A
participant "第二類" as B
participant "最後一堂課" as 別的東西

使用者 -> A: 完成這項工作
activate A

A -> B: 創建請求
activate B

B -> 別的東西: 創建請求
activate 別的東西
別的東西 --> B: 這項工作完成
destroy 別的東西

B --> A: 請求創建
deactivate B

A --> 使用者: 做完
deactivate A
@enduml


uml/reference_26-01-2_Examples

@startuml

(*) --> "膩平台"
--> === S1 ===
--> 鞠躬向公眾
--> === S2 ===
--> 這傢伙波武器
--> (*)

skinparam backgroundColor #AAFFFF
skinparam activityStartColor red
skinparam activityBarColor SaddleBrown
skinparam activityEndColor Silver
skinparam activityBackgroundColor Peru
skinparam activityBorderColor Peru
@enduml


uml/reference_26-01-3_Examples

@startuml

skinparam usecaseBackgroundColor DarkSeaGreen
skinparam usecaseArrowColor Olive
skinparam actorBorderColor black
skinparam usecaseBorderColor DarkSlateGray

使用者 << 人類 >>
"主數據庫" as 數據庫 << 應用程式 >>
(草創) << 一桿 >>
"主数据燕" as (贏余) << 基本的 >>

使用者 -> (草創)
使用者 --> (贏余)

數據庫  --> (贏余)
@enduml


uml/reference_26-01-4_Examples

@startuml
() "Σωκράτης\nείναι ψεύτης" as Σωκράτης

Σωκράτης - [Πτηνά πολεμοχαρής]
[Πτηνά πολεμοχαρής] ..> () Αθήνα : Αυτές οι φράσεις\nδεν σημαίνουν τίποτα
@enduml


uml/reference_27-01-1_List-of-Standard-Library

@startuml
stdlib
@enduml


uml/reference_27-02-1_ArchiMate

@startuml
!include <archimate/Archimate>

title Archimate Sample - Internet Browser

' Elements
Business_Object(businessObject, "A Business Object")
Business_Process(someBusinessProcess,"Some Business Process")
Business_Service(itSupportService, "IT Support for Business (Application Service)")

Application_DataObject(dataObject, "Web Page Data \n 'on the fly'")
Application_Function(webpageBehaviour, "Web page behaviour")
Application_Component(ActivePartWebPage, "Active Part of the web page \n 'on the fly'")

Technology_Artifact(inMemoryItem,"in memory / 'on the fly' html/javascript")
Technology_Service(internetBrowser, "Internet Browser Generic & Plugin")
Technology_Service(internetBrowserPlugin, "Some Internet Browser Plugin")
Technology_Service(webServer, "Some web server")

'Relationships
Rel_Flow_Left(someBusinessProcess, businessObject, "")
Rel_Serving_Up(itSupportService, someBusinessProcess, "")
Rel_Specialization_Up(webpageBehaviour, itSupportService, "")
Rel_Flow_Right(dataObject, webpageBehaviour, "")
Rel_Specialization_Up(dataObject, businessObject, "")
Rel_Assignment_Left(ActivePartWebPage, webpageBehaviour, "")
Rel_Specialization_Up(inMemoryItem, dataObject, "")
Rel_Realization_Up(inMemoryItem, ActivePartWebPage, "")
Rel_Specialization_Right(inMemoryItem,internetBrowser, "")
Rel_Serving_Up(internetBrowser, webpageBehaviour, "")
Rel_Serving_Up(internetBrowserPlugin, webpageBehaviour, "")
Rel_Aggregation_Right(internetBrowser, internetBrowserPlugin, "")
Rel_Access_Up(webServer, inMemoryItem, "")
Rel_Serving_Up(webServer, internetBrowser, "")
@enduml


uml/reference_27-03-1_AWS-library

@startuml
!include <aws/common>
!include <aws/Storage/AmazonS3/AmazonS3>
AMAZONS3(s3_internal)
AMAZONS3(s3_partner,"Vendor's S3")
s3_internal <- s3_partner
@enduml

uml/reference_27-03-2_AWS-library

@startuml
!include <aws/common>
!include <aws/Storage/AmazonS3/AmazonS3>
!include <aws/Storage/AmazonS3/AmazonS3_LARGE>
skinparam nodeBackgroundColor White
skinparam storage<<**AmazonS3**>> {
  backgroundColor #F9DFDC
}
AMAZONS3(s3_internal,"Default S3")
AMAZONS3(s3_internal2,"S3 as node",node)
AMAZONS3_LARGE(s3_partner,"Large S3")
s3_internal2 <-r- s3_partner
s3_internal <-l- s3_partner
@enduml

uml/reference_27-04-1_Amazon-Labs-AWS-Library

@startuml
'Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
'SPDX-License-Identifier: MIT (For details, see https://github.com/awslabs/aws-icons-for-plantuml/blob/master/LICENSE)
!include <awslib/AWSCommon>
' Uncomment the following line to create simplified view
' !include <awslib/AWSSimplified>
!include <awslib/General/Users>
!include <awslib/Mobile/APIGateway>
!include <awslib/SecurityIdentityAndCompliance/Cognito>
!include <awslib/Compute/Lambda>
!include <awslib/Database/DynamoDB>
left to right direction
Users(sources, "Events", "millions of users")
APIGateway(votingAPI, "Voting API", "user votes")
Cognito(userAuth, "User Authentication", "jwt to submit votes")
Lambda(generateToken, "User Credentials", "return jwt")
Lambda(recordVote, "Record Vote", "enter or update vote per user")
DynamoDB(voteDb, "Vote Database", "one entry per user")
sources --> userAuth
sources --> votingAPI
userAuth <--> generateToken
votingAPI --> recordVote
recordVote --> voteDb
@enduml

uml/reference_27-05-1_Azure-library

@startuml
!include <azure/AzureCommon>
!include <azure/Analytics/AzureEventHub>
!include <azure/Analytics/AzureStreamAnalytics>
!include <azure/Databases/AzureCosmosDb>

left to right direction

agent "Device Simulator" as devices #fff

AzureEventHub(fareDataEventHub, "Fare Data", "PK: Medallion HackLicense VendorId; 3 TUs")
AzureEventHub(tripDataEventHub, "Trip Data", "PK: Medallion HackLicense VendorId; 3 TUs")
AzureStreamAnalytics(streamAnalytics, "Stream Processing", "6 SUs")
AzureCosmosDb(outputCosmosDb, "Output Database", "1,000 RUs")

devices --> fareDataEventHub
devices --> tripDataEventHub
fareDataEventHub --> streamAnalytics
tripDataEventHub --> streamAnalytics
streamAnalytics --> outputCosmosDb
@enduml


uml/reference_27-06-1_C4-library

@startuml
!include <C4/C4_Container>
Person(personAlias, "Label", "Optional Description")
Container(containerAlias, "Label", "Technology", "Optional Description")
System(systemAlias, "Label", "Optional Description")
Rel(personAlias, containerAlias, "Label", "Optional Technology")
@enduml

uml/reference_27-07-1_Cloud-Insight

@startuml
!include <cloudinsight/tomcat>
!include <cloudinsight/kafka>
!include <cloudinsight/java>
!include <cloudinsight/cassandra>

title Cloudinsight sprites example

skinparam monochrome true

rectangle "<$tomcat>\nwebapp" as webapp
queue "<$kafka>" as kafka
rectangle "<$java>\ndaemon" as daemon
database "<$cassandra>" as cassandra

webapp -> kafka
kafka -> daemon
daemon --> cassandra
@enduml


uml/reference_27-08-1_Cloudogu

@startuml
!include <cloudogu/common>
!include <cloudogu/dogus/jenkins>
!include <cloudogu/dogus/cloudogu>
!include <cloudogu/dogus/scm>
!include <cloudogu/dogus/smeagol>
!include <cloudogu/dogus/nexus>
!include <cloudogu/tools/k8s>

node "Cloudogu Ecosystem" <<$cloudogu>> {
  DOGU_JENKINS(jenkins, Jenkins) #ffffff
  DOGU_SCM(scm, SCM-Manager) #ffffff
  DOGU_SMEAGOL(smeagol, Smeagol) #ffffff
  DOGU_NEXUS(nexus,Nexus) #ffffff
}

TOOL_K8S(k8s, Kubernetes) #ffffff

actor developer

developer --> smeagol : "Edit Slides"
smeagol -> scm : Push
scm -> jenkins : Trigger
jenkins -> nexus : Deploy
jenkins --> k8s : Deploy
@enduml


uml/reference_27-09-1_Elastic-library

@startuml
!include <elastic/common>
!include <elastic/elasticsearch/elasticsearch>
!include <elastic/logstash/logstash>
!include <elastic/kibana/kibana>

ELASTICSEARCH(ElasticSearch, "Search and Analyze",database)
LOGSTASH(Logstash, "Parse and Transform",node)
KIBANA(Kibana, "Visualize",agent)

Logstash -right-> ElasticSearch: Transformed Data
ElasticSearch -right-> Kibana: Data to View
@enduml


uml/reference_27-09-2_Elastic-library

@startuml
'Adapted from https://github.com/Crashedmind/PlantUML-Elastic-icons/blob/master/All.puml

'Elastic stuff here
'================================

!include <elastic/common>
!include <elastic/apm/apm>
!include <elastic/app_search/app_search>
!include <elastic/beats/beats>
!include <elastic/cloud/cloud>
!include <elastic/cloud_in_kubernetes/cloud_in_kubernetes>
!include <elastic/code_search/code_search>
!include <elastic/ece/ece>
!include <elastic/eck/eck>
' Beware of the difference between Crashedmind and plantuml-stdlib version: with '_' usage!
!include <elastic/elasticsearch/elasticsearch>
!include <elastic/endpoint/endpoint>
!include <elastic/enterprise_search/enterprise_search>
!include <elastic/kibana/kibana>
!include <elastic/logging/logging>
!include <elastic/logstash/logstash>
!include <elastic/maps/maps>
!include <elastic/metrics/metrics>
!include <elastic/siem/siem>
!include <elastic/site_search/site_search>
!include <elastic/stack/stack>
!include <elastic/uptime/uptime>

skinparam agentBackgroundColor White

APM(apm)
APP_SEARCH(app_search)
BEATS(beats)
CLOUD(cloud)
CLOUD_IN_KUBERNETES(cloud_in_kubernetes)
CODE_SEARCH(code_search)
ECE(ece)
ECK(eck)
ELASTICSEARCH(elastic_search)
ENDPOINT(endpoint)
ENTERPRISE_SEARCH(enterprise_search)
KIBANA(kibana)
LOGGING(logging)
LOGSTASH(logstash)
MAPS(maps)
METRICS(metrics)
SIEM(siem)
SITE_SEARCH(site_search)
STACK(stack)
UPTIME(uptime)
@enduml


uml/reference_27-10-1_Google-Material-Icons

@startuml
!include <material/common>
' To import the sprite file you DON'T need to place a prefix!
!include <material/folder_move>

MA_FOLDER_MOVE(Red, 1, dir, rectangle, "A label")
@enduml


uml/reference_27-10-2_Google-Material-Icons

@startuml
!include <material/common>
' To import the sprite file you DON'T need to place a prefix!
!include <material/folder_move>

MA_FOLDER_MOVE(Red, 1, dir, rectangle, "A label") {
}

class foo {
  bar
}
@enduml


uml/reference_27-11-1_Kubernetes

@startuml
!include <kubernetes/k8s-sprites-unlabeled-25pct>
package "Infrastructure" {
  component "<$master>\nmaster" as master
  component "<$etcd>\netcd" as etcd
  component "<$node>\nnode" as node
}
@enduml


uml/reference_27-12-1_Logos

@startuml
!include <logos/flask>
!include <logos/kafka>
!include <logos/kotlin>
!include <logos/cassandra>

title Gil Barbara's logos example

skinparam monochrome true

rectangle "<$flask>\nwebapp" as webapp
queue "<$kafka>" as kafka
rectangle "<$kotlin>\ndaemon" as daemon
database "<$cassandra>" as cassandra

webapp -> kafka
kafka -> daemon
daemon --> cassandra
@enduml


uml/reference_27-12-2_Logos

@startuml
scale 0.7
!include <logos/apple-pay>
!include <logos/dinersclub>
!include <logos/discover>
!include <logos/google-pay>
!include <logos/jcb>
!include <logos/maestro>
!include <logos/mastercard>
!include <logos/paypal>
!include <logos/unionpay>
!include <logos/visaelectron>
!include <logos/visa>
' ...

title Gil Barbara's logos example - **Payment Scheme**

actor customer
rectangle "<$apple-pay>"    as ap
rectangle "<$dinersclub>"   as dc
rectangle "<$discover>"     as d
rectangle "<$google-pay>"   as gp
rectangle "<$jcb>"          as j
rectangle "<$maestro>"      as ma
rectangle "<$mastercard>"   as m
rectangle "<$paypal>"       as p
rectangle "<$unionpay>"     as up
rectangle "<$visa>"         as v
rectangle "<$visaelectron>" as ve
rectangle "..." as etc

customer --> ap
customer ---> dc
customer --> d
customer ---> gp
customer --> j
customer ---> ma
customer --> m
customer ---> p
customer --> up
customer ---> v
customer --> ve
customer ---> etc
@enduml


uml/reference_27-13-1_Office

@startuml
!include <tupadr3/common>

!include <office/Servers/database_server>
!include <office/Servers/application_server>
!include <office/Concepts/firewall_orange>
!include <office/Clouds/cloud_disaster_red>

title Office Icons Example

package "Sprites" {
  OFF_DATABASE_SERVER(db,DB)
  OFF_APPLICATION_SERVER(app,App-Server)
  OFF_FIREWALL_ORANGE(fw,Firewall)
  OFF_CLOUD_DISASTER_RED(cloud,Cloud)
  db <-> app
  app <--> fw
  fw <.left.> cloud
}
@enduml


uml/reference_27-13-2_Office

@startuml
!include <tupadr3/common>

!include <office/servers/database_server>
!include <office/servers/application_server>
!include <office/Concepts/firewall_orange>
!include <office/Clouds/cloud_disaster_red>

' Used to center the label under the images
skinparam defaultTextAlignment center

title Extended Office Icons Example

package "Use sprite directly" {
  [Some <$cloud_disaster_red> object]
}

package "Different macro usages" {
  OFF_CLOUD_DISASTER_RED(cloud1)
  OFF_CLOUD_DISASTER_RED(cloud2,Default with text)
  OFF_CLOUD_DISASTER_RED(cloud3,Other shape,Folder)
  OFF_CLOUD_DISASTER_RED(cloud4,Even another shape,Database)
  OFF_CLOUD_DISASTER_RED(cloud5,Colored,Rectangle, red)
  OFF_CLOUD_DISASTER_RED(cloud6,Colored background) #red
}
@enduml


uml/reference_27-14-1_Open-Security-Architecture

@startuml
'Adapted from https://github.com/Crashedmind/PlantUML-opensecurityarchitecture-icons/blob/master/all
scale .5
!include <osa/arrow/green/left/left>
!include <osa/arrow/yellow/right/right>
!include <osa/awareness/awareness>
!include <osa/contract/contract>
!include <osa/database/database>
!include <osa/desktop/desktop>
!include <osa/desktop/imac/imac>
!include <osa/device_music/device_music>
!include <osa/device_scanner/device_scanner>
!include <osa/device_usb/device_usb>
!include <osa/device_wireless_router/device_wireless_router>
!include <osa/disposal/disposal>
!include <osa/drive_optical/drive_optical>
!include <osa/firewall/firewall>
!include <osa/hub/hub>
!include <osa/ics/drive/drive>
!include <osa/ics/plc/plc>
!include <osa/ics/thermometer/thermometer>
!include <osa/id/card/card>
!include <osa/laptop/laptop>
!include <osa/lifecycle/lifecycle>
!include <osa/lightning/lightning>
!include <osa/media_flash/media_flash>
!include <osa/media_optical/media_optical>
!include <osa/media_tape/media_tape>
!include <osa/mobile/pda/pda>
!include <osa/padlock/padlock>
!include <osa/printer/printer>
!include <osa/site_branch/site_branch>
!include <osa/site_factory/site_factory>
!include <osa/vpn/vpn>
!include <osa/wireless/network/network>

rectangle "OSA" {
  rectangle "Left:\n <$left>"
  rectangle "Right:\n <$right>"
  rectangle "Awareness:\n <$awareness>"
  rectangle "Contract:\n <$contract>"
  rectangle "Database:\n <$database>"
  rectangle "Desktop:\n <$desktop>"
  rectangle "Imac:\n <$imac>"
  rectangle "Device_music:\n <$device_music>"
  rectangle "Device_scanner:\n <$device_scanner>"
  rectangle "Device_usb:\n <$device_usb>"
  rectangle "Device_wireless_router:\n <$device_wireless_router>"
  rectangle "Disposal:\n <$disposal>"
  rectangle "Drive_optical:\n <$drive_optical>"
  rectangle "Firewall:\n <$firewall>"
  rectangle "Hub:\n <$hub>"
  rectangle "Drive:\n <$drive>"
  rectangle "Plc:\n <$plc>"
  rectangle "Thermometer:\n <$thermometer>"
  rectangle "Card:\n <$card>"
  rectangle "Laptop:\n <$laptop>"
  rectangle "Lifecycle:\n <$lifecycle>"
  rectangle "Lightning:\n <$lightning>"
  rectangle "Media_flash:\n <$media_flash>"
  rectangle "Media_optical:\n <$media_optical>"
  rectangle "Media_tape:\n <$media_tape>"
  rectangle "Pda:\n <$pda>"
  rectangle "Padlock:\n <$padlock>"
  rectangle "Printer:\n <$printer>"
  rectangle "Site_branch:\n <$site_branch>"
  rectangle "Site_factory:\n <$site_factory>"
  rectangle "Vpn:\n <$vpn>"
  rectangle "Network:\n <$network>"
}
@enduml


uml/reference_27-15-1_Tupadr3-library

@startuml
!include <tupadr3/common>
!include <tupadr3/font-awesome/server>
!include <tupadr3/font-awesome/database>

title Styling example

FA_SERVER(web1,web1) #Green
FA_SERVER(web2,web2) #Yellow
FA_SERVER(web3,web3) #Blue
FA_SERVER(web4,web4) #YellowGreen

FA_DATABASE(db1,LIVE,database,white) #RoyalBlue
FA_DATABASE(db2,SPARE,database) #Red

db1 <--> db2

web1 <--> db1
web2 <--> db1
web3 <--> db1
web4 <--> db1
@enduml


uml/reference_27-15-2_Tupadr3-library

@startuml
!include <tupadr3/common>
!include <tupadr3/devicons/mysql>

DEV_MYSQL(db1)
DEV_MYSQL(db2,label of db2)
DEV_MYSQL(db3,label of db3,database)
DEV_MYSQL(db4,label of db4,database,red) #DeepSkyBlue
@enduml


uml/sequence-autonumber

@startuml
autonumber 10 10

B -> A: Hello
A -> B: Yes?
B -> A: Fresh foo!

@enduml

uml/sequence

@startuml
== Initialize ==
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
== Repeat ==
Alice -> Bob: message 1
Bob --> Alice: ok
|||
Alice -> Bob: message 2
Bob --> Alice: ok
||45||
Alice -> Bob: message 3
Bob --> Alice: ok
== Get Funky ==
Bob -->x Alice
Bob -->> Alice
Bob --\ Alice
Bob \\-- Alice
Bob -->o Alice
Bob <-->o Alice
Bob <--> Alice
note right: These are\nthe Funky arrows,\nYes,...
@enduml