If you've ever stared at a blank editor trying to remember the exact syntax for a loop or an alt block in PlantUML, you know the frustration. Sequence diagrams are one of the most popular diagram types in PlantUML, and having a reliable cheat sheet saves you from constant Googling mid-thought. This reference covers every piece of syntax you need from basic message arrows to advanced grouping and styling so you can stay focused on documenting your system instead of wrestling with notation.
What Is a PlantUML Sequence Diagram?
A PlantUML sequence diagram is a text-based diagram that shows how different parts of a system exchange messages over time. You write simple, readable code, and PlantUML renders it into a visual diagram. The official PlantUML sequence diagram documentation covers the full specification, but most developers only need the core subset covered here.
Unlike drag-and-drop diagram tools, PlantUML keeps your diagrams in plain text files. That means they live alongside your code in version control, diff cleanly, and never require a paid license. If you're comparing text-based diagram options, our breakdown of Mermaid vs PlantUML vs D2 shows how they stack up.
How Do You Define Participants in a Sequence Diagram?
Participants are the actors or components in your diagram. You declare them at the top, and PlantUML draws them in the order you list them.
@startuml/@endumlWraps every PlantUML diagram.actorDeclares a person or external entity (drawn with a stick figure).participantDeclares a system or service (drawn as a box).boundary,control,entity,collectionsSpecialized participant shapes for UML modeling.
@startuml
actor User
participant "Web Server" as WS
participant Database as DB
@enduml
The as keyword lets you assign a short alias, which keeps your message lines readable. This matters when participant names get long.
What Arrows and Message Types Can You Use?
Arrows represent messages flowing between participants. The style of the arrow communicates synchronous calls, asynchronous messages, returns, and more.
->Solid arrow (synchronous message).-->>Dashed arrow (return or response).->>Open arrowhead (asynchronous message).->oArrow to a filled circle.o->Arrow from a filled circle.xDestroy message (draws an X at the target lifeline).|||Adds vertical spacing between messages.
@startuml
User -> WebServer : Send request
WebServer -> Database : Query data
Database --> WebServer : Return results
WebServer --> User : Render page
@enduml
You can also add message numbers automatically with the autonumber directive. This is helpful for referencing specific steps in documentation or reviews.
How Do You Add Notes, Boxes, and Page Titles?
Annotations help readers understand intent without cluttering the message flow.
note left of ParticipantAttaches a note to the left of a participant.note right of ParticipantAttaches a note to the right.note over ParticipantPlaces a note spanning over a participant.floating noteA note not tied to any participant.box "Name" #LightYellowGroups participants visually inside a colored box.titleAdds a title above the diagram.
@startuml
title Authentication Flow
box "Internal Services" #LightBlue
participant AuthService
participant UserDB
end box
User -> AuthService : Login request
note right of AuthService : Validates credentials
AuthService -> UserDB : Lookup user
@enduml
How Do Loops, Alts, and Grouping Blocks Work?
Grouping blocks control flow logic in your diagram. These are the constructs people forget most often, which is why they deserve a spot on any cheat sheet.
loopRepeats a set of messages.alt / elseConditional branches (like if/else).optOptional block (executes only if a condition is met).parParallel execution.criticalCritical section with optional recovery.breakBreaks out of a loop.groupGeneric grouping with a custom label.
@startuml
User -> Server : Request
loop Every 5 seconds
Server -> Database : Poll for updates
end
alt Success
Database --> Server : Data found
else Failure
Database --> Server : Timeout error
end
Server --> User : Response
@enduml
Each block ends with end. Nesting is supported, but deep nesting makes diagrams hard to read. Keep it to two or three levels max.
How Do You Show Activations, Deactivations, and Lifelines?
Activation bars show when a participant is actively processing a request. They're optional, but they make diagrams much easier to follow in complex flows.
activate ParticipantStarts an activation bar.deactivate ParticipantEnds the activation bar.destroyMarks a participant as destroyed (draws an X).createShows a participant being created mid-diagram.
@startuml
Client -> Server : Request
activate Server
Server -> DB : Query
activate DB
DB --> Server : Results
deactivate DB
Server --> Client : Response
deactivate Server
@enduml
You can also use the shorthand ++ and -- after participant names to activate and deactivate in a single line:
@startuml
Client -> Server++ : Request
Server -> DB++ : Query
DB --> Server-- : Results
Server --> Client-- : Response
@enduml
How Do You Add Colors, Styling, and Themes?
PlantUML supports inline styling so your diagrams can match documentation standards or just be more readable.
skinparamControls global styling like fonts, colors, and arrow styles.!themeApplies a predefined theme (e.g.,!theme cerulean).- Participant colors
participant Server #LightGreen - Note colors
note left of User #Yellow : Text
@startuml
skinparam sequenceArrowThickness 2
skinparam roundcorner 10
skinparam sequenceParticipantBorderColor DarkBlue
actor User #LightBlue
participant Server #LightGreen
User -> Server : Hello
@enduml
If you prefer a different markup language for styling flexibility, our Graphviz DOT language examples cover another popular option for visual output customization.
What Are the Most Common Mistakes?
After helping teams adopt PlantUML, these are the errors that come up most often:
- Forgetting
@endumlEvery diagram needs both opening and closing tags. Without@enduml, rendering fails silently or produces cryptic errors. - Mismatched
endblocks Eachloop,alt,opt, orparmust close withend. Missing one breaks the entire diagram. - Using special characters without escaping Characters like
~,^, and[can break rendering. Wrap text in quotes or use tilde escaping:~[text~]. - Overcrowding one diagram Trying to show an entire system in a single sequence diagram makes it unreadable. Split flows into separate diagrams instead.
- Ignoring aliases Long participant names repeated across 30 message lines make the source hard to maintain. Use
asto shorten them.
Quick Reference Cheat Sheet
Here's a condensed reference you can copy and adapt:
@startuml
title My Sequence Diagram
actor User
participant "API Gateway" as GW #LightBlue
participant "Auth Service" as Auth #LightGreen
database "User DB" as DB
== Authentication ==
User -> GW : POST /login
activate GW
GW -> Auth : Validate credentials
activate Auth
Auth -> DB : Query user
activate DB
DB --> Auth : User record
deactivate DB
alt Valid credentials
Auth --> GW : Token issued
note right of Auth : JWT returned
else Invalid credentials
Auth --> GW : 401 Unauthorized
break
end
deactivate Auth
GW --> User : Response
deactivate GW
@enduml
This single example demonstrates participants, aliases, colors, activation bars, notes, an alt/else block, a break, section separators (==), and a database shape. Save it as a starting template.
Where Can You Render PlantUML Diagrams?
You have several options for rendering your sequence diagrams from text to images:
- PlantUML online server Paste code at plantuml.com/plantuml and get an instant image.
- VS Code extension The PlantUML extension provides live preview as you type.
- IntelliJ IDEA plugin JetBrains IDEs have a built-in PlantUML integration.
- Command line Run
java -jar plantuml.jar diagram.pumlto generate PNG, SVG, or PDF output. - CI/CD pipelines Integrate PlantUML into your build process so diagrams always reflect the latest code.
What export formats are supported?
PlantUML can output PNG, SVG, EPS, and PDF. SVG is usually best for web documentation since it scales cleanly and has a smaller file size than high-resolution PNGs.
Practical Checklist Before You Share a Sequence Diagram
- ✅ Both
@startumland@endumltags are present. - ✅ Every grouping block (
loop,alt,opt,par) has a matchingend. - ✅ Participant aliases are used for any name longer than two words.
- ✅ Activation bars are added for multi-step calls (especially with nested messages).
- ✅ The diagram focuses on one flow not an entire system.
- ✅ You've tested rendering in your target format (PNG vs SVG) to check readability.
- ✅ Autonumber is enabled if the diagram is used in a spec or review document.
- ✅ Special characters in message labels are properly escaped.
Print this list, paste your diagram code, and run through each item before committing. It takes two minutes and prevents most rendering issues and readability problems teams run into.
Mermaid Diagram Syntax Reference Guide for Markup Languages
Graphviz Dot Language Examples for Beginners: Easy Diagram Tutorials
Best Diagram Markup Languages for Software Architecture in 2024
Comparing Mermaid, Plantuml, and D2 Diagram Languages
Uml Diagram Cheat Sheet: Essential Notation Codes for Software Engineers
Best Uml Notation Codes for System Architecture Design Guide