Home / Apps / PlantUML QuickLook / Self-hosting

Run a PlantUML server

Render diagrams on your own machine or network — macOS, Linux, Windows, or Docker.

PlantUML QuickLook renders diagrams by sending the diagram text to a PlantUML server. By default it uses the public service at plantuml.com — nothing to install. If you'd rather keep your diagrams on your own infrastructure, run one of the servers below and enter its address in the app's PlantUML Server field.

Two kinds of server

Whichever you pick, in PlantUML QuickLook you enter the base URL ending in /svg/. Requires a Java runtime (JRE 11+; 17 recommended) for the picoweb options.

macOS

brew install --cask temurin                    # a Java runtime
curl -L -o ~/plantuml.jar \
  https://github.com/plantuml/plantuml/releases/latest/download/plantuml.jar
java -jar ~/plantuml.jar -picoweb:8080          # serves on port 8080

In the app, set the server to http://localhost:8080/plantuml/svg/. To keep it running across logins, add it as a Login Item or a launchd agent.

Linux (systemd service)

# 1. install a JRE (Debian/Ubuntu shown; Fedora/RHEL: sudo dnf install java-17-openjdk)
sudo apt update && sudo apt install -y default-jre
sudo mkdir -p /opt/plantuml
sudo curl -L -o /opt/plantuml/plantuml.jar \
  https://github.com/plantuml/plantuml/releases/latest/download/plantuml.jar

# 2. a service that starts on boot
sudo useradd -r -s /usr/sbin/nologin plantuml 2>/dev/null || true
sudo tee /etc/systemd/system/plantuml.service >/dev/null <<'EOF'
[Unit]
Description=PlantUML picoweb server
After=network.target
[Service]
User=plantuml
ExecStart=/usr/bin/java -jar /opt/plantuml/plantuml.jar -picoweb:8080
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload && sudo systemctl enable --now plantuml

In the app, set the server to http://YOUR-SERVER-IP:8080/plantuml/svg/.

Windows

winget install EclipseAdoptium.Temurin.17.JRE   # a Java runtime
curl -L -o plantuml.jar ^
  https://github.com/plantuml/plantuml/releases/latest/download/plantuml.jar
java -jar plantuml.jar -picoweb:8080

In the app, set the server to http://localhost:8080/plantuml/svg/. To run it as a background service, use a tool such as NSSM.

Docker

docker run -d -p 8080:8080 plantuml/plantuml-server:jetty

The jetty image serves at the root, so set the server to http://localhost:8080/svg/. (The :tomcat image serves under /plantuml, i.e. http://localhost:8080/plantuml/svg/.)

HTTP, HTTPS, and your network

For a server on your local network (a private address such as 192.168.x.x or 10.x.x.x, or your own Mac), plain http works. For a server reachable over the public internet, use HTTPS — put the server behind a TLS reverse proxy such as Caddy (automatic HTTPS) or nginx, and use an https://…/svg/ address.

A note on security

The picoweb server has no authentication — anyone who can reach its port can render against it. On a trusted home or office network that's fine; otherwise restrict the port to your subnet with a firewall, or put it behind a reverse proxy that adds access control.

Point the app at your server

Open PlantUML QuickLook, and in the PlantUML Server field enter the base URL ending in /svg/ from the steps above. Leave it blank at any time to go back to the public plantuml.com service.