Overcast is alpha — behaviour and APIs may change between releases. Pin your version and read the changelog before upgrading.

overcast

Environment variable reference

Every environment variable Overcast reads, with its default: the OVERCAST_* settings, the per-service LAMBDA_*, ECS_*, RDS_*, ELASTICACHE_*, MSK_*, EKS_* and EFS_* overrides, and DOCKER_HOST.

Every variable Overcast reads, with its default. Find one with Ctrl+F; the configuration guides explain the ones that need explaining.

Note

LocalStack spellings are read directly and logged at startup — EDGE_PORT, GATEWAY_LISTEN, LOCALSTACK_HOST, HOSTNAME_EXTERNAL, DATA_DIR, DEFAULT_REGION, DEBUG=1, LS_LOG, PERSISTENCE=1, ENFORCE_IAM, LAMBDA_RUNTIME_ENVIRONMENT_TIMEOUT, LAMBDA_REMOVE_CONTAINERS=0 and DNS_ADDRESS=0. Those, and the thirty-odd LocalStack variables Overcast recognises but ignores, are mapped in LocalStack environment variables.

VariableDefaultDescription
OVERCAST_UI_PORT4567Port for the web management console (--ui-port); 0 disables it. Falls back to an ephemeral port when 4567 is taken. Full binary and full image only
OVERCAST_LISTEN0.0.0.0 containerised, 127.0.0.1 nativeAddress(es) to bind the AWS API to; comma-separate to bind several. See Bind address and port
OVERCAST_HOSTNAMElocalhostHostname embedded in client-facing URLs. Set it to localhost.overcast.sh unless you are offline — see Networking
OVERCAST_SPLIT_HORIZON_HOSTS(none)Extra comma-separated hostnames remapped to Overcast inside the containers it starts, on top of the three built-in ones
OVERCAST_PORT4566TCP port for the AWS API
OVERCAST_STATEautoStorage backend: auto, memory, hybrid, persistent or wal — see Storage and persistence for how auto picks and the durability tradeoffs
OVERCAST_STATE_<SERVICE>(global)Per-service backend override, e.g. OVERCAST_STATE_S3=memory, keyed by service name — see Per-service storage overrides
OVERCAST_HYBRID_FLUSH_INTERVAL5sHow often the hybrid backend flushes in-memory state to disk
OVERCAST_HYBRID_SYNCintervalHybrid pending-log fsync policy: always, interval, or never
OVERCAST_HYBRID_SYNC_INTERVAL100msPeriodic fsync interval used when OVERCAST_HYBRID_SYNC=interval
OVERCAST_HYBRID_DIRTY_ENTRY_THRESHOLD10000Unflushed-write count that triggers an early hybrid flush ahead of the timer (<= 0 disables)
OVERCAST_HYBRID_DIRTY_BYTE_THRESHOLD8388608Approximate unflushed-write bytes that trigger an early hybrid flush (default 8 MiB; <= 0 disables)
OVERCAST_HYBRID_MAINTENANCE_INTERVAL5mHow often the hybrid backend runs background SQLite housekeeping (passive WAL checkpoint + conditional incremental vacuum)
OVERCAST_WAL_FSYNCintervalWAL fsync policy: always, interval, or never
OVERCAST_WAL_FSYNC_INTERVAL100msPeriodic fsync interval used when OVERCAST_WAL_FSYNC=interval
OVERCAST_WAL_MAX_LOG_BYTES67108864WAL log compaction threshold in bytes (default 64 MiB)
OVERCAST_DATA_DIR~/.overcast/dataDirectory for store files and other on-disk state; the Docker images bake /data. LocalStack’s DATA_DIR is an alias, and setting either counts as an explicit data directory for OVERCAST_STATE=auto
OVERCAST_CA_DIR$OVERCAST_DATA_DIR/caWhere the local CA lives — separable from the data dir because a CA outlives disposable state. May be read-only; see Overcast in Docker over HTTPS
OVERCAST_DEFAULT_REGIONus-east-1Fallback region used in ARNs when the SigV4 header carries none. LocalStack’s DEFAULT_REGION is an alias
OVERCAST_ACCOUNT_ID000000000000Account ID embedded in ARNs; must be exactly 12 ASCII digits or startup fails
OVERCAST_LOG_LEVELinfotrace, debug, info, warn, error — see Log levels. LocalStack’s DEBUG=1 is an alias for debug
OVERCAST_DEBUGfalseEnable /_overcast/debug/* endpoints — see Debug endpoints
OVERCAST_DEBUG_TRACE_BUFFER1000Request traces always retained — the floor. Only read when OVERCAST_DEBUG=true; see Debug endpoints § Trace retention
OVERCAST_DEBUG_TRACE_CEILING10000How far a burst may grow retention past the floor
OVERCAST_DEBUG_TRACE_WINDOW1hHow long traces above the floor survive before being reclaimed
OVERCAST_DEBUG_TRACE_PINNED1000Traces kept because they went wrong, exempt from the floor and the window
OVERCAST_DEBUG_TRACE_BYTES_MB512Retained request/response body budget. Overflow is reclaimed before kept failures, and never below the floor
OVERCAST_SERVICE_METRICSautoWhether emulated services record CloudWatch metrics for their own activity: auto, enabled or disabled. PutMetricData from your own code is unaffected either way
OVERCAST_SIGV4_VALIDATEfalseVerify SigV4 signatures (header-signed and presigned) and reject invalid or expired ones with 403 InvalidSignatureException. Unsigned requests still pass through
OVERCAST_ENFORCE_IAMfalseEvaluate the calling principal’s IAM policies and return AWS-shaped AccessDenied when they do not allow the request — see IAM § Request-time enforcement
OVERCAST_ENFORCE_APIGATEWAY_THROTTLEfalseReject API Gateway requests over their usage plan’s throttle or quota with 429. Off by default: the limits are measured and reported, never enforced — see API Gateway
OVERCAST_ENFORCE_APPSYNC_COGNITO_AUTHfalseVerify AMAZON_COGNITO_USER_POOLS bearer tokens on AppSync GraphQL requests against the local Cognito user pool the API names — RS256 signature, issuer, token_use, expiry and appIdClientRegex — instead of only requiring a token to be present. Off by default so resolver tests can keep minting unsigned JWTs — see AppSync § Cognito authorization
OVERCAST_ENFORCE_LAMBDA_RESOURCE_POLICYfalseCheck a function’s resource-based policy before an S3 notification, SNS delivery, API Gateway integration or EventBridge target invokes it, and fail the way that caller fails on AWS. Off by default: statements are stored and returned, never consulted — see Lambda limitations § Resource policies
OVERCAST_CFN_SYNC_WAIT_MS1000Milliseconds CloudFormation waits for fast stack provisioning before returning (0 disables)
OVERCAST_STEPFUNCTIONS_EXECUTION_TIMEOUT15mRunaway guard on one execution, never on StartExecution itself. A state machine’s own TimeoutSeconds can lower it but not raise it
OVERCAST_TLSauto = serve API and web console over HTTPS with a certificate minted from the local Overcast CA (unlocks browser HTTP/2) — see HTTPS and HTTP/2
OVERCAST_TLS_CERTPath to your own TLS certificate (enables HTTPS for API and web console; mutually exclusive with OVERCAST_TLS=auto)
OVERCAST_TLS_KEYPath to the matching TLS private key
OVERCAST_SHUTDOWN_TIMEOUT5sGraceful shutdown wait, which also budgets the final store flush. Nothing is lost when it runs out — unflushed writes replay from the pending log
OVERCAST_PROTOCOL_STRICTfalseReturn 415 when a request arrives in a protocol the target service does not declare, instead of attempting the decode anyway
OVERCAST_DNStrueRun the built-in DNS resolver that serves the split-horizon names to the containers Overcast starts. Failing to bind the port is not fatal
OVERCAST_DNS_PORT53Port for the built-in DNS resolver. Docker’s --dns cannot express a port, so anything other than 53 is only useful for tests
OVERCAST_HOT_RELOADfalseUmbrella switch for hot reload across every compute service — see The inner loop
OVERCAST_LAMBDA_HOT_RELOAD(OVERCAST_HOT_RELOAD)Per-service override: hot reload for Lambda functions
OVERCAST_ECS_HOT_RELOAD(OVERCAST_HOT_RELOAD)Per-service override: hot reload for ECS tasks
OVERCAST_DEBUGGERfalseUmbrella switch for step debugging of user code across every compute service — see Step debugging inside emulated compute
OVERCAST_LAMBDA_DEBUGGER(OVERCAST_DEBUGGER)Per-service override: debug ports for Lambda functions
OVERCAST_ECS_DEBUGGER(OVERCAST_DEBUGGER)Per-service override: debug ports for ECS tasks
OVERCAST_DEBUGGER_LISTEN(OVERCAST_LISTEN host)Address the debug ports bind on: 127.0.0.1 native, 0.0.0.0 in a container so -p 9229-9329:9229-9329 reaches them
OVERCAST_DEBUGGER_PORTS9229-9329Range auto-allocated debug ports are taken from, lowest free first
OVERCAST_DEBUGGER_TIMEOUTattachedWhen a Lambda function’s timeout clock stops: attached (a client is connected), paused (only at a breakpoint; Node.js so far), strict (never) — see Timeouts while paused
OVERCAST_DEBUGGER_WAIT_TIMEOUT120sHow long an invocation of a function tagged overcast:debug-wait=true is held for a debugger to attach before it runs anyway — see Wait for a debugger
OVERCAST_EC2_VPC_STRATEGYsharedHow VPCs map to Docker networks when their CIDRs overlap: shared, strict or remapped — see How a VPC is backed by a Docker network
OVERCAST_MCP_REMOTE_EXPOSUREfalseSecurity-relevant. Declares that /_overcast/mcp will be reachable by non-local clients, and requires OVERCAST_MCP_AUTH_TOKEN. See Exposing MCP
OVERCAST_MCP_AUTH_TOKENBearer token every MCP request must present once set. Treat it like any other credential
OVERCAST_NETWORKovercastDocker network every container Overcast starts joins when it belongs to no VPC. Overcast derives <name>_control from it for the Lambda Runtime API — see Networking
OVERCAST_VPC_EGRESSopenWhether the containers Overcast starts reach anything outside this machine: open, routed or none. Any other value fails startup — see Egress modes
OVERCAST_VPC_EGRESS_POOL198.18.0.0/16IPv4 range the per-VPC egress networks of routed are carved from, one /24 each. /8 to /24; the default supports 256 VPCs with egress — see The address-pool ceiling
OVERCAST_CONTROL_PLANE_INTERNALautoDeprecated, use OVERCAST_VPC_EGRESS. Pins whether <name>_control alone is created --internal: auto, true, false. Still honoured; setting it logs a deprecation notice — see Control-plane isolation
DOCKER_HOSTDocker’s own variable, read when LAMBDA_DOCKER_SOCKET is unset — the one Colima, Rancher Desktop, Podman and rootless Docker tell you to set. ssh:// and https:// are not dialable, and warn
LAMBDA_DOCKER_SOCKET(DOCKER_HOST, else /var/run/docker.sock on Linux/macOS, npipe:////./pipe/docker_engine on Windows)Docker endpoint — Unix path, Windows named pipe, or tcp://host:port for DinD. Every per-service socket override below must address the same daemon
LAMBDA_RUNTIME_API_PORT9001Port of the shared Lambda Runtime API listener; 0 = ephemeral. A taken default falls back to an ephemeral port — see Running two instances on one host
LAMBDA_RUNTIME_API_HOSTautoAddress Lambda containers dial for the Runtime API. auto probes the candidates; a bare address (host.docker.internal, or an IP) pins it, and a scheme, port or path is rejected — see Containers cannot reach the Runtime API
LAMBDA_DOCKER_MAX_CONCURRENT_STARTS(auto)Max concurrent Docker-backed Lambda container starts. Unset: derived from the Docker host as clamp(NCPU/2, 2, 8) (each start bursts ~2 CPUs during INIT); 4 when Docker /info is unavailable
LAMBDA_MAX_INSTANCES(auto)Max Lambda containers across all functions. Unset: derived from the Docker host as clamp(MemTotal×0.65 / 256 MiB, 4, 32); 25 when /info is unavailable
LAMBDA_MAX_INSTANCES_PER_FUNCTION(auto)Max concurrent containers for one function. Unset: clamp(maxInstances/2, 2, maxInstances); 10 when /info is unavailable
LAMBDA_MAX_MEMORY_MB(auto)Aggregate memory budget for live Lambda containers (Σ MemorySize, in MB). Unset: 65% of the Docker host’s MemTotal; unlimited when /info is unavailable
LAMBDA_MAX_WARM_INSTANCES10Idle containers kept warm per function after a burst
LAMBDA_SEED_RUNTIME_IMAGESfalsePre-pull every currently-supported Lambda runtime image at startup
LAMBDA_INIT_TIMEOUT_SECONDS10Max seconds to wait for a Lambda runtime to finish INIT. LocalStack’s LAMBDA_RUNTIME_ENVIRONMENT_TIMEOUT is an alias
LAMBDA_KEEP_CONTAINERSfalseKeep stopped Lambda containers after expiry/delete (useful for debugging)
LAMBDA_TAR_CACHE_MB256In-memory cache of pre-built cold-start code and layer tars; 0 disables it
LAMBDA_PROACTIVE_INITtruePre-initialise one execution environment once a function’s configuration settles; set false to opt out
LAMBDA_FETCH_REMOTE_LAYERSfalseDownload layers missing locally from real AWS (needs the LAMBDA_REMOTE_AWS_* credentials)
LAMBDA_LAYER_CACHE_DIR$OVERCAST_DATA_DIR/layersWhere layer zips are looked up and cached, named {sha256(arn)}.zip
LAMBDA_REMOTE_AWS_ACCESS_KEY_IDAWS access key ID used by LAMBDA_FETCH_REMOTE_LAYERS
LAMBDA_REMOTE_AWS_SECRET_ACCESS_KEYAWS secret access key used by LAMBDA_FETCH_REMOTE_LAYERS
LAMBDA_REMOTE_AWS_SESSION_TOKENOptional AWS session token used by LAMBDA_FETCH_REMOTE_LAYERS
ECS_DOCKER_SOCKET(Lambda socket)Docker endpoint for ECS — Unix path or tcp://host:port
ECS_KEEP_CONTAINERSfalseKeep stopped ECS task containers after they exit
OVERCAST_RDS_MODElivelive runs a real engine container per instance; mock is metadata-only
RDS_DOCKER_SOCKET(Lambda socket)Docker endpoint for RDS — Unix path or tcp://host:port
RDS_PORT_BASE33060Starting host port for RDS containers (each instance gets the next available port)
RDS_KEEP_CONTAINERSfalseKeep stopped RDS containers after instance deletion
ELASTICACHE_DOCKER_SOCKET(Lambda socket)Docker endpoint for ElastiCache — Unix path or tcp://host:port
ELASTICACHE_PORT_BASE63790Starting host port for ElastiCache engine containers
ELASTICACHE_KEEP_CONTAINERSfalseKeep stopped ElastiCache containers after deletion
MSK_DOCKER_SOCKET(Lambda socket)Docker endpoint for MSK — Unix path or tcp://host:port
MSK_PORT_BASE49092Starting host port for MSK broker containers
MSK_KEEP_CONTAINERSfalseKeep stopped MSK containers after cluster deletion
OVERCAST_EKS_MODEmockmock is metadata-only; live runs real cluster containers — see EKS
EKS_DOCKER_SOCKET(Lambda socket)Docker endpoint for EKS — Unix path or tcp://host:port
OVERCAST_EFS_MODElivelive backs file systems with real storage (inert without Docker); mock is metadata-only — see EFS
EFS_DOCKER_SOCKET(Lambda socket)Docker endpoint for EFS — Unix path or tcp://host:port
OVERCAST_EFS_NFSfalseRun one NFS-Ganesha export container per mount target (live mode only) — see EFS
EFS_NFS_PORT_BASE22049Starting host port for the NFS export containers
EFS_NFS_IMAGEregistry.k8s.io/sig-storage/nfs-provisioner@sha256:…Digest-pinned image used for the NFS export containers
OVERCAST_ECR_REGISTRY_PORT4510Host port the shared ECR registry container asks for; 0, or a port already taken, falls back to an ephemeral port
OVERCAST_ECR_REGISTRY_PERSISTtrueBack the fixed-port registry with a named Docker volume, so pushed images survive a restart
OVERCAST_SMTP_MOCKtrueEnable built-in SMTP capture server (auto-disabled when OVERCAST_SMTP_HOST is set)
OVERCAST_SMTP_PORT1025Port for the mock SMTP server; 0 = ephemeral. A taken default falls back to an ephemeral port — see Running two instances on one host
OVERCAST_SMTP_HOSTExternal SMTP relay hostname (disables the mock server)
OVERCAST_SMTP_FROMovercast@localhostEnvelope From address for outbound SNS email notifications
OVERCAST_SMTP_USERNAMESMTP AUTH PLAIN username for external relay
OVERCAST_SMTP_PASSWORDSMTP AUTH PLAIN password for external relay
OVERCAST_SMTP_TLSfalseEnable implicit TLS (port 465) for external relay
OVERCAST_SMTP_INBOX_MAX500Maximum number of captured messages retained before eviction
OVERCAST_INIT_ENABLEDtrueRun init-hook scripts found in OVERCAST_INIT_DIRS at startup; set false to disable
OVERCAST_INIT_DIRS/etc/localstack/init,/etc/overcast/initComma-separated base directories scanned for init-hook scripts in boot.d/, start.d/, ready.d/ and shutdown.d/ — see Endpoints and init hooks
OVERCAST_INIT_TIMEOUT30sPer-script timeout for init hooks