Deploying
Templates for each of these are in deploy/.
macOS: start at login
deploy/com.soldermask.serve.plist is a launchd agent. Edit the three paths and the API key, then:
cp deploy/com.soldermask.serve.plist ~/Library/LaunchAgents/
launchctl load ~/Library/LaunchAgents/com.soldermask.serve.plist
tail -f ~/Library/Logs/soldermask.log # the banner, the QR code, the access logKeepAlive restarts it if it dies. Java must be reachable from the agent's environment — Homebrew's OpenJDK is found automatically.
Linux: systemd
deploy/soldermask.service runs the app as its own user with SOLDERMASK_HOME=/var/lib/soldermask, restarts on failure, and applies the usual hardening (NoNewPrivileges, ProtectSystem=full, a writable data directory only).
sudo cp deploy/soldermask.service /etc/systemd/system/
sudo systemctl daemon-reload && sudo systemctl enable --now soldermask
journalctl -u soldermask -fBehind nginx
deploy/nginx.conf terminates TLS with a real certificate and proxies to the app on plain HTTP. Two lines matter for the event stream: proxy_buffering off and a long proxy_read_timeout. Run the app as:
soldermask serve --http --port 8080 --proxy--proxy makes it trust the forwarded headers and require the token from everyone, since all requests now look local.
Containers
No image is shipped: the router needs a Java 25 runtime and a 60 MB jar that is not in the repository, and the project has not been verified in a container. The systemd unit is the supported Linux path.
Backups
projects/ is the only state worth keeping — plain files, safe to copy while the server runs (writes are atomic). .cache/ is reproducible. The access token is .cache/access-token.