Thank you for your interest in contributing to CloudDev! This document will help you get started.
- Bug fixes — fix issues in existing service emulators
- New services — add missing AWS services
- Improve parity — make existing emulators more AWS-compatible
- Tests — add missing test coverage
- Documentation — improve README, comments, or examples
- Dashboard — improve the web UI
- Go 1.22+
- Git
- AWS CLI (for live testing)
redis-cli(for ElastiCache testing)
git clone https://github.com/Jeffrin-dev/CloudDev.git
cd CloudDev
go build -o clouddev .
go test ./...Each AWS service lives in its own package under internal/services/:
internal/services/
└── myservice/
├── server.go # Service implementation
└── server_test.go # Tests
Every service must expose:
func Start(port int) errorAnd be wired into cmd/up.go.
- Create
internal/services/myservice/server.go - Implement
Start(port int) error - Add HTTP handler with correct protocol:
- JSON + X-Amz-Target (KMS, Step Functions, EventBridge, Cognito, ElastiCache HTTP)
- Form-encoded + Action (IAM, STS, CloudFormation, SQS, SNS, ElastiCache)
- REST (S3, DynamoDB, Lambda)
- Wire into
cmd/up.go - Add tests in
server_test.go - Update the dashboard service list in
internal/dashboard/server.go
| Service Type | Content-Type | Dispatch |
|---|---|---|
| JSON services | application/x-amz-json-1.1 |
X-Amz-Target header |
| Query services | application/x-www-form-urlencoded |
Action form field |
| REST services | varies | HTTP method + path |
Every service must have tests covering:
- Happy path (basic create/list/describe)
- Error cases (not found, invalid input)
- Roundtrip operations (e.g. encrypt/decrypt, put/get)
Run tests:
go test ./...Run tests for a specific service:
go test ./internal/services/kms/...Always live test before submitting a PR:
./clouddev init test-app
cd test-app
../clouddev up &
sleep 3
# Run your AWS CLI tests here
kill %1 2>/dev/null
fuser -k 4566/tcp 4569/tcp ... 2>/dev/null
cd ..
rm -rf test-app
rm -f ~/.clouddev/state.json- One service per PR — keep PRs focused
- All tests must pass —
go build ./...andgo test ./... - No new variables on left side of := — common Go mistake, double check
- Match existing code style — run
gofmt -w .before committing - Update dashboard — if adding a new service, add it to the dashboard service list
- Descriptive commit messages — e.g.
feat(kms): add KMS encrypt/decrypt
Please open a GitHub issue with:
- CloudDev version (
./clouddev --version) - Go version (
go version) - OS and architecture
- AWS CLI version (
aws --version) - Steps to reproduce
- Expected vs actual behavior
Open a GitHub issue with:
- The AWS service or feature you need
- Your use case
- Any relevant AWS documentation links
type(scope): short description
Types: feat, fix, test, docs, refactor, chore
Scope: service name (s3, kms, cognito, dashboard, etc.)
Examples:
feat(kms): add GenerateDataKey operation
fix(stepfunctions): correct X-Amz-Target prefix
docs(readme): add ElastiCache usage example
By contributing to CloudDev, you agree that your contributions will be licensed under the Apache 2.0 License.
Thank you for helping make CloudDev better! 🙏