Configuration

Every environment variable Buildpane reads, by component. Nothing else is configuration: everything the operator changes day to day (offerings, prices, mail, GitHub sign-in, the website switch) lives in the master's settings table and is edited from Admin.

Values come from .env (written by install.sh) and the optional files in ~/.config/buildpane/*.env that the systemd unit loads (emailit.env, store-admin.env, cloudflare.env, openrouter.env).

Master (the app server, server/)

Variable Default Meaning
PORT 5400 HTTP port.
BUILDPANE_PUBLIC_URL the request's own origin Public origin (https://buildpane.com): invite links, the runner's WebSocket address, the website's apex detection, mail links. Set it behind a proxy.
BUILDPANE_TRUST_PROXY loopback Express trust proxy setting: which upstream proxies may set X-Forwarded-For. loopback covers cloudflared → Caddy → app on one box; a bare LAN install sees the socket peer.
BUILDPANE_DOMAIN empty Wildcard-subdomain mode for project chat URLs (chat.<slug>.<domain>); empty means path mode /p/<slug>.
BUILDPANE_HOST localhost Host name used when guessing project URLs from Docker.
BUILDPANE_ROOTS $HOME/apps Colon-separated folders projects may live under on the platform host. The folder browser, project creation and the server terminal's start folder are confined to them. / means the whole machine.
BUILDPANE_LOCAL_PROJECTS yes no keeps projects off the platform host (production: it runs the platform only).
BUILDPANE_DB data/buildpane.sqlite SQLite file. :memory: in tests.
BUILDPANE_KEY_FILE <db folder>/secret.key AES key for secrets at rest (created on first boot, mode 600). MFA tickets are signed with a key derived from it.
BUILDPANE_SITES_DOMAIN empty The domain project sites are published under (<slug>.buildpane.com); also names the Cloudflare zone for custom domains.
BUILDPANE_SITES_ORIGIN sites.<BUILDPANE_SITES_DOMAIN> The CNAME target customers point their own domain at.
BUILDPANE_RUNNER_WS <public url as wss>/runner Where runners connect.
STORE_PUBLIC_URL https://get.buildpane.com The store's public address (checkout, license checks, top-ups).
STORE_ADMIN_URL, STORE_ADMIN_TOKEN empty The store's admin API (customers list, catalog push). Without them the Admin pages that need the store say so.
BUILDPANE_LICENSE, BUILDPANE_LICENSE_SERVER empty, https://store.buildpane.com A self-hosted install's own license key and where to verify it. The hosted platform runs in developer mode (no key).
BUILDPANE_MAX_RUNS_PER_SERVER 4 Agent runs allowed at once on one server.
BUILDPANE_MAX_RUN_MINUTES 30 A run longer than this is stopped (and abandoned 20 s later if it will not stop).
BUILDPANE_AUTO_COMPACT_AT 0.85 Share of the context window at which the Builder compacts by itself.
BUILDPANE_TERM_IDLE_HOURS 6 Idle terminals are closed after this long.
BUILDPANE_NICE 0 CPU niceness for agent processes (runners use 10).
BUILDPANE_GATEWAY_ANTHROPIC_URL, BUILDPANE_GATEWAY_OPENAI_URL, BUILDPANE_GATEWAY_WIRE_API OpenRouter's endpoints, responses Where Buildpane credits are spent; normally taken from the store's credits payload.
CREDITS_MARKUP 1.33 Multiplier over provider prices for Buildpane credits (also editable in Admin → Offerings).
OPENROUTER_PROVISIONING_KEY / GATEWAY_PROVISIONING_KEY, OPENROUTER_API_KEY / GATEWAY_ACCOUNT_KEY empty Gateway keys when not stored from Admin → Offerings.
GITHUB_OAUTH_CLIENT_ID empty GitHub sign-in (device flow) when not stored from Admin → Settings.
CF_API_EMAIL, CF_API_KEY, CF_ZONE_ID empty Cloudflare for SaaS custom domains. The zone id is optional: it is looked up by BUILDPANE_SITES_DOMAIN.
SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS, MAIL_FROM empty Outbound mail when not stored from Admin → Settings → Mail. Without mail, invite links are shown to the inviter to pass along.
BUILDPANE_HOSTED_SSH_KEY ~/.ssh/id_ed25519 Key the master uses to finish Pod provisioning over SSH.
BUILDPANE_HOSTING_WEBHOOK, BUILDPANE_HOSTING_SECRET empty Optional webhook for hosted-server requests handled by hand.
BUILDPANE_OWNER_EMAIL empty Extra recipient for hosted-server notices (administrators are always mailed).

Store (store/)

Variable Default Meaning
PORT 5401 HTTP port.
STORE_DB store/data/store.sqlite Licenses, ledger, catalog.
STORE_PUBLIC_URL http://localhost:5401 Its own public address (receipts, top-up links).
STORE_ADMIN_TOKEN empty Bearer token the master uses for the admin API.
STRIPE_MODE, STRIPE_TEST_*, STRIPE_LIVE_* see store/README.md Stripe keys, price ids and webhook secrets per mode; a license keeps the mode it was sold in.
RELEASES_DIR releases/ Runner and self-host release files it serves.
HOSTING_MODE, HOSTING_STARTER_INCLUDED, CREDITS_MODE, CREDITS_ALLOWANCE_CENTS, CREDITS_MARKUP catalog defaults Only until the master pushes its catalog; Admin → Offerings is the source of truth.
GATEWAY_* / OPENROUTER_* empty Gateway keys when not pushed from the master.
BUILDPANE_RUNNER_WS derived Runner address written into the connect script.
SMTP_*, MAIL_FROM empty Mail for receipts and invites (the master pushes its mail settings here).

Runner (runner/, on customer servers)

Variable Default Meaning
BUILDPANE_RUNNER_CONFIG /etc/buildpane-runner/config.json Where the connect command stored the URL, token and roots.
BUILDPANE_URL, BUILDPANE_TOKEN, BUILDPANE_ROOTS from the config file Override the config file.
BUILDPANE_NICE 10 Agent CPU niceness on the customer's box.

Scripts

Script Variables
install.sh (self-host) PORT, BUILDPANE_DOMAIN, BUILDPANE_HOST, BUILDPANE_ROOTS, BUILDPANE_LICENSE, BUILDPANE_LICENSE_SERVER
bin/backup.sh (nightly 03:15) BUILDPANE_BACKUP_DIR (~/backups), BUILDPANE_BACKUP_KEEP (14)
bin/bootstrap-lxc.sh BUILDPANE_USER
store/server.sh (the connect command) BUILDPANE_STORE, BUILDPANE_URL, BUILDPANE_TOKEN
© 2026 BuildpaneRendered from docs/CONFIG.md