floci
- title
- floci
- type
- toolbox
- summary
- Free local AWS emulator covering 46 services, a drop-in replacement for LocalStack Community
- tags
- java, aws, cloud, testing, docker
- language
- Java
- license
- MIT
- created
- 2026-05-12
- updated
- 2026-05-12
Free, open-source local AWS emulator. One docker compose up, no account, no feature gates. Built on Quarkus/Vert.x with JAX-RS routing, it answers AWS SDK and CLI calls on port 4566 โ the same port LocalStack uses โ and is meant as a drop-in replacement for LocalStack Community, which started requiring auth tokens and froze security updates in March 2026. Named after cirrocumulus floccus, the cloud formation that looks like popcorn.
What it does
Floci speaks the AWS wire protocol for 46 services. Stateless services (SSM, SQS, SNS, IAM, STS, KMS, Secrets Manager, SES, Cognito, Kinesis, EventBridge, CloudWatch, Step Functions, CloudFormation, ACM, API Gateway, ELB v2, Auto Scaling, CodeDeploy, Backup, Route53, Transfer Family, Bedrock Runtime, โฆ) and stateful ones (S3, DynamoDB, DynamoDB Streams) run in-process. Container-backed services start real Docker containers behind the AWS-shaped control plane.
The pitch against LocalStack Community: no auth token, ongoing security updates, ~24 ms startup vs ~3.3 s, ~13 MiB idle memory vs ~143 MiB, ~90 MB image vs ~1 GB, MIT license, plus a native binary (~40 MB). It also covers things LocalStack Community doesn't โ API Gateway v2 / HTTP API, Cognito, ElastiCache with IAM auth, RDS with IAM auth, MSK, Athena with real SQL, Glue Data Catalog + Schema Registry, Data Firehose, ECS/EKS/EC2/CodeBuild โ and fills in partial LocalStack coverage of IAM, STS, Kinesis, KMS, S3 Object Lock, DynamoDB Streams.
How it works
Real Docker integration. Where in-process emulation would compromise fidelity โ stateful databases, connection-heavy protocols, runtimes needing native execution โ Floci runs actual containers and gets wire-compatible behavior against the real engine:
- Lambda โ
public.ecr.aws/lambda/<runtime>images, warm container pool, aliases, Function URLs, SQS/Kinesis/DDB-Streams event source mappings. Container-image functions passImageUrithrough, rewriting ECR repo URIs to the local endpoint. - ElastiCache โ
valkey/valkey:8, full Redis/Valkey protocol, ACL-based IAM auth, SigV4 validation. - RDS โ
postgres:16-alpine,mysql:8.0,mariadb:11โ real engines, IAM auth via token, JDBC-compatible. - MSK โ
redpandadata/redpanda:latest, real Kafka-compatible broker. - EC2 โ AMI-mapped Linux containers (e.g.
public.ecr.aws/amazonlinux/amazonlinux:2023), SSH key injection, UserData execution, IMDS (v1 + v2, port 9169) serving IAM credentials; plus VPCs, subnets, security groups, route tables, Elastic IPs. - ECS โ real container lifecycle from task definitions.
- EKS โ
rancher/k3s:latest, a live Kubernetes API server per cluster (mock mode also available). - CodeBuild โ runs the buildspec phases in a container, streams logs to CloudWatch Logs, uploads artifacts to S3 via
docker cp(works in Docker-in-Docker). - OpenSearch โ
opensearchproject/opensearch:2, full REST API. - ECR โ a shared
registry:2container, so stockdocker push/docker pullwork against AWS-shaped repos. - Athena โ in-process API plus a DuckDB sidecar (
floci-duck) that runs real SQL over S3 data through Glue-backed views; SerDe maps toread_parquet/read_json_auto/read_csv_auto.
All default images are overridable via FLOCI_SERVICES_*_IMAGE env vars. Docker-backed services need the Docker socket mounted (-v /var/run/docker.sock:/var/run/docker.sock -u root). These services support real SigV4 signing and IAM auth โ the same flow as production AWS.
Storage modes. Configured globally via FLOCI_STORAGE_MODE or per service:
| Mode | Behavior | Durability |
|---|---|---|
memory (default) |
entirely in-RAM, lost on stop | none |
persistent |
loaded at startup, flushed on graceful shutdown | medium |
hybrid |
in-memory speed, async flush every 5s | good |
wal |
write-ahead log, every mutation logged before responding | highest |
memory for CI; hybrid for local dev with state across restarts.
Multi-account isolation. No config needed: if AWS_ACCESS_KEY_ID is exactly 12 digits, Floci uses it as the account ID and resources are namespaced per account. Any other key format falls back to FLOCI_DEFAULT_ACCOUNT_ID (000000000000).
Migrating from LocalStack
Swap the image โ localstack/localstack โ floci/floci:latest (or floci/floci:latest-compat for init scripts that call aws/boto3, which bundles Python 3 + AWS CLI + boto3). LocalStack env vars are translated automatically: LOCALSTACK_HOSTโFLOCI_HOSTNAME, PERSISTENCE=1โFLOCI_STORAGE_MODE=persistent, LAMBDA_DOCKER_NETWORKโFLOCI_SERVICES_LAMBDA_DOCKER_NETWORK, LAMBDA_REMOVE_CONTAINERS=1โFLOCI_SERVICES_LAMBDA_EPHEMERAL=true, DEBUG=1โQUARKUS_LOG_LEVEL=DEBUG. Init scripts under /etc/localstack/init/ run unchanged; /_localstack/init and /_localstack/health are still served. LOCALSTACK_PARITY=false opts out of the translation.
Usage
# docker-compose.yml
services:
floci:
image: floci/floci:latest
ports:
- "4566:4566"
volumes:
- ./data:/app/data
- /var/run/docker.sock:/var/run/docker.sock # for container-backed services
export AWS_ENDPOINT_URL=http://localhost:4566
export AWS_DEFAULT_REGION=us-east-1
export AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test
aws s3 mb s3://my-bucket
aws sqs create-queue --queue-name my-queue
aws dynamodb list-tables
Point any AWS SDK at http://localhost:4566 with an endpointOverride / endpoint_url / endpoint โ no other changes. Credentials and region can be anything.
Limitations
- Some services are stubs: Bedrock Runtime returns dummy Converse/InvokeModel responses (streaming โ 501); Textract returns API-compatible stubs with fake block data.
- Container-backed services require a usable Docker socket โ won't work in environments where that's unavailable, and image pulls add startup cost on first use.
- It's a young project (single org
floci-io, image recently renamed fromhectorvent/flocitofloci/floci). Tracked on watchlist โ re-check maturity, contributor count, and release cadence. - Fidelity is best-effort emulation; not every edge case of every AWS API is covered. See the Services Overview for per-service operation counts.
Related: ark-ecs (ECS-focused tooling), atomicapp (container app packaging). For the broader "local cloud emulator" niche this competes in the LocalStack space.
Repo: https://github.com/floci-io/floci ยท MIT ยท Java/Quarkus ยท docs at https://floci.io