Themes and styling
puml treats themes as token overrides passed into the renderer — never as CSS hacks layered over emitted SVG. The renderer reads a token bag at compile time and bakes the values directly into the output.
Built-in themes
!theme spacelab
The themes/ gallery shows the built-in palettes against every core family. Unknown theme names emit a deterministic warning — they’re not parser errors.
Skinparams
skinparam backgroundColor #fafafa
skinparam defaultFontName "Inter"
skinparam shadowing false
skinparam sequence {
ParticipantBorderColor #333
ArrowColor #111
ArrowFontColor #555
LifeLineBorderColor #888
LifeLineBackgroundColor #eee
GroupBorderColor #888
GroupFontColor #444
}
skinparam class {
BackgroundColor #ffffff
BorderColor #444
ArrowColor #444
StereotypeFontColor #6a5acd
}
Unsupported skinparam keys emit non-fatal warnings on stderr. The deterministic catalog of known-but-unsupported keys lives in the syntax-highlighting spec.
Edge routing — skinparam linetype
Edges (relations, transitions, dependencies) render in one of three global
routing modes, selected by skinparam linetype <value>:
| Value | Shape | Notes |
|---|---|---|
(unset) or splines | smooth Bézier curves | Default, matches PlantUML. Long edges sweep, short edges stay near-straight. |
polyline | straight segments through waypoints | Use when you prefer the routed waypoints unsmoothed. |
ortho | right-angle elbows | Classic orthogonal routing — pre-Stage-2 default. Recommended for IE/Chen entity-relation diagrams. |
@startuml
skinparam linetype ortho
class A
class B
A --> B
@enduml
Values are case-insensitive; splines / Splines / SPLINES are
equivalent. The mode applies globally to every Graphviz-routed family
(class, object, use-case, component, deployment, ArchiMate, C4) and is
ignored by bespoke families that draw their own edge shapes (sequence,
activity, state, timing, mindmap, WBS, salt).
Per-arrow styling
You can color and style individual arrows inline:
Alice -[#blue,dashed]-> Bob: queued
Alice -[#FF8800,bold]-> Bob: urgent
Color values accept #hex, named colors, and the named palette from PlantUML.
Per-element styling
For class diagrams, stereotypes can carry inline color:
class Service <<(S,#7dd3fc) Service>>
class Repository <<(R,#34d399) Data>>
Determinism
Themes and skinparams do not affect determinism. Two runs with identical source and identical effective tokens produce byte-identical SVG.
See the gallery
themes/— built-in theme variants across families.skinparams/— explicit skinparam coverage.creole/— rich-text in labels and notes.