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

overcast

Reference

LocalStack compatibility matrix

Every part of a LocalStack setup — ports, endpoints, hostnames, container conventions, client tooling and behavioural conventions — with its status against Overcast.

Everything a LocalStack setup touches, item by item, with what it does here — measured against LocalStack’s interface as it stands after its March 2026 edition change, not against any edition’s service list (why). Start at Migrating from LocalStack for the short version.

StatusMeans
WorksCarries over untouched
AliasedOvercast answers LocalStack’s own name or URL
DiffersWorks, but not identically — the cell says how
GapDoes not work; the linked issue tracks it
No equivalentThe concept does not exist here; the alternative is named

Ports

ItemStatusNotes
Edge port 4566WorksSame default. AWS_ENDPOINT_URL needs no change
EDGE_PORT, GATEWAY_LISTENAliasedGATEWAY_LISTEN takes one port; LocalStack’s own default names two
Gateway on 443DiffersTLS is served on the same port via OVERCAST_TLS — see HTTPS
External service ports 4510-4559DiffersPer-service bases instead of one pool. #1548
Web console 4567WorksOvercast-only; LocalStack has no equivalent

Endpoints

Full mapping in Endpoints and init hooks.

ItemStatusNotes
/_localstack/healthAliasedServed in LocalStack’s shape, plus an emulator field
/_localstack/init, /init/{stage}AliasedByte-identical: the shapes already matched
POST /_localstack/state/resetAliasedReturns {"status":"reset"}; LocalStack returns nothing
/_localstack/info, /state, /diagnose, /configNo equivalentThe 404 names the /_overcast/debug/* endpoint to use instead
/_localstack/usage, /pluginsNo equivalentThe 404 names /_overcast/metrics for usage; there are no plugins to list
/_localstack/state/save, /loadNo equivalentPersistence is incremental, not snapshot-based
GET/DELETE /_aws/sesAliasedLocalStack’s shape, from the same inbox as /_overcast/ses/inbox/messages; Region and RawData are omitted — the capture does not hold them
/_aws/sqs/messagesAliasedXML ReceiveMessageResponse, or JSON under Accept: application/json; ?QueueUrl=, ?QueueName=&QueueRegion= and the /{region}/{account}/{queue} path form; ShowInvisible, ShowDelayed
/_aws/sns/sms-messages, /platform-endpoint-messages, /_aws/lambda/runtimesGap#1545. The 404 names the /_overcast/ endpoint that has the data
/_aws/sns/subscription-tokens/{arn}, DELETE /_aws/dynamodb/expiredNo equivalentThe token is not exposed; TTL expiry has no manual trigger. Split out of #1545
/restapis/{id}/{stage}/_user_request_/WorksLocalStack’s API Gateway invoke URL, served verbatim
/_aws/execute-api/{id}/{stage}/Gap#1545. The host-routed form below usually makes it unnecessary

Hostnames and DNS

Every row here is verified against a running instance.

ItemStatusNotes
localhost.localstack.cloudWorksA built-in wildcard base, alongside localhost.overcast.sh
*.localhost.localstack.cloudWorksSplit-horizon: remapped inside containers Overcast starts
s3.localhost.localstack.cloudWorksRecognised as the service endpoint, not a bucket named s3
{bucket}.s3.localhost.localstack.cloudWorksVirtual-hosted S3
{bucket}.localhost.localstack.cloudWorksThe bare form too — no s3. label needed
{id}.execute-api.localhost.localstack.cloudWorksRegion segment optional, as LocalStack omits it
{id}.lambda-url.{region}.localhost.localstack.cloudWorks
LOCALSTACK_HOST, HOSTNAME_EXTERNALAliasedBoth map to OVERCAST_HOSTNAME
Built-in DNS server on 53WorksOVERCAST_DNS; DNS_ADDRESS=0 turns it off
DNS_RESOLVE_IP, DNS_SERVERNo equivalentResolves to Overcast’s own address; forwards to the system resolver
Transparent *.amazonaws.com interceptionNo equivalentPoint AWS_ENDPOINT_URL at Overcast instead

Environment variables

ItemStatusNotes
Every documented LocalStack variableAliased or inertOne with an Overcast equivalent is read as an alias; every other is recognised, does nothing, and says so in a startup log line. Full table: LocalStack environment variables

Container conventions

ItemStatusNotes
ports: ["4566:4566"]Works
/var/run/docker.sock mountWorksNeeded for Lambda, ECS, RDS and the rest of the container-backed services
DOCKER_HOSTWorksRead when LAMBDA_DOCKER_SOCKET is unset — Colima, Rancher Desktop, Podman, rootless
Volume at /var/lib/localstackWorksAdopted as the state directory when it is the only volume mounted
Init hooks in /etc/localstack/init/{stage}.d/WorksBoth that tree and /etc/overcast/init/ are scanned
awslocal in the imageWorksSame wrapper; needs the aws CLI present
Ready. readiness log lineWorksPrinted verbatim once every listener is bound, after Overcast’s own overcast ready line
/usr/local/bin/docker-entrypoint.shAliasedLocalStack’s entrypoint path, symlinked to Overcast’s — what the Java Testcontainers module execs
HEALTHCHECKDiffersProbes /_overcast/health; a compose healthcheck on /_localstack/health also works
VOLUME /var/lib/localstackNo equivalentOvercast declares no volume, so a volume-less run stays ephemeral by default
LOCALSTACK_AUTH_TOKENWorksRecognised and inert: nothing here is auth-gated
LAMBDA_DOCKER_NETWORK, MAIN_DOCKER_NETWORKNo equivalentBoth name the network containers join; Overcast puts everything it starts on OVERCAST_NETWORK and the control plane derived from it. Recognised and inert — see why they are not aliased
Egress from compute in a VPCWorksOVERCAST_VPC_EGRESS=open, the default, matches LocalStack: a VPC-attached Lambda has full egress. none and routed withhold it, which LocalStack cannot express; both need Overcast in a container — see Egress modes and routed
Persistence by defaultDiffersThe image mounts no volume, so OVERCAST_STATE=auto resolves to memory and a restart is a wipe. Set OVERCAST_STATE to decide rather than infer — see Storage and persistence

Client tooling

ItemStatusNotes
awslocalWorksSets --endpoint-url to localhost:4566
cdklocalWorksSee CDK troubleshooting for the asset-publishing caveat on Windows
tflocalWorksIts S3_HOSTNAME default resolves and is recognised
samlocalWorksSets AWS_ENDPOINT_URL and nothing else
Overcast’s Testcontainers module (Go)WorksSee Testcontainers
Generic-container recipe, any languageWorksWait on /_overcast/health or /_localstack/health
LocalStack Testcontainers modulesDiffersAll five start the Overcast image; each has its own rule about which tag you may name — see Testcontainers

Behavioural conventions

ItemStatusNotes
Account 000000000000Works
Credentials test/testWorksAny credentials are accepted; signatures are not verified unless you ask
Default region us-east-1WorksDEFAULT_REGION is an alias
S3 path-styleWorksThe default here, where LocalStack prefers virtual-hosted
S3 virtual-hostedWorksBoth forms, with or without the s3. label
S3 presigned URL hostWorksSigning is client-side; the host is whatever endpoint you configured
SQS queue URLsDiffersMinted on the origin the caller reached — LocalStack’s dynamic strategy, not its standard default
SQS_ENDPOINT_STRATEGYNo equivalentDrop it; see the row above
Lambda reaching the gatewayWorksContainers resolve the split-horizon names through Overcast’s own resolver
x-amz-request-id on every responseDiffersAlways present here; LocalStack omits it on some errors
x-localstack response headerNo equivalent
SigV4 verificationDiffersOff by default, both here and there. OVERCAST_SIGV4_VALIDATE=true turns it on
IAM enforcementWorksENFORCE_IAM is an alias of OVERCAST_ENFORCE_IAM

Not in scope

LocalStack restructured its editions on 23 March 2026: the published image requires an auth token to start, the free plan is “Hobby” and limited to non-commercial use, and most services — ECS, ECR, RDS, ElastiCache, CloudFront, ELB, Cognito, EKS, AppSync, Athena, Glue and MSK among them — sit on the paid Base or Ultimate plans, as does local state persistence. Overcast emulates every one of those services in its single build.

The rows above compare interfaces — the ports, URLs, variables and conventions your setup is written against — rather than service lists. For what Overcast actually emulates, use the service table on the Reference index; a carried-over LOCALSTACK_AUTH_TOKEN is recognised, logged once at startup as inert, and gates nothing.