DEV Community

Nahuel Nucera
Nahuel Nucera

Posted on

Free LocalStack Alternative — 20 AWS Services and counting

LocalStack Is No Longer Free

If you've been using LocalStack Community Edition for local AWS development, you've probably noticed the change. Core services like S3, SQS, DynamoDB, and Lambda have moved behind a paid plan. The license changed from Apache 2.0 to BSL.

I depended on it for local dev and CI/CD pipelines. Rather than pay, I built a replacement from scratch.

What Is MiniStack?

MiniStack is a single Python ASGI server that emulates 20 AWS services on port 4566. It's a drop-in replacement — your existing --endpoint-url, boto3 clients, Terraform providers, and CDK stacks work without code changes.

docker run -p 4566:4566 nahuelnucera/ministack
aws --endpoint-url=http://localhost:4566 s3 mb s3://my-bucket
Enter fullscreen mode Exit fullscreen mode

Not Just Mocks — Real Infrastructure

The thing I'm most proud of: the infrastructure services don't fake it.

RDS creates real databases. When you call create-db-instance with engine=postgres, MiniStack spins up an actual Postgres Docker container and returns the real host:port endpoint. Connect with psycopg2, run migrations, test your queries.

ElastiCache starts real Redis. create-cache-cluster with engine=redis starts a real Redis container. Use redis-py, test pub/sub, test your caching layer.

ECS runs real containers. run-task pulls images and starts Docker containers via the Docker socket.

Athena executes real SQL. Queries run via DuckDB. Get actual result sets, not mock data.

The Full Service List

Core (in-memory):
S3, SQS, SNS, DynamoDB, Lambda (real Python execution), IAM, STS, Secrets Manager, CloudWatch Logs

Extended (in-memory):
SSM Parameter Store, EventBridge, Kinesis, CloudWatch Metrics, SES, Step Functions

Infrastructure (real Docker):
RDS, ElastiCache, ECS, Glue, Athena (DuckDB)

How It Compares

LocalStack Free LocalStack Pro MiniStack
Core services Now paid ✅ Free
RDS/ElastiCache/ECS ✅ Real containers
Startup ~30s ~30s ~2s
RAM ~500MB ~500MB ~30MB
Image size ~1GB ~1GB 150MB
License BSL Proprietary MIT
Price Paid $35+/mo Free forever

Architecture

It's deliberately simple. Each service is a single Python file in services/ with an async handler. The router detects the target service from:

  1. X-Amz-Target header (DynamoDB, SecretsManager, etc.)
  2. Authorization header credential scope
  3. Query parameter Action (SQS, SNS, IAM)
  4. URL path patterns (/2015-03-31/functions → Lambda)
  5. Host header patterns
  6. Default → S3

Same cascade as real AWS and LocalStack.

Try It

docker run -p 4566:4566 nahuelnucera/ministack
Enter fullscreen mode Exit fullscreen mode

No account. No API key. No telemetry.

MIT licensed. PRs welcome.

Top comments (0)