nestjs-d2-diagrams
v1.3.0
Published
Generate D2 component and class diagrams from NestJS projects
Maintainers
Readme
NestJS D2 Diagrams
Generate beautiful C4-style component and class diagrams from your NestJS projects using D2.
Features
- 📦 Component Diagrams - Visualize your NestJS modules and their dependencies
- 🔗 Class Diagrams - Map out dependency injection relationships between classes
- 🎨 C4 Model Style - Generates diagrams following C4 architecture diagram conventions
- 🤝 Interactive Mode - Add rich metadata (technology stack, descriptions) to components
- 🎯 Universal DI Support - Detects all constructor injections, not just
@Injectableclasses
Installation
NPM:
npm install -D nestjs-d2-diagramsYarn:
yarn add -D nestjs-d2-diagramsPNPM:
pnpm add -D nestjs-d2-diagramsQuick Start
Generate both diagrams
npx nest-d2 generateInteractive mode (add metadata to components)
npx nest-d2 generate -iGenerate only component diagram
npx nest-d2 generate --component-onlyGenerate only class diagram
npx nest-d2 generate --class-onlySpecify custom paths
npx nest-d2 generate --project ./my-app --output ./docs/diagramsOutput
The tool generates two D2 files:
component-diagram.d2- Shows modules and their import relationshipsclass-diagram.d2- Shows classes and their dependency injection relationships
Rendering Diagrams
Use the D2 CLI to render your diagrams:
# Install D2
curl -fsSL https://d2lang.com/install.sh | sh -s --
# Render to SVG
d2 diagrams/component-diagram.d2 diagrams/component-diagram.svg
# Render with C4 theme (recommended)
d2 --theme=c4 diagrams/component-diagram.d2 diagrams/component-diagram.svg
# Render to PNG
d2 diagrams/class-diagram.d2 diagrams/class-diagram.pngInteractive Mode
When using interactive mode, you'll be prompted to add metadata to each module:
npx nest-d2 generate -iExample prompts:
Do you want to add metadata (technology, descriptions) to components? › Yes
Enter default technology for all components: › NestJS
--- UserModule ---
Technology (press Enter for "NestJS"): › [Enter]
Description (what does this module do?): › Handles user authentication and authorization
--- ProductModule ---
Technology (press Enter for "NestJS"): › [Enter]
Description (what does this module do?): › Manages product catalog and inventoryThis generates C4-style component diagrams with rich descriptions:
UserModule: |md
### UserModule
---
**[Component: NestJS]**
Handles user authentication and authorization
| {
class: [component]
}Component Diagram
Analyzes *.module.ts files and extracts:
- Module names
- Imports (dependencies on other modules)
- Providers (services)
- Controllers
- Exports
The diagram shows module relationships and, in non-interactive mode, nested providers and controllers.
Class Diagram
Analyzes all TypeScript classes and detects:
- Constructor parameter dependencies (typed injections)
@Inject()token-based injections- Optional dependencies (
?or@Optional()) - Classes with
@Injectable()decorator (highlighted in blue)
Universal DI Detection: Unlike tools that only look for @Injectable() classes, this analyzer detects all constructor injections. This is especially useful for:
- Use cases in Clean/Onion Architecture
- Domain services without decorators
- Any class participating in dependency injection
CLI Options
Usage: nest-d2 generate [options]
Options:
-p, --project <path> Path to NestJS project (default: current directory)
-o, --output <path> Output directory for diagrams (default: "./diagrams")
-i, --interactive Enable interactive mode for adding metadata
--component-only Generate only component diagram
--class-only Generate only class diagram
-h, --help Display help for commandRequirements
- Node.js 16+
- A NestJS project with
tsconfig.jsonin the root - D2 CLI for rendering diagrams (optional, for visualization)
Examples
Component Diagram Output
# NestJS Component Diagram
direction: right
AppModule: |md
### AppModule
---
**[Component: NestJS]**
Main application module
| {
class: [component]
}
UserModule: |md
### UserModule
---
**[Component: NestJS]**
User management and authentication
| {
class: [component]
}
AppModule -> UserModule: importsClass Diagram Output
# NestJS Class Diagram
direction: down
UserController: UserController {
shape: class
# Dependencies
userService: UserService
}
UserService: UserService {
shape: class
style.fill: "#e3f2fd"
# Dependencies
userRepository: Repository
}
UserController -> UserService: depends onHow It Works
- TypeScript AST Parsing - Uses
ts-morphto parse your TypeScript source files - Module Analysis - Extracts
@Module()decorator metadata from*.module.tsfiles - Class Analysis - Analyzes constructor parameters to detect all dependency injections
- D2 Generation - Converts the analysis into D2 diagram syntax with C4 styling
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT
