# Flow node types

> Page: https://docs.plotwork.dev/reference/language/flow-nodes. Index of every page: https://docs.plotwork.dev/llms.txt

Every type a flow node can take, with its shape, default tone and icon, the technology marks a node can carry, and the mark of a planned change.

## TL;DR

| Question | Answer |
|---|---|
| How is a node written? | `node <id> <type> "Label"`, with optional `sub=`, `tone=`, `icon=`, `stack=`, and `change=` options. |
| How many types are there? | 16: `person`, `agent`, `client`, `service`, `gateway`, `function`, `database`, `cache`, `queue`, `storage`, `identity`, `secret`, `external`, `step`, `decision`, `terminal`. |
| Which types can be a sequence actor? | `person`, `agent`, `client`, `service`, `gateway`, `function`, `database`, `cache`, `queue`, `storage`, `identity`, `secret`, `external`, `step`. |
| How do I show a technology? | `stack=` carries up to 3 marks, such as `stack=simple:angular,simple:typescript`. |
| How do I show what a change does? | `change=` takes `create`, `update`, `replace`, `destroy`: a badge on the card and an outline in the change's tone. |

## Node types

A flow node is written `node <id> <type> "Label"`, with optional `sub=`, `tone=`, `icon=`, `stack=`, and `change=` options. A type sets the default tone, icon, and look. A `step` has no icon, so it has no chip for its tone to colour, and a tone written on it tints the card the way a decision is tinted. A sequence actor may use any type marked yes in the last column.

| Type | Shape | Default tone | Default icon | Outline | Fill | Actor |
|---|---|---|---|---|---|---|
| `person` | card | neutral | `lucide:user` | solid | plain | yes |
| `agent` | card | violet | `lucide:bot` | solid | plain | yes |
| `client` | card | neutral | `lucide:monitor-smartphone` | solid | plain | yes |
| `service` | card | blue | `lucide:server` | solid | plain | yes |
| `gateway` | card | blue | `lucide:network` | solid | plain | yes |
| `function` | card | blue | `lucide:zap` | solid | plain | yes |
| `database` | card | aqua | `lucide:database` | solid | plain | yes |
| `cache` | card | orange | `lucide:database-zap` | solid | plain | yes |
| `queue` | card | orange | `lucide:layers` | solid | plain | yes |
| `storage` | card | aqua | `lucide:hard-drive` | solid | plain | yes |
| `identity` | card | violet | `lucide:id-card` | solid | plain | yes |
| `secret` | card | red | `lucide:lock-keyhole` | solid | plain | yes |
| `external` | card | neutral | `lucide:cloud` | dashed | plain | yes |
| `step` | card | neutral | `none` | solid | plain | yes |
| `decision` | card | amber | `lucide:split` | solid | tinted | no |
| `terminal` | pill | neutral | `none` | solid | plain | no |

## Technology marks

`stack=` puts small technology marks on a card, under its text: `node app storage "Web app" stack=simple:angular,simple:typescript`. Each mark is an icon reference, usually from the `simple` set, checked like `icon=`. A card carries the number of marks in the limits table, each listed once and drawn in the order written. A mark is never drawn over the text or the icon, because the card grows to hold the row, and the text description lists the marks. A `terminal` pill has no room for marks and reports an error.

## Planned changes

A review of infrastructure needs to see at a glance what a change makes, alters, and removes. `change=` marks a node with a round badge on its top edge and outlines the card in the change's tone: `node db database "orders-db" icon=aws:rds change=update`. The mark works on every card, an icon from a vendor set too, and on a pill. The badge sits in the card's top padding, so it never covers the text or the icon, and the text description names the change. The `terraform-plan` import sets it on every resource the plan changes.

| Value | Sign | Tone | Means the thing is |
|---|---|---|---|
| `create` | `+` | green | made by the change |
| `update` | `~` | amber | changed in place |
| `replace` | `±` | orange | destroyed and made again |
| `destroy` | `−` | red | destroyed by the change |

## See also

| Doc | Why |
|---|---|
| [Language reference](https://docs.plotwork.dev/reference/language.md) | Every page of the reference and what each covers |
| [Groups and overlays](https://docs.plotwork.dev/reference/language/groups.md) | Frames around nodes |
| [Icon sets](https://docs.plotwork.dev/reference/language/icon-sets.md) | Where an `icon=` value comes from |
| [Icon reference](https://docs.plotwork.dev/reference/icons.md) | Every bundled icon and how to find one |
