# `Choreo.Render.DOT`
[🔗](https://github.com/code-shoily/choreo/blob/v0.14.1/lib/choreo/render/dot.ex#L1)

DOT (Graphviz) rendering for `Choreo` architecture diagrams.

This module translates a `Choreo` struct into the DOT language with
sensible defaults for infrastructure diagrams:

* Databases are rendered as **cylinders**
* Caches as **octagons**
* Services as **3D boxes**
* Networks as **clouds**
* Users as **double circles**
* Load balancers as **hexagons**
* Queues as **components**
* Storage as **tabs**

Edges are styled according to their semantic type (`:connection` or
`:dataflow`).

Themes (built-in or custom) control colours, shapes, fonts, and layout.
See `Choreo.Theme` for details.

# `to_dot`

```elixir
@spec to_dot(Choreo.t(), keyword()) :: String.t()
```

Renders a `Choreo` to a DOT string.

## Options

  * `:theme` - `:default`, `:dark`, `:minimal`, `:warm`, `:forest`, or `:ocean`
  * `:subgraphs` - list of subgraph / cluster definitions (manual override)
  * `:ranks` - rank constraints
  * Any other option accepted by `Yog.Render.DOT.to_dot/2`

## Examples

    dot = Choreo.Render.DOT.to_dot(system)
    dot = Choreo.Render.DOT.to_dot(system, theme: :dark)

    theme = Choreo.Theme.custom(colors: [database: "#ff0000"])
    dot = Choreo.Render.DOT.to_dot(system, theme: theme)

---

*Consult [api-reference.md](api-reference.md) for complete listing*
