The incident: March 2026
On March 15, 2026, LocalStack published a blog post titled "The Road Ahead for LocalStack". The Community Edition β the free tier that hundreds of thousands of developers had relied on for years β was being sunset. Security updates frozen. Auth token now mandatory. No migration path for CI pipelines that had been running docker run localstack/localstack without credentials for years.
CI pipelines broke overnight. Docker Compose stacks stopped working. Teams scrambled to either pay for LocalStack Pro or find an alternative. The alternative arrived the same day LocalStack's announcement dropped.
Floci 1.0.0 shipped on March 15, 2026.
What Floci is, precisely
Floci is a free, MIT-licensed, open-source AWS local emulator. It runs as a single Docker container, exposes all services on port 4566 (same as LocalStack), speaks the AWS wire protocol, and accepts any string as credentials. No account. No token. No telemetry. No feature gates.
It is built on Quarkus Native β the Java framework that compiles down to a native binary, eliminating JVM startup overhead entirely. The result is a ~40 MB binary that boots in under 25 ms. Named after cirrocumulus floccus, the cloud formation that looks exactly like popcorn.
The numbers
| Metric | Floci | LocalStack Community | Delta |
|---|---|---|---|
| Startup time | ~24 ms | ~3,300 ms | 137Γ faster |
| Idle memory | ~13 MiB | ~143 MiB | 11Γ less |
| Docker image | ~90 MB | ~1,000 MB | 11Γ smaller |
| Auth token required | β Never | β Mandatory (March 2026) | β |
| Security updates | β Active | β Frozen | β |
| License | MIT (permissive) | Restricted | β |
| Native binary | β ~40 MB | β | β |
| Stars (May 2026) | 4,200+ | β | 4.2k in ~7 weeks |
The 137Γ startup difference is not academic. In a CI pipeline that spins up a fresh Floci container per test suite, 24 ms vs 3,300 ms means your test infrastructure is ready before the first test has even loaded. At 100 CI runs per day, that is 5.5 minutes recovered β per day, per developer.
Architecture
A single HTTP router (JAX-RS + Vert.x) handles all 35 services on port 4566. Services are split into three execution tiers:
The three-tier split is the key design decision. In-process services get zero network overhead. Container services get real engine fidelity β you're testing against actual PostgreSQL, actual Redis, actual Lambda runtimes, not a simulation of them.
Service coverage: what LocalStack Community didn't ship
| Service | Floci | LocalStack Community |
|---|---|---|
| API Gateway v2 (HTTP API) | β Full | β |
| Cognito (user pools, JWKS, auth flows) | β Full | β |
| ElastiCache (Redis + IAM auth) | β Real container | β |
| RDS (Postgres + MySQL + IAM auth) | β Real container | β |
| MSK (Kafka via Redpanda) | β Real container | β |
| ECS (clusters, tasks, services) | β Real container | β |
| EKS (k3s, live kubeconfig) | β Real container | β |
| DynamoDB Streams | β Full + Lambda ESM | β οΈ Partial |
| IAM (users, roles, groups, policies) | β 65+ ops | β οΈ Partial |
| KMS (sign, verify, re-encrypt) | β Full | β οΈ Partial |
| Kinesis (fan-out, split/merge) | β Full | β οΈ Partial |
| S3 Object Lock (COMPLIANCE mode) | β Full | β οΈ Partial |
| Athena (real SQL via DuckDB sidecar) | β Upcoming | β |
| Glue Data Catalog | β Full | β |
| SQS / SNS / SSM / Step Functions | β Full | β Full |
The coverage gap isn't minor. If your stack uses Cognito for auth, RDS for storage, and MSK for event streaming β all things a real production AWS stack commonly does β you were effectively blocked from full local testing with LocalStack Community. Floci covers all three out of the box, with real containers.
Compatibility testing
Claims about emulator fidelity are easy to make. Floci backs them with an automated test suite:
| Module | Language / Tool | Tests |
|---|---|---|
| sdk-test-java | Java 17 Β· AWS SDK v2 | 889 |
| sdk-test-node | Node.js Β· AWS SDK v3 | 360 |
| sdk-test-python | Python 3 Β· boto3 | 264 |
| sdk-test-go | Go Β· AWS SDK v2 | 136 |
| sdk-test-awscli | Bash Β· AWS CLI v2 | 145 |
| sdk-test-rust | Rust Β· AWS SDK | 86 |
| compat-terraform | Terraform v1.10+ | 14 |
| compat-cdk | AWS CDK v2+ | 17 |
| Total | 1,911 |
Every release runs all 1,911 tests. The confidence level here is not "it worked on my machine" β it is continuous integration against 6 SDKs and 3 IaC tools simultaneously.
Storage modes
One often-overlooked detail: how Floci handles data persistence. Four modes, selectable per service via FLOCI_STORAGE_MODE:
| Mode | Behavior | Best for | Durability |
|---|---|---|---|
memory | Entirely in-RAM, lost on stop | CI pipelines, ephemeral tests | β |
hybrid | In-memory + async flush every 5s | Local dev (default) | β |
persistent | Flush to disk on graceful shutdown | Simple state preservation | β οΈ |
wal | Write-Ahead Log, every mutation persisted | Critical state, debugging | π |
For CI: use memory. For local dev: stay on hybrid (the default). The WAL mode is particularly useful when debugging timing-sensitive issues β you can replay the exact sequence of mutations that led to a failure.
Drop-in migration from LocalStack
If you are currently on LocalStack Community, the migration is a one-line change:
services:
localstack:
- image: localstack/localstack:latest
+ image: hectorvent/floci:latest
ports:
- "4566:4566"
No endpoint changes. No credential changes. No code changes. The AWS wire protocol is identical. Your boto3, SDK v2, SDK v3, and Terraform configs all point to http://localhost:4566 and use test/test β same as before.
For multi-container Docker Compose setups, add one environment variable so Floci returns URLs that resolve correctly between containers:
services:
floci:
image: hectorvent/floci:latest
ports:
- "4566:4566"
environment:
- FLOCI_HOSTNAME=floci
my-app:
environment:
- AWS_ENDPOINT_URL=http://floci:4566
depends_on:
- floci
Decision tree: when to use Floci
Are you running local AWS development?
βββ Yes
β βββ Were you on LocalStack Community? β Switch today. One-line change.
β βββ Starting a new project? β Start with Floci. No setup friction.
β βββ On LocalStack Pro?
β βββ Using Chaos Engineering or advanced Pro features? β Stay on Pro.
β βββ Just using standard services? β Evaluate Floci.
βββ No β Not applicable.
The only reason to stay on LocalStack Pro at this point is if you rely on features that are explicitly Pro-only: Chaos Engineering, the LocalStack Web App, certain enterprise support tiers. For the vast majority of teams running S3, DynamoDB, SQS, Lambda, RDS, Cognito β Floci has everything, and it costs nothing.
Velocity: from 1.0.0 to 1.5.2 in 26 days
Floci shipped v1.0.0 on March 15, 2026. By April 10, it was at v1.5.2. What landed in those 26 days:
- ECS service with real Docker container lifecycle
- EC2 with 61 operations (VPCs, subnets, security groups, instances)
- OpenSearch via real Docker container
- EventBridge Scheduler (schedule groups, flexible time windows, DLQs)
- SES v2 REST JSON protocol
- Step Functions JSONata support + nested state machine execution
- DynamoDB linearizable mutations under concurrent load
- Cognito SRP-6a authentication
- S3 Lambda notifications + presigned POST policies
- API Gateway v2 management API + CloudFormation provisioning
That is not maintenance velocity. That is a project building fast because the community is pushing it and the architecture supports rapid iteration.
The repo
Open source, MIT licensed: github.com/floci-io/floci. Community Slack is active. Issues are triaged quickly. 4,200 stars in 7 weeks.
LocalStack's sunset was a forcing function. Floci is the outcome.