Getting Started
atelier/diagram has two inputs and two outputs:
- Input: fluent PHP builders or Mermaid text.
- Output: SVG geometry or canonical Mermaid markdown.
Install
composer require atelier/diagram
Build With PHP
use Atelier\Diagram\Diagram;
$diagram = Diagram::flowchart()
->node('Cart', 'Cart')
->edge('Cart', 'Payment', 'checkout')
->node('Payment', 'Payment')
->build();
echo Diagram::of($diagram)->toSvg();
Each builder produces a typed immutable model. Diagram::of($model) wraps the model for rendering.
Parse Mermaid
$diagram = Diagram::fromMermaid(<<<'MERMAID'
flowchart TD
Cart[Cart]
Cart -->|checkout| Payment
Payment[Payment]
MERMAID);
$svg = $diagram->toSvg();
$canonical = $diagram->toMermaid();
Flowcharts accept the TD, TB, and LR directions. Venn diagrams have no text grammar in this package.
Diagram types
Each type has the same documentation sections: overview, format, builder API, options, themes, parse, debug, and examples.
| Diagram | Builder | Mermaid |
|---|---|---|
| State | Diagram::state() |
stateDiagram-v2 / stateDiagram |
| Venn | Diagram::venn() |
|
| Git graph | Diagram::git() |
gitGraph |
| Sequence | Diagram::sequence() |
sequenceDiagram |
| Flowchart | Diagram::flowchart() |
flowchart |
| Class | Diagram::classDiagram() |
classDiagram |
| ER | Diagram::er() |
erDiagram |
| Timeline | Diagram::timeline() |
timeline |
| Journey | Diagram::journey() |
journey |
| Mindmap | Diagram::mindmap() |
mindmap |
| Requirement | Diagram::requirement() |
requirementDiagram |
| Kanban | Diagram::kanban() |
kanban |
| Block | Diagram::block() |
block |
| Architecture | Diagram::architecture() |
architecture |
| C4 | Diagram::c4() |
C4Context / C4Container / C4Component |
Output
$wrapped = Diagram::of($diagram);
$wrapped->toSvg(); // string
$wrapped->toSvgDocument(); // Atelier\Svg\Document
$wrapped->saveSvg('x.svg');
$wrapped->toMermaid(); // raw Mermaid, when supported
$wrapped->toMarkdown(); // fenced mermaid block, when supported
Error Handling
Parsers are strict. Unsupported syntax throws ParseException with a 1-based source line:
use Atelier\Diagram\Exception\ParseException;
try {
Diagram::fromMermaid($source);
} catch (ParseException $e) {
$e->getLineNumber();
$e->getSourceLine();
}