The AWS API has become infrastructure's common language, and a whole ecosystem has grown up around running it somewhere other than AWS. Some tools mock it for testing. Others implement it for real. Knowing which is which saves you from deploying a dev tool to production or wiring a production platform into your CI pipeline.
Two categories
The tools split into emulators and real cloud platforms. Emulators intercept AWS API calls and return plausible responses without provisioning real infrastructure: state is ephemeral, VMs never boot, and the goal is a behavioural approximation fast enough for a developer's inner loop. Real cloud platforms provision actual infrastructure where EC2 calls boot real virtual machines and block storage carries real persistence guarantees.
Emulators
Moto
Moto (github.com/getmoto/moto,
Apache 2.0, 8,400+ stars) has been around since 2013, making it the oldest
option here. It works differently from the rest because rather than running
a local server, it patches boto3 calls in-process through a test decorator.
A function wrapped in @mock_aws
intercepts all AWS SDK calls and returns mock responses without any network traffic.
This makes it fast and easy to drop into Python test suites, but it only works
for Python. Teams using the AWS CLI, Terraform, or Go SDKs need a server-based
option.
LocalStack
LocalStack (github.com/localstack/localstack, 64,000+ stars) is the dominant name in local AWS development. It runs as
a Docker container exposing the AWS API on localhost:4566 and covers
over 120 services. In March 2026, LocalStack archived its Community Edition repository
and moved core services behind a paid plan. A free tier remains for non-commercial
use and open source projects, but the Base plan covering Cloud Pods persistent
state costs $39 per month and the Ultimate plan runs $89 per month. Teams that
depended on CE for commercial CI pipelines are now evaluating alternatives.
Floci
Floci (floci.dev,
github.com/floci-io/floci,
MIT, 22,800+ stars) launched in March 2026 as a direct response to the
LocalStack CE archival. It covers 84 AWS services on localhost:4566, requires no account, collects no telemetry, and ships as a single Docker
image built on Quarkus and GraalVM native. The result is a 24ms startup time
and a 13 MiB idle memory footprint. The star count reflects genuine
demand from teams who wanted a zero-friction replacement and found one fast.
Fakecloud
Fakecloud (fakecloud.dev, github.com/faiscadev/fakecloud, MIT, ~500 stars) covers 105 services and 7,396 operations, claiming full Smithy conformance against the AWS service model. The binary is around 19 MB and idles at roughly 10 MiB. Services include S3, DynamoDB, SQS, Lambda, IAM, STS, ECS, ECR, EC2, RDS with six real database engines, Bedrock, and 80+ more. It is a newer and smaller project than Floci but more ambitious in scope.
MiniStack
MiniStack (github.com/ministackorg/ministack, MIT, 4,300 stars) covers 60+ services including S3, SQS, DynamoDB, Lambda, SNS, IAM, STS, Kinesis, EventBridge, Secrets Manager, SSM, CloudWatch, and SES. It supports Terraform, boto3, the AWS CLI, and CDK, and handles multi-account and multi-region configurations. The multi-region support puts it ahead of simpler options for teams testing region-aware workloads.
Real cloud platforms
Ubicloud
Ubicloud (github.com/ubicloud/ubicloud, AGPL-3.0, Ruby, 12,300 stars) is a managed cloud service running on
Hetzner and Leaseweb hardware. It offers elastic compute, block storage,
firewall, load balancer, managed Postgres, Kubernetes, AI inference
endpoints, and IAM, at prices 3 to 10x below the equivalent AWS
services. It belongs in this conversation with one caveat: Ubicloud does
not expose the AWS API. It runs its own control plane, its own
ubi CLI, and its own API surface, so the Terraform AWS
provider, eksctl workflows, and AWS CLI scripts your team already uses do
not carry over. Moving to Ubicloud swaps one cloud for a cheaper cloud and
asks your team to learn a new operational model, rather than repointing the
tooling you have.
Spinifex
Spinifex (AGPL-3.0, Go) implements
EC2, EBS, S3, VPC, IAM, EKS, ECS, ECR, and RDS on hardware you own, with no external
control plane and no internet requirement. An aws ec2 run-instances call boots a real VM via QEMU. S3 calls go to an erasure-coded object store.
IAM policies enforce against real network boundaries. The same Terraform configs,
eksctl workflows, and AWS CLI scripts that run against AWS run against Spinifex
with a single provider endpoint override.
Spinifex targets environments where data cannot leave hardware under direct control and where the infrastructure needs to operate with no external dependencies, covering air-gapped facilities, edge deployments, and sovereign environments. Full documentation including air-gapped install and reference architectures for specific hardware is at docs.mulgadc.com.
What to use when
For Python test suites, Moto is the natural choice because it is in-process, fast, and has been maintained for over a decade. For local dev or CI in any language, Floci offers the smallest footprint with zero account requirements, LocalStack offers the widest service coverage for teams already on a paid plan, and MiniStack or Fakecloud fill the gap for multi-region needs or specific services those two cover. For a cheaper cloud where connectivity is not a concern, Ubicloud cuts the bill, though on its own API rather than the AWS tooling you have built. For hardware you own, Spinifex runs the AWS tooling you have already built on infrastructure that never calls home.
Most teams end up using something from both categories because an emulator covers dev and CI while a real platform handles production or sovereign workloads. The endpoint changes; the code does not.