Skip to content

Configuration Reference

Every environment variable AnvilBase reads, grouped by service. This is the single source of truth — if a knob exists in the code or in docker-compose.yml, it is listed here. Copy .env.example to .env and fill the required values. For how to configure (secret generation, overrides, hygiene), see Self-Hosting → Configuration.

Generate secrets: openssl rand -hex 24 (passwords), openssl rand -hex 32 (signing secrets), openssl rand -hex 64 (SECRET_KEY_BASE).

Reading the tables. Default is the value applied when the variable is unset (a compose :-default, a code fallback, or a fixed container value). A default of with Secret = yes means there is no fallback — the stack refuses to boot until you set it. Secret flags values that must never be committed or logged.

Internal/service-to-service URLs (CONTROL_PLANE_INTERNAL_URL, AUTH_SERVICE_URL, DENO_INTERNAL_URL, REALTIME_INTERNAL_URL, SUPAVISOR_API_URL, VALKEY_URL, MINIO_ENDPOINT, DATABASE_URL) default to the in-network compose service name and rarely need overriding. They are documented for completeness and for non-compose (split-host) deployments.

Quick index

GroupJump
Compose & Docker
Images (prod overlay)
PostgreSQL
Read replica
Logical replication
Scheduled base backups
wal-g / PITR
Offsite backup copy
Control plane
Scale-to-zero & pooling
Auth (Better Auth)
MFA tuning
Realtime (Phoenix)
Webhooks
Deno edge functions
Console
Storage (MinIO / RustFS)
imgproxy
Valkey
Supavisor (pooler)
Traefik
Observability (Prometheus/Grafana/OTel)
SMTP / Mailpit
mTLS (internal)
Resource limits
Required-secrets summary
CLI environment

Compose & Docker

VariableDefaultDescription
COMPOSE_FILEdocker-compose.ymlactive overlay(s); append :docker-compose.rustfs.yml (RustFS storage backend), :docker-compose.prod.yml (pre-built images), or :docker-compose.supabase-pg.yml (legacy Postgres image, rollback)
DOCKER_API_VERSION1.44Docker Engine API version for Traefik’s Docker provider (1.44 works on Docker 25+)

Images (production overlay)

Used only by docker-compose.prod.yml, which pulls pre-built multi-arch images instead of building locally.

VariableDefaultDescription
ANVILBASE_IMAGE_NSghcr.io/paxtone-studioimage namespace/registry prefix for all anvilbase-* images
ANVILBASE_VERSION1.2.0-rc.1image tag pulled for every service

PostgreSQL

VariableDefaultSecretDescription
POSTGRES_PASSWORDyessuperuser (supabase_admin) password — required
ANVILBASE_DB_PASSWORDyesanvilbase application user password (used by all services) — required
POSTGRES_PORT39432nohost port (internal 5432)
ANVILBASE_PGDATA / PGDATA/var/lib/postgresql/datanolive data directory; PITR refuses to stage restores inside it. ANVILBASE_PGDATA wins if both are set

Connection string: postgres://anvilbase:${ANVILBASE_DB_PASSWORD}@postgres:5432/anvilbase_platform. The image bundles pgvector, pg_graphql, PGMQ, pgcrypto, pg_cron, pg_stat_statements.

Read replica (opt-in)

OFF by default. Set the host to enable; read-only REST GET/HEAD route to the replica, writes always hit the primary. See Read Replicas.

VariableDefaultSecretDescription
ANVILBASE_READ_REPLICA_HOSTunset (disabled)noreplica hostname (e.g. postgres-replica). Empty/unset ⇒ feature off
ANVILBASE_READ_REPLICA_PORT5432noreplica port (a bad value fails at boot, not silently)
POSTGRES_REPLICA_PORT39433nohost port the compose postgres-replica service publishes
ANVILBASE_REPLICATION_USERreplicatornostreaming-replication role
ANVILBASE_REPLICATION_PASSWORDfalls back to ANVILBASE_DB_PASSWORDyesreplication role password

Logical replication (opt-in)

VariableDefaultSecretDescription
ANVILBASE_WAL_LEVELreplicanoPostgres wal_level. Set logical to enable CDC / logical replication slots. See Logical Replication

Scheduled base backups

Drives the wal-g base-backup scheduler sidecar (compose walg-scheduler).

VariableDefaultDescription
ANVILBASE_BASEBACKUP_INTERVAL86400seconds between full base backups (24 h)
ANVILBASE_BASEBACKUP_RETAIN_COUNT7full base backups to retain (older ones pruned)
ANVILBASE_BASEBACKUP_INITIAL_DELAY0seconds to wait after start before the first backup

wal-g / PITR

VariableDefaultSecretDescription
ANVILBASE_WALG_ENABLEDtruenoenable WAL archiving (a graceful no-op until WALG_S3_PREFIX + an S3 target are configured, so a stack without S3 still boots)
WALG_S3_PREFIXs3://anvilbase-wal/noarchive bucket prefix
WALG_AWS_ENDPOINThttp://minio:9000noS3 endpoint (mapped to wal-g’s AWS_ENDPOINT)
WALG_AWS_REGIONus-east-1noregion (mapped to AWS_REGION)
WALG_COMPRESSION_METHODlz4nocompression (lz4, zstd, …)
WALG_LIBSODIUM_KEYyesWAL encryption key (keep safe — losing it loses recovery)
ANVILBASE_WALG_BINwal-gnowal-g binary path the control plane shells out to for restores
ANVILBASE_PITR_STAGING_DIR/var/lib/anvilbase/pitr-stagingnoroot for restore staging artifacts (never inside $PGDATA)

The wal-g sidecar also receives AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY (derived from MINIO_ROOT_USER / MINIO_ROOT_PASSWORD) and PG* connection vars from compose — these are wired automatically and not operator inputs. See Point-in-Time Recovery.

Offsite backup copy (optional)

Secondary S3 target that every successful project backup is asynchronously copied to. Set all four (region optional) or none — a partial config is rejected at boot. See Backups & Restore.

VariableDefaultSecretDescription
BACKUP_OFFSITE_ENDPOINTunsetnoS3-compatible endpoint URL
BACKUP_OFFSITE_BUCKETunsetnodestination bucket
BACKUP_OFFSITE_ACCESS_KEYunsetyesaccess key
BACKUP_OFFSITE_SECRET_KEYunsetyessecret key
BACKUP_OFFSITE_REGIONus-east-1noregion (set the real one for AWS S3)

Control plane

VariableDefaultSecretDescription
CONTROL_PLANE_PORT39001 (int. 3001)noHTTP port
CONTROL_PLANE_SECRETyessigns PATs, encrypts the secrets vault (≥ 32 chars) — required
ANVILBASE_ADMIN_TOKENunsetyesbootstrap admin token for /api/v1 (disabled if unset)
INTERNAL_SECRETyesshared X-Internal-Secret for service-to-service /internal/* routes; must match across control-plane, auth, realtime, deno. Unset ⇒ /internal/* fails closed (401); the public dev default is rejected at boot. anvilbase start generates it
DATABASE_URLderived from ANVILBASE_DB_PASSWORDyesPostgres connection string (…/anvilbase_platform)
ANVILBASE_PG_AUTOTUNEonnoRAM-aware Postgres tuning (owned image). Sizes shared_buffers to 25% of the container memory limit (clamped 128 MB–16 GB) + effective_cache_size to 70% on each start. Set off to use stock Postgres config
ANVILBASE_PG_SHARED_BUFFERSauto (25% of mem limit)nopin shared_buffers explicitly (e.g. 2GB), overriding autotune
ANVILBASE_PG_EFFECTIVE_CACHE_SIZEauto (70% of mem limit)nopin effective_cache_size explicitly
ANVILBASE_PG_SYNCHRONOUS_COMMITunset (= on, fully durable)noset off/local to trade a small crash-durability window for much higher write throughput on slow storage (e.g. networked Ceph). Leave unset for financial/critical writes
VALKEY_URLredis://localhost:6379yesrate limiting + cache (compose injects credentials)
ANVILBASE_RATE_LIMIT_ENABLEDtruenoper-scope API rate limiter, now keyed per-caller (per authenticated user, else per resolved client IP) — one client can no longer exhaust a whole project+scope bucket. Set false/0/no/off to disable entirely (fails open) — e.g. behind an external gateway that already throttles, or when load-testing raw capacity
ANVILBASE_RATE_LIMIT_ANON100noper-caller anon budget (requests per window). Garbage/0 falls back to 100
ANVILBASE_RATE_LIMIT_AUTHENTICATED1000noper-caller authenticated budget (requests per window). Garbage/0 falls back to 1000
ANVILBASE_RATE_LIMIT_SERVICE_ROLE5000noper-caller service_role budget (requests per window). Garbage/0 falls back to 5000
ANVILBASE_RATE_LIMIT_WINDOW_SECS60noshared rate-limit window in seconds. Garbage/0 falls back to 60
ANVILBASE_REST_MAX_ROWS1000nomax rows a single REST read returns (PostgREST db-max-rows parity). A GET with no limit gets LIMIT 1000; a larger limit is clamped down. Content-Range still reports the true total. 0 disables the cap (unbounded reads); garbage/negative falls back to 1000
MINIO_ENDPOINThttp://localhost:9000nostorage endpoint (compose: http://minio:9000)
MINIO_ACCESS_KEYanvilbasenostorage access key (compose: MINIO_ROOT_USER)
MINIO_SECRET_KEYyesstorage secret key (compose: MINIO_ROOT_PASSWORD)
ANVILBASE_STORAGE_BUCKET_ENCRYPTIONonnoapply explicit SSE-S3 (put_bucket_encryption) on new storage/backup buckets. Set off when pointing MINIO_ENDPOINT at a managed S3 that lacks the bucket-encryption API (e.g. some provider object stores) — buckets are then created without the SSE-config call and rely on the backend’s at-rest encryption. Lets you use external managed S3 instead of bundled MinIO
ANVILBASE_CORS_ORIGINScompose: http://localhost:39004; bare release builds: unsetnocomma-separated exact browser origins allowed cross-origin. Release builds fail closed when unset (no cross-origin access); debug builds mirror the request origin
ANVILBASE_TRUSTED_PROXIESRFC1918 + loopbacknocomma-separated CIDRs whose X-Forwarded-For is trusted for client-IP resolution
ANVILBASE_METRICS_TOKENunsetyesoptional Bearer gate on /metrics. Unset ⇒ unauthenticated scrape on the internal network
ANVILBASE_JWT_GRACE_SECONDS1800nograce window a project’s previous jwt_secret keeps verifying after rotation (≤ 0 disables)
ANVILBASE_DLQ_RETENTION_DAYS30nodefault window for on-demand webhook DLQ purge (< 1 falls back to 30)
ANVILBASE_AUDIT_RETENTION_DAYS90nodefault window for on-demand audit/auth-event prune (< 1 falls back to 90). Does not change the nightly cron
ALLOW_INTERNAL_WEBHOOK_TARGETSfalsenowhen truthy, disables the SSRF guard that blocks webhook/function delivery to private/loopback IPs. Leave off in production
EXTERNAL_BASE_URLhttp://localhost:3001nopublic base URL the control plane advertises in eIDAS issuer/verifier metadata
AUTH_SERVICE_URLhttp://auth:3002nointernal auth service URL
DENO_INTERNAL_URLhttp://deno:8082nointernal edge-runtime URL
REALTIME_INTERNAL_URLrealtime:4000nointernal realtime service host:port
RUST_LOGinfonolog level (debug for troubleshooting)

Scale-to-zero & connection pooling

VariableDefaultDescription
ANVILBASE_PROJECT_POOL_MAX20max Postgres connections per project pool (values < 1 fall back to 20)
ANVILBASE_POOL_IDLE_TIMEOUT_SECS300scale-to-zero idle window: release an idle project’s pooled DB + Valkey resources after this long, restoring lazily on next use. 0 disables eviction; bad values fall back to 300

Auth (Better Auth)

VariableDefaultSecretDescription
AUTH_PORT39002 (int. 3002)noHTTP port
AUTH_SECRETyesBetter Auth session signing secret — required
DATABASE_URLderived from ANVILBASE_DB_PASSWORDyesPostgres connection string
INTERNAL_SECRETyesshared service-to-service secret (must match control plane) — required
CONTROL_PLANE_SECRETyesalso injected so auth can verify platform tokens — required
CONTROL_PLANE_URLhttp://control-plane:3001nofor event forwarding
CONTROL_PLANE_INTERNAL_URLhttp://control-plane:3001nointernal control-plane URL for settings/secret fetches
BETTER_AUTH_URLhttp://localhost:3002nobase URL Better Auth uses for callbacks
TRUSTED_ORIGINSunsetnocomma-separated extra origins Better Auth accepts (CSRF allow-list)
AUTH_ALLOWED_REDIRECT_URLSmyapp://auth/reset-password,myapp://auth/callbacknocomma-separated allowed post-auth redirect URLs (incl. mobile deep links)
AUTH_SETTINGS_FETCH_TIMEOUT_MS3000notimeout (ms) when fetching per-project auth settings from the control plane
PLATFORM_PROJECT_IDemptynoproject id used for platform-level transactional email (password reset, etc.)

MFA tuning (auth)

VariableDefaultDescription
MFA_TOTP_ISSUERAnvilBaseissuer label shown in authenticator apps
MFA_MAX_ATTEMPTS5failed-verification attempts before a factor locks
MFA_LOCKOUT_SECS900lockout duration in seconds (15 min) after MFA_MAX_ATTEMPTS

Per-recipient send caps (Supabase over_email_send_rate_limit / over_sms_send_rate_limit parity) throttle how often the passwordless / reset endpoints (/otp, /magiclink, /resend, /recover) can send to a single recipient — complementing the per-IP control-plane guard. The cap is recipient-keyed, so it fires identically for existing and non-existing recipients (no user-enumeration signal). Over-limit returns 429 with a Retry-After header.

VariableDefaultDescription
OTP_EMAIL_SEND_MAX5max email sends per recipient per window
OTP_SMS_SEND_MAX3max SMS sends per recipient per window (tighter — SMS costs money)
OTP_SEND_WINDOW_SECS3600send-cap window length in seconds (1 hour)

Realtime (Phoenix)

VariableDefaultSecretDescription
REALTIME_PORT39040 (int. 4000)noPhoenix HTTP port (host mapping; container reads PORT)
PORT4000nocontainer-internal Phoenix port
SECRET_KEY_BASEyesPhoenix secret (≥ 64 chars) — required
DATABASE_URLderived from ANVILBASE_DB_PASSWORDyesPostgres connection string
INTERNAL_SECRETyesshared service-to-service secret — required
CONTROL_PLANE_URL(compose-set)nocontrol-plane URL for project/secret lookups
PHX_HOSTlocalhostnoendpoint hostname
PHX_SERVERtruenostart the HTTP server (vs. release-only)
MIX_ENVprodnoElixir environment
DNS_CLUSTER_QUERYunsetnoDNS query for libcluster node discovery (multi-node; normally unset)
ANVILBASE_REALTIME_MAX_DB_CONNECTIONScompose 40 (code: unset = no budget)noclamp on total realtime DB connections (projects × (1 + query_pool_size))
ANVILBASE_REALTIME_MAX_LISTENERS256nocap on concurrent per-project LISTEN connections
ANVILBASE_REALTIME_QUERY_POOL_SIZE2noper-project query-pool size (in addition to the 1 LISTEN connection)

Webhooks

VariableDefaultSecretDescription
WEBHOOKS_PORT39003 (int. 3003)noHTTP port
CONTROL_PLANE_SECRETyesdecrypts per-project webhook signing material — required
WEBHOOK_MAX_RETRIES5nodelivery attempts before dead-letter
WEBHOOK_TIMEOUT30noper-attempt delivery timeout (seconds)
WEBHOOK_RETRY_BASE_DELAY10nobase seconds for exponential backoff between attempts
WEBHOOK_MAX_CONCURRENT10nomax concurrent in-flight deliveries
ALLOW_INTERNAL_WEBHOOK_TARGETSfalsenodisables the SSRF private-IP guard (leave off in production)
ANVILBASE_METRICS_TOKENunsetyesoptional Bearer gate on /metrics

The delivery-timeout env var is WEBHOOK_TIMEOUT (seconds), not WEBHOOK_TIMEOUT_SECONDS.

Deno edge functions

The Deno runtime executes untrusted per-project function code. Most knobs tune the per-project worker supervisor; defaults are production-safe.

VariableDefaultSecretDescription
DENO_PORT8082nocontainer-internal HTTP port
ANVILBASE_EDGE_ISOLATIONper-projectnoisolation model: per-project (process per project) or per-invocation (fresh isolate per request)
DENO_SUPERVISORonnooff reverts to the legacy single-process runtime (rollback hatch)
DENO_MAX_WORKERS16nomax live per-project workers (LRU eviction beyond this)
DENO_WORKER_IDLE_MS300000noreap an idle worker after this long (5 min)
DENO_REQUEST_TIMEOUT_MS30000noper-request upstream timeout
DENO_WORKER_START_TIMEOUT_MS10000nomax time to wait for a worker to become ready
DENO_WORKER_BACKOFF_START_MS1000noinitial restart backoff after a worker crash
DENO_WORKER_BACKOFF_CAP_MS30000nomaximum restart backoff
DENO_WORKER_HEALTHY_RESET_MS60000nohealthy uptime after which the backoff counter resets
DENO_WORKER_TMP_BASE(compose tmp mount)nobase directory for per-worker scratch space
FUNCTIONS_DIR/functionsnoroot of deployed function code (scoped /functions/<project_id>)
CONTROL_PLANE_INTERNAL_URLhttp://control-plane:3001nofor fetching per-project secrets
INTERNAL_SECRETyesshared service-to-service secret — required

Console

VariableDefaultDescription
CONSOLE_PORT39004 (int. 3004)web port
VITE_API_URLsame origincontrol-plane API URL baked at build time

Storage (MinIO / RustFS)

VariableDefaultSecretDescription
MINIO_ROOT_USERanvilbasenoadmin user (also the S3 access key)
MINIO_ROOT_PASSWORDyesadmin password (≥ 8 chars) — required
MINIO_KMS_SECRET_KEYyesSSE-S3 key, <key-id>:<base64(32 bytes)>required (bucket encryption / project creation rejects without it)
MINIO_PORT39900 (int. 9000)noS3 API port
MINIO_CONSOLE_PORT39901 (int. 9001)noMinIO web console
ANVILBASE_TUS_STALE_HOURS24noA resumable (TUS) upload untouched (updated_at) for longer than this is aborted + its rows dropped by the background sweeper. Values ≤ 0 fall back to 24.
ANVILBASE_TUS_SWEEP_INTERVAL_SECS3600noCadence between abandoned-resumable-upload sweeps. Values ≤ 0 fall back to 3600.
ANVILBASE_TUS_SWEEP_ENABLEDtruenoSet to false/0/off/no to disable the abandoned-resumable-upload sweeper.

The RustFS overlay (docker-compose.rustfs.yml) reuses MINIO_ROOT_USER / MINIO_ROOT_PASSWORD as its S3 credentials.

imgproxy (optional)

VariableDefaultSecretDescription
IMGPROXY_KEYunsetyesHMAC key for signed image URLs
IMGPROXY_SALTunsetyesHMAC salt
IMGPROXY_BASE_URLhttp://imgproxy:8081nointernal URL the control plane reaches imgproxy at

IMGPROXY_KEY and IMGPROXY_SALT must be set together to enable signing. See Image Transformations.

Valkey

VariableDefaultSecretDescription
VALKEY_PORT39637 (int. 6379)noport
VALKEY_PASSWORDyesauth password — required

Supavisor (connection pooler)

VariableDefaultSecretDescription
SUPAVISOR_PORT39654 (proxies int. 6543)notransaction-pooler host port
SUPAVISOR_API_PORT4100 (loopback → int. 4000)noSupavisor admin API host port
SUPAVISOR_API_URLhttp://supavisor:4000noadmin API URL the control plane calls to manage tenants
SUPAVISOR_API_JWT_SECRETunsetyesJWT secret for the Supavisor admin + metrics APIs
SUPAVISOR_PUBLIC_HOSTlocalhost:${SUPAVISOR_PORT}nohost:port advertised to clients in pooled connection strings
SUPAVISOR_SSL_MODEprefernoclient-facing SSL mode (disable/prefer/require)
SUPAVISOR_POOL_SIZE15nodefault per-tenant pool size
SUPAVISOR_VAULT_ENC_KEYunsetyesencryption key for Supavisor’s tenant-credential vault

See Connection Pooling.

Traefik

VariableDefaultDescription
TRAEFIK_HTTP_PORT39080 (int. 80)HTTP
TRAEFIK_HTTPS_PORT39443 (int. 443)HTTPS
TRAEFIK_DASHBOARD_PORT39081 (int. 8080)disable/relocate in production

Observability

VariableDefaultSecretDescription
PROMETHEUS_PORT39090 (int. 9090)noPrometheus host port
GRAFANA_PORT39091 (int. 3000)noGrafana host port
GRAFANA_ADMIN_USERadminnoGrafana admin user — change in production
GRAFANA_ADMIN_PASSWORDadminyesGrafana admin password — change in production
OTEL_EXPORTER_OTLP_ENDPOINTunsetnowhen set, control-plane / auth / realtime export OTLP traces here (off by default)
OTEL_EXPORTER_OTLP_HEADERSunsetyesoptional headers (e.g. auth) for the OTLP exporter

ANVILBASE_METRICS_TOKEN (above) gates the control-plane and webhooks /metrics endpoints. See Monitoring.

SMTP / Mailpit

In local dev, SMTP points at the always-on Mailpit catch-all so every project sends mail out of the box. Per-project SMTP overrides live in the console / anvilbase projects smtp. These env vars are the platform fallback.

VariableDefaultSecretDescription
SMTP_HOST(Mailpit in dev)noserver hostname
SMTP_PORT587noport
SMTP_USERunsetnousername
SMTP_PASSWORDunsetyespassword
SMTP_FROMnoreply@anvilbase.localnodefault sender
MAILPIT_SMTP_PORT1025noMailpit SMTP host port (local dev)
MAILPIT_UI_PORT8025noMailpit web UI host port (local dev)

mTLS (internal)

Off by default. When enabled, internal listeners require client certs and internal clients present them (both legs). Generate with docker/mtls/generate-certs.sh. See Internal mTLS.

VariableDefaultDescription
ANVILBASE_MTLS_ENABLEDfalseenable mutual TLS between services
ANVILBASE_MTLS_CA/etc/anvilbase/tls/ca.pemCA cert (shared by all services)
ANVILBASE_MTLS_CERT / ANVILBASE_MTLS_KEY/etc/anvilbase/tls/control-plane*.pemcontrol-plane cert/key
ANVILBASE_MTLS_AUTH_CERT / ANVILBASE_MTLS_AUTH_KEY/etc/anvilbase/tls/auth*.pemauth cert/key
ANVILBASE_MTLS_REALTIME_CERT / ANVILBASE_MTLS_REALTIME_KEY/etc/anvilbase/tls/realtime*.pemrealtime cert/key
ANVILBASE_MTLS_DENO_CERT / ANVILBASE_MTLS_DENO_KEY/etc/anvilbase/tls/deno*.pemdeno runtime cert/key

Inside each container the per-service cert/key are remapped onto the generic ANVILBASE_MTLS_CERT / ANVILBASE_MTLS_KEY the runtime reads.

Resource limits

Every service in docker-compose.yml declares an env-tunable deploy.resources.limits ceiling (cpus + memory). Defaults are generous — set above realistic usage so they catch a runaway container without throttling normal operation. Lower them on small hosts (carefully — a *_MEM_LIMIT below real usage OOM-kills the container, Postgres especially) or raise them under load. Full per-service default table: Self-Hosting → Resource limits.

Variable patternDefaultDescription
ANVILBASE_<SERVICE>_CPUSper service (1–4)CPU ceiling (deploy.resources.limits.cpus)
ANVILBASE_<SERVICE>_MEM_LIMITper service (256m–8g)memory ceiling (deploy.resources.limits.memory)
ANVILBASE_DENO_PIDS_LIMIT512hard PID cap on the untrusted edge runtime (fork-bomb guard; never OOMs)
ANVILBASE_CONTROL_PLANE_PIDS_LIMIT2048generous PID cap on the control plane
ANVILBASE_WEBHOOKS_PIDS_LIMIT2048generous PID cap on the webhooks service

<SERVICE>POSTGRES, POSTGRES_REPLICA, CONTROL_PLANE, REALTIME, SUPAVISOR, DENO, WEBHOOKS, AUTH, MINIO, VALKEY, TRAEFIK, IMGPROXY, PROMETHEUS, GRAFANA, MAILPIT, CONSOLE, SOCKET_PROXY, WALG, WALG_SCHEDULER.

Required-secrets summary

Minimum to boot a stack (each refuses to default): POSTGRES_PASSWORD, ANVILBASE_DB_PASSWORD, CONTROL_PLANE_SECRET, INTERNAL_SECRET, AUTH_SECRET, SECRET_KEY_BASE, MINIO_ROOT_PASSWORD, MINIO_KMS_SECRET_KEY, VALKEY_PASSWORD. anvilbase start generates the signing secrets for you.

CLI environment

The anvilbase CLI reads its own environment variables (also settable as flags). Full command/flag catalog: CLI Reference.

VariableFlagDefaultDescription
ANVILBASE_URL--urlcontrol-plane base URL (empty value ignored; a .env in CWD is auto-loaded)
ANVILBASE_TOKEN--tokenmanagement credential (PAT or admin token)
ANVILBASE_TOKEN_<ENV>manifest token_source = "env:ANVILBASE_TOKEN_<ENV>"per-environment token for multi-env link/deploy (you choose the suffix)
REALTIME_URL(derived from --url)WebSocket URL for anvilbase realtime subscribe
NO_COLORunsetdisable ANSI color output
CIunsetCI mode (non-interactive defaults)

Next: Ports.