2024-07-06 16:24:08 -05:00
> **Warning**
>
> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
>
> ## Please edit the corresponding file in [/packages/mermaid/src/docs/syntax/architecture.md](../../packages/mermaid/src/docs/syntax/architecture.md).
# Architecture Diagrams Documentation (v\<MERMAID_RELEASE_VERSION>+)
> 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.
## Example
```mermaid-example
2024-07-22 09:34:36 -05:00
architecture-beta
2024-07-06 16:24:08 -05:00
group api(cloud)[API]
service db(database)[Database] in api
service disk1(disk)[Storage] in api
service disk2(disk)[Storage] in api
service server(server)[Server] in api
2024-07-23 15:31:11 -05:00
db:L -- R:server
disk1:T -- B:server
disk2:T -- B:db
2024-07-06 16:24:08 -05:00
```
```mermaid
2024-07-22 09:34:36 -05:00
architecture-beta
2024-07-06 16:24:08 -05:00
group api(cloud)[API]
service db(database)[Database] in api
service disk1(disk)[Storage] in api
service disk2(disk)[Storage] in api
service server(server)[Server] in api
2024-07-23 15:31:11 -05:00
db:L -- R:server
disk1:T -- B:server
disk2:T -- B:db
2024-07-06 16:24:08 -05:00
```
## Syntax
2024-07-06 16:34:03 -05:00
The building blocks of an architecture are `groups` , `services` , `edges` , and `junctions` .
2024-07-06 16:24:08 -05:00
For supporting components, icons are declared by surrounding the icon name with `()` , while labels are declared by surrounding the text with `[]` .
2024-07-22 09:34:36 -05:00
To 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.
2024-07-06 16:24:08 -05:00
### Groups
The syntax for declaring a group is:
```
group {group id}({icon name})[{title}] (in {parent id})?
```
Put together:
```
group public_api(cloud)[Public API]
```
creates a group identified as `public_api` , uses the icon `cloud` , and has the label `Public API` .
Additionally, groups can be placed within a group using the optional `in` keyword
```
group private_api(cloud)[Private API] in public_api
```
### Services
2024-07-06 16:34:03 -05:00
The syntax for declaring a service is:
2024-07-06 16:24:08 -05:00
```
service {service id}({icon name})[{title}] (in {parent id})?
```
Put together:
```
service database(db)[Database]
```
creates the service identified as `database` , using the icon `db` , with the label `Database` .
If the service belongs to a group, it can be placed inside it through the optional `in` keyword
```
service database(db)[Database] in private_api
```
### Edges
2024-07-06 16:34:03 -05:00
The syntax for declaring an edge is:
```
2024-07-23 15:31:11 -05:00
{serviceId}{{group}}?:{T|B|L|R} {< }?--{>}? {T|B|L|R}:{serviceId}{{group}}?
2024-07-06 16:34:03 -05:00
```
#### Edge Direction
2024-07-23 15:31:11 -05:00
The 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`
2024-07-06 16:34:03 -05:00
For example:
```
2024-07-23 15:31:11 -05:00
db:R -- L:server
2024-07-06 16:34:03 -05:00
```
creates an edge between the services `db` and `server` , with the edge coming out of the right of `db` and the left of `server` .
```
2024-07-23 15:31:11 -05:00
db:T -- L:server
2024-07-06 16:34:03 -05:00
```
creates 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` .
#### Arrows
2024-07-23 15:31:11 -05:00
Arrows 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.
2024-07-06 16:34:03 -05:00
For example:
```
2024-07-23 15:31:11 -05:00
subnet:R --> L:gateway
2024-07-06 16:34:03 -05:00
```
creates an edge with the arrow going into the `gateway` service
#### Edges out of Groups
To have an edge go from a group to another group or service within another group, the `{group}` modifier can be added after the `serviceId` .
For example:
```
service server[Server] in groupOne
service subnet[Subnet] in groupTwo
2024-07-23 15:31:11 -05:00
server{group}:B --> T:subnet{group}
2024-07-06 16:34:03 -05:00
```
creates an edge going out of `groupOne` , adjacent to `server` , and into `groupTwo` , adjacent to `subnet` .
It'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.
### Junctions
Junctions are a special type of node which acts as a potential 4-way split between edges.
The syntax for declaring a junction is:
```
junction {junction id} (in {parent id})?
```
```mermaid-example
2024-07-22 09:34:36 -05:00
architecture-beta
2024-07-06 16:34:03 -05:00
service left_disk(disk)[Disk]
service top_disk(disk)[Disk]
service bottom_disk(disk)[Disk]
service top_gateway(internet)[Gateway]
service bottom_gateway(internet)[Gateway]
junction junctionCenter
junction junctionRight
2024-07-23 15:31:11 -05:00
left_disk:R -- L:junctionCenter
top_disk:B -- T:junctionCenter
bottom_disk:T -- B:junctionCenter
junctionCenter:R -- L:junctionRight
top_gateway:B -- T:junctionRight
bottom_gateway:T -- B:junctionRight
2024-07-06 16:34:03 -05:00
```
```mermaid
2024-07-22 09:34:36 -05:00
architecture-beta
2024-07-06 16:34:03 -05:00
service left_disk(disk)[Disk]
service top_disk(disk)[Disk]
service bottom_disk(disk)[Disk]
service top_gateway(internet)[Gateway]
service bottom_gateway(internet)[Gateway]
junction junctionCenter
junction junctionRight
2024-07-23 15:31:11 -05:00
left_disk:R -- L:junctionCenter
top_disk:B -- T:junctionCenter
bottom_disk:T -- B:junctionCenter
junctionCenter:R -- L:junctionRight
top_gateway:B -- T:junctionRight
bottom_gateway:T -- B:junctionRight
2024-07-06 16:34:03 -05:00
```
2024-07-06 16:24:08 -05:00
## Configuration