A free, open-source local AWS emulator — the self-hosted alternative to LocalStack.
CloudDev runs 29 AWS services locally as a single Go binary with zero runtime dependencies. Built for developers who want fast, offline AWS development without cloud costs or vendor lock-in.
- 29 AWS services emulated locally — S3, DynamoDB, DynamoDB Streams, Lambda, Lambda Layers, Lambda Function URLs, SQS (+ FIFO), SNS, API Gateway, API Gateway v2, IAM, STS, KMS, CloudFormation, Step Functions, EventBridge, CloudWatch Events, Secrets Manager, CloudWatch Logs, CloudWatch Metrics, ElastiCache, Cognito, X-Ray, Route53, SSM Parameter Store, Rekognition, SES, and Bedrock
- Single binary — no Docker, no Python, no Java runtime required
- Zero config — works out of the box with your existing AWS CLI and SDKs
- Web dashboard — real-time service status cards at
localhost:4580 - IaC support — auto-detects Terraform, CloudFormation, and Kubernetes configs
- Lambda hot reload — instant function updates without restarts
- Data persistence — state survives restarts via
~/.clouddev/state.json - Cost estimator — see estimated AWS costs for your local workloads
git clone https://github.com/Jeffrin-dev/CloudDev.git
cd CloudDev
go build -o clouddev ../clouddev init my-app
cd my-app
../clouddev up# S3
aws --endpoint-url=http://localhost:4566 s3 mb s3://my-bucket
# DynamoDB
aws --endpoint-url=http://localhost:4569 dynamodb list-tables
# DynamoDB Streams
aws --endpoint-url=http://localhost:4570 dynamodbstreams list-streams
# Lambda
aws --endpoint-url=http://localhost:4574 lambda list-functions
# Lambda Function URLs
curl -X POST http://localhost:4595/2021-10-31/functions/MyFunc/url \
-H "Content-Type: application/json" \
-d '{"AuthType":"NONE"}'
# SQS
aws --endpoint-url=http://localhost:4576 sqs create-queue --queue-name my-queue
# SNS
aws --endpoint-url=http://localhost:4575 sns create-topic --name my-topic
# API Gateway v2
curl -X POST http://localhost:4573/v2/apis \
-H "Content-Type: application/json" \
-d '{"Name":"MyAPI","ProtocolType":"HTTP"}'
# KMS
aws --endpoint-url=http://localhost:4599 kms create-key --description "my-key"
# SSM Parameter Store
aws --endpoint-url=http://localhost:4583 ssm put-parameter \
--name "/myapp/db/host" --value "localhost" --type String
# CloudWatch Metrics
aws --endpoint-url=http://localhost:4582 cloudwatch put-metric-data \
--namespace "MyApp" --metric-name "RequestCount" --value 42 --unit Count
# CloudWatch Events
aws --endpoint-url=http://localhost:4590 events put-rule \
--name MyRule --schedule-expression "rate(5 minutes)" --state ENABLED
# SES
aws --endpoint-url=http://localhost:4579 ses verify-email-identity \
--email-address test@example.com
# Route53
aws --endpoint-url=http://localhost:4589 route53 create-hosted-zone \
--name example.com --caller-reference ref-1
# X-Ray
aws xray put-trace-segments \
--endpoint-url http://localhost:4588 \
--trace-segment-documents '{"id":"seg-1","trace_id":"1-abc-123","name":"my-service"}'
# Rekognition
aws --endpoint-url=http://localhost:4594 rekognition detect-labels \
--image '{"S3Object":{"Bucket":"my-bucket","Name":"photo.jpg"}}'
# Bedrock
curl -X POST http://localhost:4591/foundation-models
curl -X POST http://localhost:4591/model/anthropic.claude-3-sonnet-20240229-v1:0/invoke \
-H "Content-Type: application/json" \
-d '{"prompt":"Hello!","max_tokens_to_sample":100}'| Service | Port | Since |
|---|---|---|
| S3 | 4566 | v0.1.0 |
| DynamoDB | 4569 | v0.1.0 |
| Lambda | 4574 | v0.1.0 |
| SQS (+ FIFO) | 4576 | v0.1.0 |
| API Gateway | 4572 | v0.1.0 |
| Dashboard | 4580 | v0.1.0 |
| SNS | 4575 | v0.2.0 |
| Secrets Manager | 4584 | v0.2.0 |
| CloudWatch Logs | 4586 | v0.2.0 |
| IAM | 4593 | v0.3.0 |
| STS | 4592 | v0.3.0 |
| KMS | 4599 | v0.3.0 |
| CloudFormation | 4581 | v0.3.0 |
| Step Functions | 4585 | v0.3.0 |
| EventBridge | 4587 | v0.3.0 |
| ElastiCache (Redis) | 4598 | v0.3.0 |
| ElastiCache (HTTP) | 4597 | v0.3.0 |
| Cognito | 4596 | v0.3.0 |
| CloudWatch Metrics | 4582 | v0.4.0 |
| Lambda Layers | 4578 | v0.4.0 |
| X-Ray | 4588 | v0.4.0 |
| Route53 | 4589 | v0.4.0 |
| SSM Parameter Store | 4583 | v0.4.0 |
| Rekognition | 4594 | v0.4.0 |
| CloudWatch Events | 4590 | v0.5.0 |
| SES | 4579 | v0.5.0 |
| DynamoDB Streams | 4570 | v0.5.0 |
| Lambda Function URLs | 4595 | v0.5.0 |
| API Gateway v2 | 4573 | v0.5.0 |
| Bedrock | 4591 | v0.5.0 |
clouddev/
├── cmd/ # CLI commands (up, init, status)
├── internal/
│ ├── config/ # Config parser (clouddev.yml)
│ ├── dashboard/ # Web dashboard
│ ├── docker/ # Docker manager
│ ├── iac/ # IaC parser (Terraform/CloudFormation/K8s)
│ ├── persist/ # State persistence
│ ├── costestimator/ # AWS cost estimator
│ └── services/
│ ├── s3/
│ ├── dynamodb/
│ ├── dynamodbstreams/
│ ├── lambda/
│ ├── lambdalayers/
│ ├── lambdaurls/
│ ├── sqs/
│ ├── sns/
│ ├── apigateway/
│ ├── apigatewayv2/
│ ├── iam/
│ ├── sts/
│ ├── kms/
│ ├── cloudformation/
│ ├── cloudwatchlogs/
│ ├── cloudwatchmetrics/
│ ├── cloudwatchevents/
│ ├── stepfunctions/
│ ├── eventbridge/
│ ├── secretsmanager/
│ ├── elasticache/
│ ├── cognito/
│ ├── xray/
│ ├── route53/
│ ├── ssm/
│ ├── ses/
│ ├── rekognition/
│ └── bedrock/
├── go.mod
└── main.go
services:
s3: true
dynamodb: true
lambda: true
sqs: true
api_gateway: true
ports:
s3: 4566
dynamodb: 4569
lambda: 4574
sqs: 4576
api_gateway: 4572
lambda:
functions_dir: ./functions
hot_reload: truego test ./...- S3, DynamoDB, Lambda, SQS, API Gateway, Dashboard, IaC Parser
- SNS, Secrets Manager, CloudWatch Logs, Lambda Hot Reload, Data Persistence
- IAM, STS, KMS, CloudFormation, Step Functions, EventBridge, ElastiCache, Cognito
- CloudWatch Metrics, SQS FIFO, Lambda Layers, X-Ray, Route53, SSM Parameter Store, Rekognition
- CloudWatch Events, SES, DynamoDB Streams, Lambda Function URLs, API Gateway v2, Bedrock
We welcome contributions! Please read CONTRIBUTING.md to get started.
Apache 2.0 — see LICENSE for details.
If CloudDev saves you time or money, please consider giving it a ⭐ on GitHub!
Built for Devs