PlantUML’s output SVG is “dead” by default — view-only. But with map directives or post-process JS injection, the diagram becomes a navigation map: click a node to open docs, hover for a tooltip, call an API for live data.
@startuml component "User Service" as us [[https://wiki.company.com/user-service]] component "Order Service" as os [[https://wiki.company.com/order-service]] component "Payment Service" as ps [[https://wiki.company.com/payment-service]]
us --> os os --> ps @enduml
[[url]] is PlantUML’s native link syntax — the rendered SVG nodes are wrapped in <a>, clicking jumps to the URL.
Use cases:
Architecture diagram clickable to wiki
Class diagram clickable to source
Flow diagram clickable to runbook
Method 2: map directive for clickable index
1 2 3 4 5 6 7
@startuml map "Architecture Map" { us => https://wiki/user-service os => https://wiki/order-service ps => https://wiki/payment-service } @enduml
map is PlantUML’s directory index — each entry is a small card with a link. Perfect for README / docs landing pages.
Advanced syntax:
1 2 3 4 5
map "Service Directory" { us => https://wiki/user us => [User Service] => https://wiki/user } @enduml
Method 3: %%tooltip (experimental)
1 2 3 4 5
@startuml component "User Service" as us %%tooltip "Handles user registration, login, profile" component "Order Service" as os %%tooltip "Manages shopping cart and checkout" us --> os @enduml
%%tooltip is PlantUML 1.2024+ experimental — rendered SVG nodes carry <title> elements — hover shows the browser’s native tooltip.
Note: %%tooltip is a comment-level directive, appended to the same line as the element. Not !define, not skinparam.
Method 4: post-process SVG to inject JS
For built-in interactions PlantUML doesn’t support, post-process with Python/Node to inject:
Click a service in the diagram, the right side slides out with details — the architecture diagram becomes the wiki navigation entry point.
Field example: visual CI pipeline with PlantUML
1 2 3 4 5 6 7 8 9 10 11 12 13 14
@startuml component "Git Push" as git component "Lint" as lint component "Test" as test component "Build" as build component "Deploy Staging" as staging component "Deploy Prod" as prod
CI pipeline visualization, each node is a CI stage. Frontend post-process colors nodes by stage state (running=blue, passed=green, failed=red, pending=gray).
Field example: architecture in Confluence with live status
Need interaction? ├─ No → default SVG, done ├─ Click-through to wiki → [[url]] syntax ├─ Hover tooltip → %%tooltip (simple) / post-process (complex) ├─ Live status display → post-process JS + API └─ Complex interaction (detail panel / edit) → Vue/React wrapping SVG
Simplest uses [[url]] — zero JS. Most complex uses React/Vue to treat SVG as a SVG-as-component, fully programmable — but loses PlantUML’s conciseness.