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>:

ValueShapeNotes
(unset) or splinessmooth Bézier curvesDefault, matches PlantUML. Long edges sweep, short edges stay near-straight.
polylinestraight segments through waypointsUse when you prefer the routed waypoints unsmoothed.
orthoright-angle elbowsClassic 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.

  • themes/ — built-in theme variants across families.
  • skinparams/ — explicit skinparam coverage.
  • creole/ — rich-text in labels and notes.