tasuku43 / mermaid-class-diagram
Generate class diagrams code written in mermaid-js.
v0.7.0
2025-08-31 09:09 UTC
Requires
- nikic/php-parser: ^4.14 || ^5.0
- symfony/console: ^7.0
- symfony/finder: ^7.0
Requires (Dev)
- phpunit/phpunit: ^9.5 || ^12.0
This package is auto-updated.
Last update: 2025-09-08 06:09:07 UTC
README
Overview
Generate Mermaid-js class diagram from php code.
This tool focuses on the relationships between classes and omits the details of class internals at this stage.
Installation
Via Composer
composer require --dev tasuku43/mermaid-class-diagram
Usage
Command
vendor/bin/mermaid-class-diagram generate --path <path> [options]
Options
--path <string>
: Required. Directory (recursively scanned) or single PHP file.--exclude-relationships <csv>
: Hide edge types; case-insensitive; aliases supported.dependency|dependencies|dep|deps
composition|compositions|comp
inheritance|inheritances|extends
realization|realizations|implements
--trait-mode <mode>
: Trait rendering mode. Default:flatten
.with-traits
(aliases:with_traits
,with
): show trait nodes anduse
edges; suppress class-level comp/dep duplicates provided by traits.flatten
(aliases:flat
): hide trait nodes anduse
edges; reassign trait-origin comp/dep to using classes; supports trait→trait→class chains; deduplicates.
Examples
Execute command by specifying a directory (sample project)
$ vendor/bin/mermaid-class-diagram generate --path tests/data/Project classDiagram class AbstractController { <<abstract>> } class AuditLogger { } class AuditTarget { } class User { } class UserController { } class UserRepository { } class UserRepositoryInterface { <<interface>> } class UserService { } class UserStatus { <<enum>> } User *-- UserStatus: composition AbstractController <|-- UserController: inheritance UserController *-- UserService: composition UserRepository ..> User: dependency UserRepositoryInterface <|.. UserRepository: realization UserRepositoryInterface ..> User: dependency UserService *-- AuditLogger: composition UserService ..> AuditTarget: dependency UserService ..> InvalidArgumentException: dependency UserService ..> User: dependency UserService *-- UserRepositoryInterface: composition
classDiagram class SomeAbstractClass { <<abstract>> } class SomeClassA { } class SomeClassB { } class SomeClassC { } class SomeClassD { } class SomeClassE { } class SomeInterface { <<interface>> } SomeInterface <|.. SomeAbstractClass: realization SomeAbstractClass <|-- SomeClassA: inheritance SomeClassA *-- SomeClassB: composition SomeClassA *-- SomeClassC: composition SomeClassA ..> SomeClassD: dependency SomeClassE *-- SomeClassA: composition SomeClassE ..> SomeClassB: dependency SomeClassE ..> SomeClassC: dependencyLoading
Execute command by specifying a file (sample file)
$ vendor/bin/mermaid-class-diagram generate --path tests/data/Project/Controller/UserController.php classDiagram class UserController { } AbstractController <|-- UserController: inheritance UserController *-- UserService: composition
classDiagram class SomeClassA { } SomeAbstractClass <|-- SomeClassA: inheritance SomeClassA *-- SomeClassB: composition SomeClassA *-- SomeClassC: composition SomeClassD <.. SomeClassA: dependencyLoading
Filter relationships
You can hide specific relationship types via CSV with --exclude-relationships
.
- Allowed values (case-insensitive, aliases supported):
dependency
|dependencies
|dep
|deps
composition
|compositions
|comp
inheritance
|inheritances
|extends
realization
|realizations
|implements
Examples
# Hide dependencies and compositions $ vendor/bin/mermaid-class-diagram generate --path src --exclude-relationships dependency,composition # Hide only dependencies $ vendor/bin/mermaid-class-diagram generate --path src --exclude-relationships dependency
Traits
There are two render modes for traits (the CLI uses Flatten by default):
- Flatten (default)
- Hides trait nodes and
use
edges. - Reassigns trait-origin composition/dependency edges to the using classes.
- Supports transitive trait chains (TraitA uses TraitB); edges are reassigned to the final class users.
- Hides trait nodes and
- WithTraits
- Shows trait nodes and
use
edges. - Keeps trait-origin composition/dependency edges on the trait.
- Suppresses duplicate class-level composition/dependency when already provided by a used trait.
- Shows trait nodes and
Example
trait HasUserDeps { private UserRepository $repo; public function findById(UserId $id): ?User {} } class UserController { use HasUserDeps; }
Output examples (order simplified):
Flatten (default)
classDiagram class UserController { } class UserRepository { } class UserId { } UserController *-- UserRepository: composition UserController ..> UserId: dependencyLoading
WithTraits
classDiagram class UserController { } class HasUserDeps { <<trait>> } class UserRepository { } class UserId { } UserController --> HasUserDeps: use HasUserDeps *-- UserRepository: composition HasUserDeps ..> UserId: dependencyLoading
License
The MIT License (MIT). Please see LICENSE for more information.