We are excited to announce full support for CRC Card Diagrams in VPasCode, Visual Paradigm’s diagram-as-code platform.
CRC (Class-Responsibility-Collaborator) cards provide a structured way to outline object-oriented domain models before writing code. You can now compose, edit, and instantly render full CRC Card layouts using PlantUML directly in VPasCode.

What is a CRC Card Diagram?
CRC cards break down complex domain entities into three core areas:
-
Class: Represents a key object or component in your application.
-
Responsibilities: High-level duties, behaviors, or knowledge managed by the class.
-
Collaborators: Other classes required to fulfill those obligations.
Using traditional index cards on a whiteboard works well during physical brainstorming sessions, but preserving and maintaining those models is difficult. VPasCode brings that same clarity to a digital, code-based format that easily embeds into modern software documentation.
-
Clean Map Syntax: Leverage PlantUML
mapstructures to group responsibilities and collaborators neatly side-by-side. -
Identify Architecture Flaws Early: Spot bloated classes, single-responsibility violations, or missing service boundaries before writing implementation code.
-
Seamless Documentation Workflow: Edit diagram code easily, export rendered assets, or push diagrams to OpenDocs and NotesKeep.
Example:
@startuml
skinparam {
vpDiagramType CRCCardDiagram
}
skinparam defaultFontSize 14
skinparam defaultFontColor #333333
title Hotel Reservation System - CRC Cards
map "Reservation" as Reservation {
Responsibilities => Collaborators
Create and hold a booking => Guest\nRoom\nDateRange
Track check-in and check-out dates => DateRange
Track reservation status => ReservationStatus
Calculate total price => RatePlan\nPayment
Confirm or cancel booking => ReservationManager\nNotificationService
}
map "Guest" as Guest {
Responsibilities => Collaborators
Store personal and contact details => -
Provide identity for booking => Reservation
View and manage own reservations => ReservationManager
Provide payment information => Payment
}
map "Room" as Room {
Responsibilities => Collaborators
Represent room number and type => RoomType
Hold availability for a period => DateRange\nRoomAvailability
Know physical attributes and capacity => RoomType
}
map "RoomType" as RoomType {
Responsibilities => Collaborators
Define category and amenities => -
Set nightly base price => RatePlan
Define maximum occupancy => Room
}
map "DateRange" as DateRange {
Responsibilities => Collaborators
Represent check-in and check-out => -
Detect overlap with other ranges => Reservation
Compute number of nights => Reservation
}
map "RoomAvailability" as RoomAvailability {
Responsibilities => Collaborators
Track free and booked periods => Room\nDateRange
Check room availability for range => Reservation
Reserve and release a room => ReservationManager
}
map "ReservationManager" as ReservationManager {
Responsibilities => Collaborators
Coordinate reservation lifecycle => Reservation
Search available rooms => RoomAvailability\nRoom
Apply rate rules to a booking => RatePlan
Trigger booking notifications => NotificationService
}
map "RatePlan" as RatePlan {
Responsibilities => Collaborators
Define pricing rules and discounts => RoomType
Compute price for a date range => DateRange\nReservation
Apply seasonal adjustments => -
}
map "Payment" as Payment {
Responsibilities => Collaborators
Process charges and refunds => PaymentGateway
Record payment status => Reservation
Store amount and method => -
}
map "PaymentGateway" as PaymentGateway {
Responsibilities => Collaborators
Authorize card transactions => Payment
Return transaction results => Payment\nNotificationService
}
map "NotificationService" as NotificationService {
Responsibilities => Collaborators
Send confirmation emails => Guest\nReservation
Send cancellation notices => Guest\nReservation
Format message content => Guest
}
map "ReservationStatus" as ReservationStatus {
Responsibilities => Collaborators
Represent booking states => Reservation
Validate state transitions => ReservationManager
}
Reservation -[hidden]right-> Guest
Guest -[hidden]right-> Room
Room -[hidden]right-> RoomType
Reservation -[hidden]down-> DateRange
Guest -[hidden]down-> RoomAvailability
Room -[hidden]down-> ReservationManager
RoomType -[hidden]down-> RatePlan
DateRange -[hidden]right-> RoomAvailability
RoomAvailability -[hidden]right-> ReservationManager
ReservationManager -[hidden]right-> RatePlan
DateRange -[hidden]down-> Payment
RoomAvailability -[hidden]down-> PaymentGateway
ReservationManager -[hidden]down-> NotificationService
RatePlan -[hidden]down-> ReservationStatus
Payment -[hidden]right-> PaymentGateway
PaymentGateway -[hidden]right-> NotificationService
NotificationService -[hidden]right-> ReservationStatus
@enduml 
Why Use CRC Cards & Who Are They For?
CRC (Class-Responsibility-Collaborator) Card Diagrams are tailored for domain experts, agile teams, and system analysts performing early object-oriented analysis.
-
Prevent Bloated Classes Early: By mapping duties side-by-side with collaborators, you can immediately spot single-responsibility violations before writing any implementation code.
-
Bridge Design and Code: Keeps class definitions lightweight and readable using simple PlantUML text structures.
-
Streamline Team Brainstorming: Replaces physical index cards with a digital, version-controlled format that integrates smoothly into technical documentation.
👉 Learn more about the AI CRC Card Diagram Generator
Ready to streamline your object-oriented design?
Open VPasCode, write your PlantUML script, and start mapping class responsibilities in seconds.




