Atelier

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();
}