Visualization

Mechanoid emits Mermaid (and GraphViz) from the same Machine you run. This site feeds that source into mermoid so the published picture fails CI if the Mermaid cannot parse.

State diagram

MermaidVisualizer.stateDiagram(machine, Some(Created)) (also machine.toMermaidStateDiagram(Some(Created))):

{
  enum OrderState derives Finite:
    case Created, Processing, Completed

  enum OrderEvent derives Finite:
    case Start, Finish

  import OrderState.*, OrderEvent.*

  val machine = Machine(
    assembly[OrderState, OrderEvent](
      Created via Start to Processing,
      Processing via Finish to Completed,
    )
  )

  Mermoid.diagram(
    MermaidVisualizer.stateDiagram(machine, Some(Created)),
    DocsDiagrams.diagramConfig,
  )
}
StartFinish

Flowchart

MermaidVisualizer.flowchart(machine) is often clearer for dense graphs (Domain pages use it):

{
  enum OrderState derives Finite:
    case Created, Processing, Completed

  enum OrderEvent derives Finite:
    case Start, Finish

  import OrderState.*, OrderEvent.*

  val machine = Machine(
    assembly[OrderState, OrderEvent](
      Created via Start to Processing,
      Processing via Finish to Completed,
    )
  )

  Mermoid.diagram(
    MermaidVisualizer.flowchart(machine),
    DocsDiagrams.diagramConfig,
  )
}
StartFinish

Traces and GraphViz

Also available:

  • toMermaidFlowchartWithTrace(trace) / trace.toMermaidSequenceDiagram

  • toGraphViz(...) / toGraphVizWithTrace(...) / trace.toGraphVizTimeline

Mark sensitive fields with @sensitive when exporting. Feed Mermaid strings into Mermoid.diagram(...) or a fenced mermaid block.

Next: Reference.