Loading...
Loading...
Use when user requests diagrams, flowcharts, sequence diagrams, class diagrams, component diagrams, ER diagrams, architecture charts, or visualizations. Also use proactively when explaining systems with 3+ components, APIs, data flows, or class hierarchies. Generates .puml files and exports to PNG/SVG via Kroki API (no local install required).
npx skill4agent add agents365-ai/365-skills plantuml-skill.pumlcurl.pumlhttps://kroki.iocurl# Just needs curl (pre-installed on macOS/Linux/Windows Git Bash)
curl --versiondocker run -d -p 8000:8000 yuzutech/kroki
# Then replace https://kroki.io with http://localhost:8000 in commands# Requires Java + Graphviz
brew install graphviz # macOS
sudo apt install graphviz # Ubuntu
# Download plantuml.jar from https://plantuml.com/download
java -jar plantuml.jar diagram.puml<this-skill-dir>/.last_updategit -C <this-skill-dir> ls-remote --tags origin 'v*' 2>/dev/null \
| awk '{print $2}' | sed 's|refs/tags/||' \
| sort -V | tail -1metadata.version"A newer version of this skill is available: vX.Y.Z → vA.B.C. Want me to?"git pull
git -C <this-skill-dir> pull --ff-only.last_update.last_updatecurl --version@startuml@enduml# PNG (recommended)
curl -s -X POST https://kroki.io/plantuml/png \
-H "Content-Type: text/plain" \
--data-binary "@diagram.puml" \
-o diagram.png
# SVG
curl -s -X POST https://kroki.io/plantuml/svg \
-H "Content-Type: text/plain" \
--data-binary "@diagram.puml" \
-o diagram.svg.puml| Type | Keyword | Use for |
|---|---|---|
| Sequence | | API calls, protocol flows, message passing |
| Component | | service architecture, module dependencies |
| Class | | OOP models, data structures |
| ER / Entity | | database schemas |
| Activity | | workflows, business processes |
| Use Case | | system requirements, user stories |
| State | | state machines, lifecycle |
| C4 Context | | high-level system context maps |
| Mind Map | | topic breakdowns, concept maps |
| Gantt | | project timelines, schedules |
@startuml
!theme plain
title Microservices Architecture
actor "Client" as client
rectangle "API Gateway" as gateway #LightBlue
rectangle "Services" {
component "User Service" as user
component "Order Service" as order
}
database "User DB" as userdb
database "Order DB" as orderdb
queue "Kafka" as kafka
client --> gateway
gateway --> user
gateway --> order
user --> userdb
order --> orderdb
order --> kafka : events
@endumlactor "Name" as idcomponent "Name" as idrectangle "Name" as iddatabase "Name" as idqueue "Name" as idcloud "Name" as idnode "Name" as idframe "Name" as idpackage "Name" { }A --> BA -> BA ..> BA --> B : labelA <--> B#LightBlue#LightGreen#LightYellow#Pink#Violet#AED6F1#A9DFBF#FAD7A0#F1948A#D7BDE2#F9E79F#D3D3D3@startuml
!theme plain
title Login Flow
participant "Client" as C
participant "API Gateway" as G
participant "Auth Service" as A
database "User DB" as D
C -> G : POST /login
G -> A : validateCredentials(user, pass)
A -> D : SELECT * FROM users WHERE email = ?
D --> A : user record
A --> G : 200 OK + JWT token
G --> C : { token: "..." }
@endumlA -> BA --> BA ->> BA -[#red]-> Bactivate Adeactivate A@startuml
!theme plain
class User {
+int id
+String name
+String email
+login() : bool
+logout()
}
class Order {
+int id
+Date createdAt
+float total
+place()
+cancel()
}
class Product {
+int id
+String name
+float price
}
User "1" --> "*" Order : places
Order "*" --> "*" Product : contains
@endumlA --> BA --|> BA ..|> BA *-- BA o-- BA "1" --> "*" B : label@startuml
!theme plain
entity "USER" as user {
* id : int <<PK>>
--
name : varchar
email : varchar
created_at : datetime
}
entity "ORDER" as ord {
* id : int <<PK>>
--
* user_id : int <<FK>>
total : decimal
status : varchar
}
entity "PRODUCT" as prod {
* id : int <<PK>>
--
name : varchar
price : decimal
}
user ||--o{ ord : places
ord }o--|{ prod : contains
@enduml@startuml
!theme plain
start
:Receive Order;
if (Payment valid?) then (yes)
:Process Payment;
:Send Confirmation Email;
:Update Inventory;
:Ship Order;
:Mark as Delivered;
else (no)
:Send Payment Failed Email;
:Cancel Order;
endif
stop
@enduml@startuml
!theme plain
[*] --> Pending
Pending --> Processing : payment_received
Processing --> Shipped : packed
Shipped --> Delivered : confirmed
Processing --> Cancelled : cancel
Pending --> Cancelled : cancel
Delivered --> [*]
Cancelled --> [*]
@enduml# PNG via Kroki API (recommended)
curl -s -X POST https://kroki.io/plantuml/png \
-H "Content-Type: text/plain" \
--data-binary "@diagram.puml" \
-o diagram.png
# SVG via Kroki API
curl -s -X POST https://kroki.io/plantuml/svg \
-H "Content-Type: text/plain" \
--data-binary "@diagram.puml" \
-o diagram.svg
# Via local Kroki Docker (offline)
curl -s -X POST http://localhost:8000/plantuml/png \
-H "Content-Type: text/plain" \
--data-binary "@diagram.puml" \
-o diagram.png
# Via local PlantUML jar (if installed)
java -jar plantuml.jar diagram.puml
# Output: diagram.png in same directory!theme plain ← clean, minimal (recommended)
!theme cerulean ← blue-tinted
!theme blueprint ← dark blue background
!theme aws-orange ← AWS style
!theme vibrant ← vivid colorsskinparamskinparam backgroundColor #FAFAFA
skinparam componentBorderColor #555555
skinparam ArrowColor #333333
skinparam FontName Arial| Mistake | Fix |
|---|---|
| Check network; try |
| Kroki returns 400 Bad Request | Validate PlantUML syntax at https://www.plantuml.com/plantuml/uml/ |
| Arrow direction unexpected | Use |
| Diagram too large/crowded | Split into multiple diagrams or use |
Missing | Always wrap diagram in these markers |
| Special chars in labels | Wrap in quotes: |
| C4 includes not found via Kroki | Use Kroki's |
| Component overlap | Use |
| Sequence participants out of order | Declare |