Meet Floci: The AWS Emulator That Actually Respects Your Time

Floci is not a prototype. With 26 services, 1,873 automated compatibility tests, real Docker-backed Lambda and RDS execution, IAM and SigV4 support, and a binary that starts faster than you can finish typing the command.

By Amal V S, Backend & AI Systems Architect · Thu May 14 2026

26 services, 24 ms startup, and zero auth tokens. LocalStack's community edition is gone — and Floci just filled that void beautifully.

Opinion / Sarcasm Warning

Ah yes, LocalStack — the beloved tool that let you test AWS integrations locally for free. That is, until March 2026, when the community edition quietly shuffled off to the retirement home, taking security updates with it and leaving behind a velvet rope: "Auth token required, thank you very much." Because nothing says "developer-friendly open source" like demanding a login to spin up a local queue. Fortunately, someone was paying attention. Floci was born — named after a cloud formation that looks like popcorn — and it's exactly what the ecosystem needed: no gates, no tokens, no drama. Just docker compose up and AWS, right there on your laptop.

What Is Floci?

Floci is a free, open-source AWS local emulator built in Java on top of Quarkus and Vert.x. It speaks the AWS wire protocol on port 4566 — the same port LocalStack uses — which means you can often drop it in as a zero-config replacement. It supports 26 AWS services and ships a native GraalVM binary that starts in roughly 24 milliseconds and idles at around 13 MiB of RAM.

The name comes from cirrocumulus floccus, the cloud formation that looks exactly like popcorn. Appropriate for something that's light, cheap, and surprisingly satisfying.

Why It Exists: The LocalStack Gap

LocalStack's free community tier was the de-facto standard for local AWS development. In March 2026, that changed: the community edition was sunset, auth tokens became mandatory, and security updates were frozen. For developers running CI pipelines, internal tooling, or just offline dev environments, this was a real problem.

Architecture: How It Actually Works

Floci is built on Quarkus with Vert.x handling the HTTP layer. A single container listens on port 4566 and routes all AWS SDK requests via a JAX-RS router. Services fall into three tiers:

Stateless In-Process Services

The majority of services — SSM, SQS, SNS, IAM, STS, KMS, Cognito, Kinesis, Secrets Manager, Step Functions, CloudFormation, EventBridge, CloudWatch, ACM, SES, OpenSearch — run entirely in-process. No child processes, no sockets to external daemons. They share a pluggable storage backend that supports four modes: memory, persistent, hybrid, and wal.

Stateful In-Process Services

S3 and DynamoDB (plus DynamoDB Streams) also run in-process but maintain richer local state. S3 supports versioning, multipart uploads, pre-signed URLs, Object Lock (both COMPLIANCE and GOVERNANCE modes), and event notifications. DynamoDB covers GSI/LSI, transactions, TTL, and batch operations.

Container Services (Real Docker)

This is where Floci does something genuinely impressive. Lambda, ElastiCache, RDS, and ECS spin up real Docker containers and support IAM authentication with SigV4 signing — the same auth flow as production AWS. Lambda uses a warm pool. RDS provisions actual PostgreSQL or MySQL instances. ElastiCache runs real Redis/Valkey. ECS supports clusters, task definitions, services, capacity providers, and task sets.

Note on Docker: Floci needs access to the Docker socket to manage container-backed services. In your docker-compose.yml, mount /var/run/docker.sock:/var/run/docker.sock if you want Lambda, RDS, ElastiCache, or ECS support.

Getting Started in 60 Seconds

The minimal setup is a single-service docker-compose.yml:

# docker-compose.yml
services:
  floci:
    image: hectorvent/floci:latest
    ports:
      - "4566:4566"
    volumes:
      - ./data:/app/data
docker compose up

Then point your AWS CLI or SDK at http://localhost:4566. Credentials can be anything — Floci doesn't validate them by default:

export AWS_ENDPOINT_URL=http://localhost:4566
export AWS_DEFAULT_REGION=us-east-1
export AWS_ACCESS_KEY_ID=test
export AWS_SECRET_ACCESS_KEY=test

aws s3 mb s3://my-bucket
aws sqs create-queue --queue-name my-queue
aws dynamodb list-tables

SDK Integration

Because Floci speaks standard AWS wire protocol, you only need to override the endpoint URL. No custom SDKs, no special adapters.

Java (AWS SDK v2)

DynamoDbClient client = DynamoDbClient.builder()
    .endpointOverride(URI.create("http://localhost:4566"))
    .region(Region.US_EAST_1)
    .credentialsProvider(StaticCredentialsProvider.create(
        AwsBasicCredentials.create("test", "test")))
    .build();

Python (boto3)

import boto3
client = boto3.client("s3",
    endpoint_url="http://localhost:4566",
    region_name="us-east-1",
    aws_access_key_id="test",
    aws_secret_access_key="test")

Node.js (AWS SDK v3)

import { S3Client } from "@aws-sdk/client-s3";

const client = new S3Client({
    endpoint: "http://localhost:4566",
    region: "us-east-1",
    credentials: { accessKeyId: "test", secretAccessKey: "test" },
    forcePathStyle: true,
});

Multi-Container Docker Compose

One gotcha worth knowing: when your app runs in a container alongside Floci, set the FLOCI_HOSTNAME environment variable to the Floci service name. Otherwise, Floci returns http://localhost:4566/... in SQS QueueUrls, which resolves correctly on your host but not inside another container.

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

Supported Services

A full breakdown of what's included out of the box:

Configuration Reference

All settings use the FLOCI_ prefix as environment variables. The most useful ones:

# Port (default: 4566)
QUARKUS_HTTP_PORT=4566

# Default AWS region
FLOCI_DEFAULT_REGION=us-east-1

# Storage: memory | persistent | hybrid | wal
FLOCI_STORAGE_MODE=persistent
FLOCI_STORAGE_PERSISTENT_PATH=./data

# For multi-container Compose setups
FLOCI_HOSTNAME=floci

# Base URL returned in API responses (e.g. SQS QueueUrl)
FLOCI_BASE_URL=http://localhost:4566

Image Tags & Variants

Floci ships two Docker image flavors. The latest tag is a GraalVM native image — ~40 MB binary, sub-second startup, recommended for most use cases. The latest-jvm tag runs on the JVM and offers broader platform compatibility (useful on ARM or exotic architectures). Both are published to Docker Hub under hectorvent/floci.

Final Verdict

Floci is not a prototype. With 26 services, 1,873 automated compatibility tests, real Docker-backed Lambda and RDS execution, IAM and SigV4 support, and a binary that starts faster than you can finish typing the command — this is a mature, production-ready tool. It's MIT licensed, requires zero registration, and costs nothing to run locally or in CI.

Whether you're migrating off LocalStack or building something new, Floci is the cleanest entry point into local AWS development available today.