GitHub - hectorvent/floci: Light, fluffy, and always free - AWS Local Emulator

2 min read Original article โ†—

Floci

๐Ÿฟโ˜๏ธ Light, fluffy, and always free

Named after floccus โ€” the cloud formation that looks exactly like popcorn.

A free, open-source local AWS emulator. No account. No feature gates. No CI restrictions. Just docker compose up.


LocalStack's community edition sunset in March 2026 โ€” requiring auth tokens, dropping CI support, and freezing security updates. Floci is the no-strings-attached alternative.

Why Floci?

Floci LocalStack Community
Auth token required No Yes (since March 2026)
CI/CD support Unlimited Requires paid plan
Security updates Yes Frozen
Startup time ~24 ms ~3.3 s
Idle memory ~13 MiB ~143 MiB
Docker image size ~90 MB ~1.0 GB
License MIT Restricted
API Gateway v2 / HTTP API โœ… โŒ
Cognito โœ… โŒ
ElastiCache (Redis + IAM auth) โœ… โŒ
RDS (PostgreSQL + MySQL + IAM auth) โœ… โŒ
S3 Object Lock (COMPLIANCE / GOVERNANCE) โœ… โš ๏ธ Partial
DynamoDB Streams โœ… โš ๏ธ Partial
IAM (users, roles, policies, groups) โœ… โš ๏ธ Partial
STS (all 7 operations) โœ… โš ๏ธ Partial
Kinesis (streams, shards, fan-out) โœ… โš ๏ธ Partial
KMS (sign, verify, re-encrypt) โœ… โš ๏ธ Partial
Native binary โœ… ~40 MB โŒ

20+ services. 408/408 SDK tests passing. Free forever.

Quick Start

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

All services are available at http://localhost:4566. Use any AWS region โ€” credentials can be anything.

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

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

SDK Integration

Point your existing AWS SDK at http://localhost:4566 โ€” no other changes needed.

// 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,
});

Image Tags

Tag Description
latest Native image โ€” sub-second startup (recommended)
latest-jvm JVM image โ€” broadest platform compatibility
x.y.z / x.y.z-jvm Pinned releases

Configuration

All settings are overridable via environment variables (FLOCI_ prefix).

Variable Default Description
QUARKUS_HTTP_PORT 4566 HTTP port
FLOCI_DEFAULT_REGION us-east-1 Default AWS region
FLOCI_DEFAULT_ACCOUNT_ID 000000000000 Default AWS account ID
FLOCI_STORAGE_MODE hybrid memory ยท persistent ยท hybrid ยท wal
FLOCI_STORAGE_PERSISTENT_PATH ./data Data directory

โ†’ Full reference: configuration docs โ†’ Per-service storage overrides: storage docs

License

MIT โ€” use it however you want.