Contributing to fakecloud
April 16, 2026 · View on GitHub
Thanks for your interest in contributing. This document covers the conventions and expectations for changes to fakecloud.
Ground rules
- Every change needs tests. Bug fixes need regression tests. Features need E2E tests using the real AWS SDK. No exceptions — "I tested it manually" is not enough, because CI needs to catch it if it regresses.
- Tests hit real behavior, not mocks. fakecloud's E2E suite uses the official
aws-sdk-rustcrates to talk to a real fakecloud server. Follow the same pattern. - Match AWS exactly. Response shapes, field names, error codes, HTTP status codes, ID formats — all of it. Don't simplify. If AWS returns a specific string format for a token, fakecloud should too. Conformance is measured against AWS's own Smithy models.
- No stub responses. If you can't implement real behavior for an operation, return a proper AWS error, not a fake success. Conformance must reflect what the code actually does.
- Implement every operation. When adding a service, implement every operation in the Smithy model. Don't skip operations as "niche" or "admin-only" — the next person hitting that gap won't appreciate it.
Workflow
-
Fork and branch.
git checkout -b feat/my-featureorfix/my-bug. Use worktrees if you're running parallel work (git worktree add). -
Write the test first, or at least alongside the implementation. E2E tests live in
crates/fakecloud-e2e/tests/. -
Conventional commits.
feat:,fix:,chore:,test:,refactor:,docs:. Scope is optional but helpful (feat(bedrock): ...). -
Run the full suite locally before pushing:
cargo test --workspace cargo clippy --workspace --all-targets -- -D warnings cargo fmt --all --check -
Open a pull request with a clear description and a test plan. Link related issues.
-
Wait for CI and automated review. CI runs the full test suite, the conformance probe, and automated review. Fix any findings on the spot in the same PR — don't defer them.
-
Never merge with red CI. Every job must be green, including ones unrelated to your change. If you see a pre-existing failure, report it — don't merge around it.
Code style
- Rust edition 2021. See
Cargo.tomlfor the MSRV. - Per-operation error enums with
thiserror. No service-wide "god enums" that collect every possible error. - Prefer focused functions, but not dogmatically. Long is not the same as bad. A linear operation handler that parses a request, validates it, mutates state, and builds a response is fine even if it's 200 lines — splitting it into six tiny helpers just scatters one flow across the file and hurts readability. What to actually avoid: deep nesting, repeated blocks that should be one helper, and match arms where the body has meaningful independent logic worth naming. If a split makes the code easier to follow, do it. If it just chops a linear flow into pieces for line-count reasons, don't.
- Don't
.clone()or.to_string()defensively. Borrow when you can; clone when ownership is genuinely required.
Adding a service
- Commit the AWS Smithy model to
aws-models/. - Create a new crate under
crates/fakecloud-<service>/and add it to the workspaceCargo.toml. - Implement the service's state, dispatch, and operation handlers. Use other services as a reference — S3, SQS, and Bedrock are good models for REST, Query, and per-provider routing respectively.
- Add the service to the server's router in
crates/fakecloud-server/src/main.rs. - Write E2E tests in
crates/fakecloud-e2e/tests/<service>.rsusing the official AWS SDK. - Run the conformance probe:
cargo run -p fakecloud-conformance -- run --services <service>. Fix failures until it reports 100%. - Update the
conformance-baseline.jsonbaseline. - Add a service page to
website/content/docs/services/<service>.md. - If the service is a market differentiator (paywalled by LocalStack, unique cross-service wiring, real infrastructure), update the README comparison table.
- Ship SDK helpers for TypeScript, Python, Go, PHP, Java, and Rust if the service exposes introspection or simulation endpoints that tests benefit from. SDK updates go in the same PR as the service — not as a follow-up.
Reporting bugs
Open an issue at github.com/faiscadev/fakecloud/issues with:
- What you called (AWS API, parameters, SDK if applicable)
- What fakecloud returned
- What real AWS returns for the same call (if you've checked)
- Minimal reproduction — a small test or a curl command
If it's a behavioral parity bug (fakecloud and real AWS disagree), that's a high-priority bug. The whole project is built around conformance.
Questions
Open a discussion or an issue. The only bad question is the one that lets someone else hit the same wall later without a recorded answer.