collab/mermaid/docs/syntax/architecture.mdblame
View source
6dd74de1> **Warning**
6dd74de2>
6dd74de3> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
6dd74de4>
6dd74de5> ## Please edit the corresponding file in [/packages/mermaid/src/docs/syntax/architecture.md](../../packages/mermaid/src/docs/syntax/architecture.md).
6dd74de6
6dd74de7# Architecture Diagrams Documentation (v11.1.0+)
6dd74de8
6dd74de9> In the context of mermaid-js, the architecture diagram is used to show the relationship between services and resources commonly found within the Cloud or CI/CD deployments. In an architecture diagram, services (nodes) are connected by edges. Related services can be placed within groups to better illustrate how they are organized.
6dd74de10
6dd74de11## Example
6dd74de12
6dd74de13```mermaid-example
6dd74de14architecture-beta
6dd74de15 group api(cloud)[API]
6dd74de16
6dd74de17 service db(database)[Database] in api
6dd74de18 service disk1(disk)[Storage] in api
6dd74de19 service disk2(disk)[Storage] in api
6dd74de20 service server(server)[Server] in api
6dd74de21
6dd74de22 db:L -- R:server
6dd74de23 disk1:T -- B:server
6dd74de24 disk2:T -- B:db
6dd74de25```
6dd74de26
6dd74de27```mermaid
6dd74de28architecture-beta
6dd74de29 group api(cloud)[API]
6dd74de30
6dd74de31 service db(database)[Database] in api
6dd74de32 service disk1(disk)[Storage] in api
6dd74de33 service disk2(disk)[Storage] in api
6dd74de34 service server(server)[Server] in api
6dd74de35
6dd74de36 db:L -- R:server
6dd74de37 disk1:T -- B:server
6dd74de38 disk2:T -- B:db
6dd74de39```
6dd74de40
6dd74de41## Syntax
6dd74de42
6dd74de43The building blocks of an architecture are `groups`, `services`, `edges`, and `junctions`.
6dd74de44
6dd74de45For supporting components, icons are declared by surrounding the icon name with `()`, while labels are declared by surrounding the text with `[]`.
6dd74de46
6dd74de47To begin an architecture diagram, use the keyword `architecture-beta`, followed by your groups, services, edges, and junctions. While each of the 3 building blocks can be declared in any order, care must be taken to ensure the identifier was previously declared by another component.
6dd74de48
6dd74de49### Groups
6dd74de50
6dd74de51The syntax for declaring a group is:
6dd74de52
6dd74de53```
6dd74de54group {group id}({icon name})[{title}] (in {parent id})?
6dd74de55```
6dd74de56
6dd74de57Put together:
6dd74de58
6dd74de59```
6dd74de60group public_api(cloud)[Public API]
6dd74de61```
6dd74de62
6dd74de63creates a group identified as `public_api`, uses the icon `cloud`, and has the label `Public API`.
6dd74de64
6dd74de65Additionally, groups can be placed within a group using the optional `in` keyword
6dd74de66
6dd74de67```
6dd74de68group private_api(cloud)[Private API] in public_api
6dd74de69```
6dd74de70
6dd74de71### Services
6dd74de72
6dd74de73The syntax for declaring a service is:
6dd74de74
6dd74de75```
6dd74de76service {service id}({icon name})[{title}] (in {parent id})?
6dd74de77```
6dd74de78
6dd74de79Put together:
6dd74de80
6dd74de81```
6dd74de82service database1(database)[My Database]
6dd74de83```
6dd74de84
6dd74de85creates the service identified as `database1`, using the icon `database`, with the label `My Database`.
6dd74de86
6dd74de87If the service belongs to a group, it can be placed inside it through the optional `in` keyword
6dd74de88
6dd74de89```
6dd74de90service database1(database)[My Database] in private_api
6dd74de91```
6dd74de92
6dd74de93### Edges
6dd74de94
6dd74de95The syntax for declaring an edge is:
6dd74de96
6dd74de97```
6dd74de98{serviceId}{{group}}?:{T|B|L|R} {<}?--{>}? {T|B|L|R}:{serviceId}{{group}}?
6dd74de99```
6dd74de100
6dd74de101#### Edge Direction
6dd74de102
6dd74de103The side of the service the edge comes out of is specified by adding a colon (`:`) to the side of the service connecting to the arrow and adding `L|R|T|B`
6dd74de104
6dd74de105For example:
6dd74de106
6dd74de107```
6dd74de108db:R -- L:server
6dd74de109```
6dd74de110
6dd74de111creates an edge between the services `db` and `server`, with the edge coming out of the right of `db` and the left of `server`.
6dd74de112
6dd74de113```
6dd74de114db:T -- L:server
6dd74de115```
6dd74de116
6dd74de117creates a 90 degree edge between the services `db` and `server`, with the edge coming out of the top of `db` and the left of `server`.
6dd74de118
6dd74de119#### Arrows
6dd74de120
6dd74de121Arrows can be added to each side of an edge by adding `<` before the direction on the left, and/or `>` after the direction on the right.
6dd74de122
6dd74de123For example:
6dd74de124
6dd74de125```
6dd74de126subnet:R --> L:gateway
6dd74de127```
6dd74de128
6dd74de129creates an edge with the arrow going into the `gateway` service
6dd74de130
6dd74de131#### Edges out of Groups
6dd74de132
6dd74de133To have an edge go from a group to another group or service within another group, the `{group}` modifier can be added after the `serviceId`.
6dd74de134
6dd74de135For example:
6dd74de136
6dd74de137```
6dd74de138service server[Server] in groupOne
6dd74de139service subnet[Subnet] in groupTwo
6dd74de140
6dd74de141server{group}:B --> T:subnet{group}
6dd74de142```
6dd74de143
6dd74de144creates an edge going out of `groupOne`, adjacent to `server`, and into `groupTwo`, adjacent to `subnet`.
6dd74de145
6dd74de146It's important to note that `groupId`s cannot be used for specifying edges and the `{group}` modifier can only be used for services within a group.
6dd74de147
6dd74de148### Junctions
6dd74de149
6dd74de150Junctions are a special type of node which acts as a potential 4-way split between edges.
6dd74de151
6dd74de152The syntax for declaring a junction is:
6dd74de153
6dd74de154```
6dd74de155junction {junction id} (in {parent id})?
6dd74de156```
6dd74de157
6dd74de158```mermaid-example
6dd74de159architecture-beta
6dd74de160 service left_disk(disk)[Disk]
6dd74de161 service top_disk(disk)[Disk]
6dd74de162 service bottom_disk(disk)[Disk]
6dd74de163 service top_gateway(internet)[Gateway]
6dd74de164 service bottom_gateway(internet)[Gateway]
6dd74de165 junction junctionCenter
6dd74de166 junction junctionRight
6dd74de167
6dd74de168 left_disk:R -- L:junctionCenter
6dd74de169 top_disk:B -- T:junctionCenter
6dd74de170 bottom_disk:T -- B:junctionCenter
6dd74de171 junctionCenter:R -- L:junctionRight
6dd74de172 top_gateway:B -- T:junctionRight
6dd74de173 bottom_gateway:T -- B:junctionRight
6dd74de174```
6dd74de175
6dd74de176```mermaid
6dd74de177architecture-beta
6dd74de178 service left_disk(disk)[Disk]
6dd74de179 service top_disk(disk)[Disk]
6dd74de180 service bottom_disk(disk)[Disk]
6dd74de181 service top_gateway(internet)[Gateway]
6dd74de182 service bottom_gateway(internet)[Gateway]
6dd74de183 junction junctionCenter
6dd74de184 junction junctionRight
6dd74de185
6dd74de186 left_disk:R -- L:junctionCenter
6dd74de187 top_disk:B -- T:junctionCenter
6dd74de188 bottom_disk:T -- B:junctionCenter
6dd74de189 junctionCenter:R -- L:junctionRight
6dd74de190 top_gateway:B -- T:junctionRight
6dd74de191 bottom_gateway:T -- B:junctionRight
6dd74de192```
6dd74de193
6dd74de194## Icons
6dd74de195
6dd74de196By default, architecture diagram supports the following icons: `cloud`, `database`, `disk`, `internet`, `server`.
6dd74de197Users can use any of the 200,000+ icons available in iconify.design, or add other custom icons, by [registering an icon pack](../config/icons.md).
6dd74de198
6dd74de199After the icons are installed, they can be used in the architecture diagram by using the format "name:icon-name", where name is the value used when registering the icon pack.
6dd74de200
6dd74de201```mermaid-example
6dd74de202architecture-beta
6dd74de203 group api(logos:aws-lambda)[API]
6dd74de204
6dd74de205 service db(logos:aws-aurora)[Database] in api
6dd74de206 service disk1(logos:aws-glacier)[Storage] in api
6dd74de207 service disk2(logos:aws-s3)[Storage] in api
6dd74de208 service server(logos:aws-ec2)[Server] in api
6dd74de209
6dd74de210 db:L -- R:server
6dd74de211 disk1:T -- B:server
6dd74de212 disk2:T -- B:db
6dd74de213```
6dd74de214
6dd74de215```mermaid
6dd74de216architecture-beta
6dd74de217 group api(logos:aws-lambda)[API]
6dd74de218
6dd74de219 service db(logos:aws-aurora)[Database] in api
6dd74de220 service disk1(logos:aws-glacier)[Storage] in api
6dd74de221 service disk2(logos:aws-s3)[Storage] in api
6dd74de222 service server(logos:aws-ec2)[Server] in api
6dd74de223
6dd74de224 db:L -- R:server
6dd74de225 disk1:T -- B:server
6dd74de226 disk2:T -- B:db
6dd74de227```