tasuku43 / mermaid-class-diagram
Generate class diagrams code written in mermaid-js.
Installs: 924
Dependents: 0
Suggesters: 0
Security: 0
Stars: 10
Watchers: 1
Forks: 4
Open Issues: 2
pkg:composer/tasuku43/mermaid-class-diagram
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-10-08 06:31:39 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|depscomposition|compositions|compinheritance|inheritances|extendsrealization|realizations|implements
--trait-mode <mode>: Trait rendering mode. Default:flatten.with-traits(aliases:with_traits,with): show trait nodes anduseedges; suppress class-level comp/dep duplicates provided by traits.flatten(aliases:flat): hide trait nodes anduseedges; 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: dependency
Loading
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: dependency
Loading
Filter relationships
You can hide specific relationship types via CSV with --exclude-relationships.
- Allowed values (case-insensitive, aliases supported):
dependency|dependencies|dep|depscomposition|compositions|compinheritance|inheritances|extendsrealization|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
useedges. - 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
useedges. - 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: dependency
Loading
WithTraits
classDiagram
class UserController {
}
class HasUserDeps {
<<trait>>
}
class UserRepository {
}
class UserId {
}
UserController --> HasUserDeps: use
HasUserDeps *-- UserRepository: composition
HasUserDeps ..> UserId: dependency
Loading
License
The MIT License (MIT). Please see LICENSE for more information.