Component Diagram

Let's have few examples :

Components

Components must be bracketed.

You can also use the component keyword to defines a component. And you can define an alias, using the as keyword. This alias will be used latter, when defining relations.

@startuml

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

@enduml
simple component UML diagram

Interfaces

Interface can be defined using the () symbol (because this looks like a circle).

You can also use the interface keyword to defines an interface. And you can define an alias, using the as keyword. This alias will be used latter, when defining relations.

We will see latter that interface definition is optional.

@startuml

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

@enduml
basic component diagram with interface

Basic example

Links between elements are made using combinations of dotted line (..), straight line (--), and arrows (-->) symbols.

@startuml

DataAccess - [First Component] 
[First Component] ..> HTTP : use

@enduml
link between component

Using notes

You can use the note left of , note right of , note top of , note bottom of keywords to define notes related to a single object.

A note can be also define alone with the note keywords, then linked to other objects using the .. symbol.

@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
adding notes on component UML diagrams

Grouping Components

You can use several keywords to group components and interfaces together:
  • package
  • node
  • folder
  • frame
  • cloud
  • database
@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
using packages in UML component diagrams

Changing arrows direction

By default, links between classes have two dashes -- and are vertically oriented. It is possible to use horizontal link by putting a single dash (or dot) like this:
@startuml
[Component] --> Interface1
[Component] -> Interface2
@enduml
setting arrow direction in component diagram
You can also change directions by reversing the link:
@startuml
Interface1 <-- [Component]
Interface2 <- [Component]
@enduml
reverse arrow in UML component diagram
It is also possible to change arrow direction by adding left, right, up or down keywords inside the arrow:
@startuml
[Component] -left-> left 
[Component] -right-> right 
[Component] -up-> up
[Component] -down-> down
@enduml
using left right up down in component diagram
You can shorten the arrow by using only the first character of the direction (for example, -d- instead of -down-) or the two first characters (-do-).

Please note that you should not abuse this functionality : Graphviz gives usually good results without tweaking.

Title the diagram

The title keywords is used to put a title.

You can use title and end title keywords for a longer title, as in sequence diagrams.

@startuml
title Very simple component\ndiagram

interface "Data Access" as DA

DA - [First Component] 
[First Component] ..> HTTP : use

@enduml
adding a title to UML component diagram

Use UML2 notation

The skinparam componentStyle uml2 command is used to switch to UML2 notation.
@startuml
skinparam componentStyle uml2

interface "Data Access" as DA

DA - [First Component] 
[First Component] ..> HTTP : use

@enduml
using UML2 notation

Individual colors

You can specify a color after component definition.
@startuml
component  [Web Server] #Yellow
@enduml
setting colors for component diagram

Using Sprite in Stereotype

You can use sprites within stereotype components.
@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
Using sprites with component stereotypes

Skinparam

You can use the skinparam command to change colors and fonts for the drawing.

You can use this command :

You can define specific color and fonts for stereotyped components and interfaces.
@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
colors and fonts setting in UML component diagram
@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
using stereotype for colors in UML component diagram