Skip to content

Environment variables

VariableDescription
ROOT_DOMAINThe domain Pipebase serves on. e.g. pipebase.example.com. Sub-domains derived from this unless overridden.
LETSENCRYPT_EMAILContact email for Let’s Encrypt cert notifications. Use a real inbox.
PIPEBASE_DEPLOY_TOKEN32-byte hex bearer token between designer ↔ runtime /_api/*. Generate fresh per install: openssl rand -hex 32.

Defaults follow the <service>.<root> pattern.

VariableDefaultDescription
PIPEBASE_JWT_SECRETunset (opt-in)Opt-in. Off in both shipped compose files: commented lines on pipebase-designer + pipebase-runtime in the standalone compose, and never on the Coolify path, where a row on the Environment Variables tab reaches every container. Enabling it puts the designer token-signing key in the runtime env, readable by any deployed flow. HMAC-SHA256 signing key for OAuth-issued JWTs. Designer + runtime must see the same value. Setting it also pins the key: force-logout-all then rotates browser sessions only, leaving OAuth tokens valid until they expire, so runtimes keep accepting them. To retire a token early on a pinned install, delete its OAuth client — that retires every token the client issued, at once (designer 0.7.16+; before that the gate checked only the signature and a deleted client’s token kept working). Changing this value on the designer and every runtime and restarting them retires everything at once and is the bigger hammer. Note that the rotated session key lives in memory: a restart loads this value again, so signed-out sessions that have not expired start working again. Leave the variable unset (the shipped compose files do) and force-logout-all invalidates sessions and OAuth tokens together, durably.
DESIGNER_HOSTdesigner.${ROOT_DOMAIN}Hostname for the designer SPA + REST API
RUNTIME_HOSTruntime.${ROOT_DOMAIN}Hostname for the runtime’s public HTTP triggers + management API
DOCS_HOSTdocs.designer.${ROOT_DOMAIN}Hostname for this docs site
VariableDefaultDescription
PIPEBASE_RUNTIME_URLhttp://pipebase-runtime:8080Internal URL the designer dials. Docker DNS in compose.
PIPEBASE_RUNTIME_PUBLIC_URLhttps://${RUNTIME_HOST}Public URL surfaced in the SPA so users see where their HTTP triggers are reachable.
PIPEBASE_DATA_DIR/data/flowsDisk root for designer flow storage inside the container
PIPEBASE_WORKSPACE_ENFORCEMENTreportWhat the designer’s workspace access layer does with a failed check: enforce refuses, report logs and counts but lets the request through (denies nothing), off skips the checks. Workspaces are not yet an isolation boundary in any mode. Both shipped compose files pass it to the designer with report as the default, so a value in the project’s .env takes effect; see docs/multi-tenancy.md in the repository for what to watch before enforce.
PIPEBASE_RUNTIME_ROOT_DOMAINunset (opt-in)Enables the managed-runtime feature: the designer provisions runtime containers at <env>.<this-value> through the Docker socket, which must also be mounted into the designer (root on the host). Off by default since 2026-09-30.
PIPEBASE_RUNTIME_IMAGEpipebase-runtime:0.6.0Image tag the managed-runtime feature uses for new containers; when that image is not on the host, the designer uses the last local pipebase-runtime tag in string order
PIPEBASE_RUNTIME_NETWORKcoolifyDocker network for new runtime containers
PIPEBASE_RUNTIME_CERT_RESOLVERletsencryptTraefik cert resolver name for new runtimes
PIPEBASE_RUNTIME_ENTRYPOINThttpsTraefik entrypoint for new runtimes
PIPEBASE_DOCKER_SOCKET/var/run/docker.sockPath to the Docker socket inside the designer container

Optional — Pulsar (the broker starts with the default stack)

Section titled “Optional — Pulsar (the broker starts with the default stack)”
VariableDefaultDescription
PIPEBASE_PULSAR_URLpulsar://pipebase-pulsar:6650Binary protocol endpoint
PIPEBASE_PULSAR_ADMIN_URLhttp://pipebase-pulsar:8080Admin REST API endpoint
PIPEBASE_PULSAR_CLUSTERpipebase-eu-westThe broker’s clusterName and the cluster the designer puts in allowedClusters when it provisions a tenant — one variable so they cannot drift
PIPEBASE_PULSAR_PROTOCOLSmqtt,amqpProtocol handlers the broker loads: mqtt,amqp, or mqtt (AOP is AMQP 0-9-1, RabbitMQ dialect, not 1.0). Never kafka — the broker refuses to start
PIPEBASE_PULSAR_TOKEN_AUTHtrueThe broker refuses clients without a token it signed, on the admin API, the Pulsar binary port, MQTT (password = token) and AMQP (SASL mechanism token). It mints its own key and the designer’s and runtime’s tokens into volumes; mint one for an external client with docker exec pipebase-pulsar bin/pipebase-token.sh create <name>. What a token may do is decided by PIPEBASE_PULSAR_AUTHORIZATION (on by default): Pulsar and MQTT clients need a namespace grant; AMQP clients are not authorized. false restores the open broker and needs PIPEBASE_PULSAR_AUTHORIZATION=false as well — with authorization on and authentication off the broker refuses to start
PIPEBASE_PULSAR_ADMIN_TOKEN_FILE/run/pipebase/pulsar/token (set by the compose)Designer: file holding its broker token. PIPEBASE_PULSAR_ADMIN_TOKEN passes it inline instead — avoid that under Coolify, where every variable reaches every container
PIPEBASE_PULSAR_TOKEN_FILE/run/pipebase/pulsar/token (set by the compose)Runtime: file holding its broker token, used by pulsar: routes and the /_api/pulsar proxy. PIPEBASE_PULSAR_TOKEN passes it inline — readable by every deployed flow
VariableDefaultDescription
LOG_LEVELinfoPino log level: trace, debug, info, warn, error, fatal, silent

The committed .env.example at the repo root is the authoritative reference — this table mirrors it. If they diverge, the file wins; write to hello@pipebase.dev.

Pipebase is operated by Jobu 42 Holding ApS · Company no. 44796988 Privacy