Floci emulates 76 AWS services without an account or token
Floci presents one AWS-shaped endpoint at port 4566 and lets existing SDKs, the AWS CLI, Terraform, OpenTofu, and CDK talk to it. The pitch is direct: local cloud behavior without a cloud account, an auth token, or paid feature gates. Core services include S3, DynamoDB, SQS, SNS, Lambda, IAM, KMS, Cognito, EventBridge, Step Functions, and CloudFormation. The same repository reaches into databases, analytics, container platforms, billing, governance, and Bedrock APIs.
Breadth is only useful when its limits are visible, and Floci's README does a decent job here. Each service is described as in-process, Docker-backed, a stub, or a simulation. Bedrock Runtime returns dummy responses. Textract and Transcribe return canned or immediate results. Fault Injection Simulator models the control plane without disrupting other services. Application Auto Scaling stores some policies without applying them. A test can validate API wiring against those behaviors, but it cannot infer that AWS will act identically.
Real containers improve fidelity and increase privilege
Floci starts actual engines where wire protocols or runtime behavior matter. RDS uses PostgreSQL, MySQL, or MariaDB containers. ElastiCache uses Valkey, MSK uses Redpanda, DocumentDB uses MongoDB, and EKS uses k3s. Lambda runs AWS runtime images, while ECS starts the image supplied by the user. This is much more useful than returning canned JSON when an application must open a database connection, consume Kafka records, or execute a function.
The documented Docker route mounts /var/run/docker.sock and runs the Floci container as root. That gives the emulator broad control over the host Docker daemon. It may be acceptable on a developer laptop or disposable CI runner, yet it is a serious boundary in shared infrastructure. Real services also pull several upstream images and expose extra ports. Teams should isolate runners, pin image tags, restrict network exposure, and avoid putting production credentials anywhere near the local environment.
What happened when we ran it
Our sandbox measured the nested compatibility-tests/compat-cdk project at commit e4b101d, not the Java server or released Docker image. npm installed 18 packages in 18 seconds and occupied 222 MB. The package then built successfully in 11 seconds. The full repository contained 2,854 files and about 651,122 source lines, while the checkout used 30.2 MB. The container had 3 CPUs, 8 GB of RAM, Node 22, and no secrets.
There was no npm test script or target in that subproject, so our harness skipped tests. npm audit reported 1 known vulnerability, rated high severity, with 0 critical, 0 moderate, and 0 low findings. The repository itself has a tests directory and 13 CI workflow files, but those signals do not convert the skipped command into a pass. Teams using CDK should add a real deployment assertion around the stacks they expect Floci to accept.
LocalStack migration is easy until an operation differs
Floci deliberately accepts the familiar LocalStack port, credentials, health endpoint, init-script path, and ready-log shape. Its configuration translates several common LocalStack environment variables automatically. For a basic Compose setup, migration can be as small as replacing the image name. A compatibility image includes AWS CLI and boto3 for init scripts. That attention to surrounding tools is a strong reason to try Floci before rewriting a local test harness.
Compatibility still needs to be checked at operation level. The services page is the buying document, not the 76-service total. A project may need one uncommon S3 checksum path, a CloudFormation resource update, or a particular Cognito error. Floci's v1.7.0 notes list fixes for precisely these narrow behaviors across S3, Lambda, API Gateway, CloudWatch, Cognito, DynamoDB, and container cleanup. Replace the image in a branch, run the application's integration suite, and record any AWS call that diverges.
Storage modes cover CI and persistent development
The default memory mode loses state when the container stops, which is usually correct for isolated CI. Persistent mode flushes every write, hybrid mode keeps active data in memory and flushes periodically, and write-ahead logging records mutations before responding. Per-service overrides allow a team to retain an S3 or DynamoDB fixture while keeping disposable queues elsewhere. Multi-account isolation uses 12-digit access-key IDs as account IDs and routes temporary STS credentials to their assumed account.
These features make local scenarios richer than a single fake account. They also create state that can hide test dependencies. CI should prefer fresh memory-mode instances through Testcontainers, while long-lived developer environments may choose hybrid storage. Java, Node.js, and Python Testcontainers modules are listed as available; the Go module is described as in progress, so Go teams should not write plans around it yet. Any credentials should remain obvious placeholders unless a service-specific auth check requires something else.
Active releases support a cautious service-by-service rollout
GitHub showed 22,260 stars, 184 open issues and pull requests, and a last push on August 26, 2026. Release 1.7.0 arrived eight days earlier and added 9 services alongside substantial CloudFormation, IAM, Cognito, S3, and container work. The repository had no non-pull-request issues in the first 20 recently updated open items we fetched, so we cannot cite a current user defect from that sample. Release traffic still shows fast movement across many APIs.
Floci is worth testing for local AWS work, especially where LocalStack Community changes forced a choice. Begin with the 2 or 3 services that dominate the application's tests. Confirm create, update, error, and cleanup behavior, then add more services only after the suite proves useful. That approach captures Floci's free local feedback without confusing emulator compatibility with AWS certification. The project is broad enough to replace a local stack, but only the application's own calls can decide whether it does.

