Skip to content

Switching from LocalStack

CloudMock uses the same port (4566), same endpoint pattern, and same AWS SDK configuration as LocalStack. Most migrations take under 5 minutes.

If you’re using Docker Compose, change one line:

# Before (LocalStack)
services:
localstack:
image: localstack/localstack:latest
ports: ["4566:4566"]
# After (CloudMock)
services:
cloudmock:
image: ghcr.io/viridian-inc/cloudmock:latest
ports: ["4566:4566"]

That’s it. Same port, same endpoint. Your app code doesn’t change.

Terminal window
# Before
pip install localstack && localstack start
# After
npx cloudmock
# or: brew install viridian-inc/tap/cloudmock && cloudmock
LocalStackCloudMockNotes
docker run localstacknpx cloudmockNo Docker needed
SERVICES=s3,dynamodbCLOUDMOCK_PROFILE=minimalOr full for all 99
localstack statuscurl localhost:4599/api/servicesAdmin API on 4599
awslocal s3 lsaws --endpoint http://localhost:4566 s3 lsSame endpoint
tflocalcloudmock-terraformSame pattern
cdklocalcloudmock-cdkSame pattern
LOCALSTACK_API_KEYNot neededAll features free
Cloud Pods (Pro)cloudmock --state state.jsonBuilt-in, free
Chaos testing (Pro)curl -X POST localhost:4599/api/chaosBuilt-in, free
CI Analytics (Pro)DevTools at localhost:4500Built-in, free
LocalStackCloudMock
LOCALSTACK_HOSTNAMENot needed (always localhost)
EDGE_PORT=4566CLOUDMOCK_PORT=4566
DEFAULT_REGION=us-east-1CLOUDMOCK_REGION=us-east-1
SERVICES=s3,sqsCLOUDMOCK_PROFILE=minimal
DEBUG=1Logs always visible
Terminal window
# Before
pip install terraform-local && tflocal init && tflocal apply
# After
go install github.com/neureaux/cloudmock/tools/cloudmock-terraform@latest
cloudmock-terraform init && cloudmock-terraform apply
Terminal window
# Before
pip install aws-cdk-local && cdklocal deploy
# After
go install github.com/neureaux/cloudmock/tools/cloudmock-cdk@latest
cloudmock-cdk deploy
# Before (LocalStack)
import boto3
@pytest.fixture
def s3_client():
return boto3.client("s3", endpoint_url="http://localhost:4566")
# After (CloudMock)
from cloudmock import CloudMock
@pytest.fixture(scope="session")
def aws():
with CloudMock() as cm:
yield cm
@pytest.fixture
def s3_client(aws):
return aws.boto3_client("s3")
// Before (LocalStack)
const { S3Client } = require("@aws-sdk/client-s3");
const s3 = new S3Client({ endpoint: "http://localhost:4566" });
// After (CloudMock)
const { CloudMock } = require("@cloudmock/sdk");
let cm;
beforeAll(async () => { cm = new CloudMock(); await cm.start(); });
afterAll(async () => { await cm.stop(); });
const s3 = new S3Client(cm.clientConfig());
// Before (LocalStack)
cfg.BaseEndpoint = aws.String("http://localhost:4566")
// After (CloudMock — in-process, 20μs/op)
cm := sdk.New()
defer cm.Close()
s3Client := s3.NewFromConfig(cm.Config())
# Before
- uses: localstack/[email protected]
with:
image-tag: latest
# After
- uses: viridian-inc/cloudmock-action@v1
FeatureLocalStack FreeCloudMock
Services~2599
Chaos testingPro ($35/mo)Free
State snapshotsPro ($35/mo)Free
CI analyticsPro ($35/mo)Free
Traffic replayNoFree
Contract testingNoFree
In-process modeNoFree (Go)
10 language SDKsNoFree
Memory usage583 MB67 MB
Startup time2.1s65ms
  • CloudMock doesn’t run Lambda code in Docker containers (Lambda handlers are stored but not executed)
  • CloudMock’s DevTools UI is at port 4500 (not part of the main endpoint)
  • CloudMock uses BSL-1.1 license (free for dev/test, commercial use requires license for production hosting)