LocalStack is no longer free. MiniStack is. Free forever.
55+ AWS services on a single
port — with real Postgres, Redis, and Docker containers. No account, no license key, no
telemetry.
$docker run -p 4566:4566 ministackorg/ministack
⚠️
LocalStack moved core services behind a paid plan. If you relied on LocalStack Community for local dev and CI/CD, MiniStack is your free, MIT-licensed drop-in replacement. No sign-up, no API key, no telemetry.
ministack — bash
# Start MiniStack $ docker run -p 4566:4566 ministackorg/ministack # Works with any AWS tool — no config changes $ aws --endpoint-url=http://localhost:4566 s3 mb s3://my-bucket make_bucket: my-bucket # Real database — RDS spins up actual Postgres $ aws --endpoint-url=http://localhost:4566 rds create-db-instance \ --db-instance-identifier mydb --engine postgres \ --master-username admin --master-user-password secret ✓ Real Postgres container running on localhost:15432 # Real Redis via ElastiCache $ aws --endpoint-url=http://localhost:4566 elasticache \ create-cache-cluster --cache-cluster-id my-redis --engine redis ✓ Real Redis container running on localhost:16379
45+ Services
Everything you need, locally
Core AWS services plus real infrastructure — RDS runs actual databases, ElastiCache runs real Redis, ECS starts real Docker containers, Athena executes real SQL via DuckDB (when installed).
-
🪣
S3
Buckets, objects, versioning, encryption, lifecycle, CORS, Object Lock, replication
REST/XML -
📨
SQS
Queues, FIFO, DLQ, batch, visibility
JSON+Query -
📢
SNS
Topics, subscriptions, fanout to SQS, batch publish
Query/XML -
🗃️
DynamoDB
Tables, CRUD, query, scan, transactions, TTL, GSI
JSON -
⚡
Lambda
Real Python execution, warm workers, SQS event source mapping, Layers
REST/JSON -
🔐
IAM
Users, roles, policies, groups, instance profiles, OIDC
Query/XML -
🎫
STS
CallerIdentity, AssumeRole, GetSessionToken
Query/XML -
🔑
Secrets Manager
CRUD, versioning, rotation, resource policies
JSON -
📊
CW Logs
Groups, streams, retention, subscription filters, metric filters, Insights
JSON -
📐
SSM Params
String, SecureString, paths, labels, tags
JSON -
🚌
EventBridge
Buses, rules, targets, Lambda dispatch, archives, permissions
JSON -
🌊
Kinesis
Streams, split/merge shards, consumers, encryption, monitoring
JSON -
📈
CW Metrics
Metrics, alarms, composite alarms, dashboards, alarm history
Query/CBOR -
✉️
SES
Send email/raw/templated, identities, configuration sets
Query/XML -
🔄
Step Functions
Full ASL engine, sync execution, task tokens, all state types
JSON -
🌐
API Gateway v2
HTTP APIs, Lambda proxy, path params, execute-api data plane
REST/JSON -
🔌
API Gateway v1
REST APIs, resources, methods, integrations, stages, MOCK, Lambda proxy format 1.0
REST/JSON -
🐘
RDS
Real Postgres/MySQL containers
Real Docker -
🔴
ElastiCache
Real Redis/Memcached containers, users, user groups
Real Docker -
🐳
ECS
RunTask starts real containers, capacity providers
Real Docker -
🧪
Glue
Catalog, crawlers, jobs, triggers, workflows
Real Exec -
🔍
Athena
Real SQL via DuckDB (optional), data catalogs, prepared statements
DuckDB -
🚒
Firehose
Delivery streams, PutRecord/PutRecordBatch, S3 delivery, encryption, tags
REST/JSON -
🌐
Route53
Hosted zones, record sets (CREATE/UPSERT/DELETE), health checks, tags, alias records
REST/XML -
🔒
Cognito
User pools, auth flows, TOTP MFA, identity pools, federated credentials
JSON -
🖥️
EC2
Instances, VPCs, subnets, security groups, route tables, ENIs, elastic IPs, NAT gateways, NACLs, flow logs, VPC peering, DHCP options, egress-only IGWs
Query/XML -
⚡
EMR
Clusters, steps, instance groups/fleets, bootstrap actions, tags — Pro-only on LocalStack
JSON -
💾
EBS
Volumes, snapshots, attach/detach, modify, copy — Pro-only on LocalStack
Query/XML -
📁
EFS
File systems, mount targets, access points, lifecycle, backup policy — Pro-only on LocalStack
REST/JSON -
⚖️
ALB / ELBv2
Load balancers, target groups, listeners, rules, Lambda targets + live data-plane routing — Pro-only on LocalStack
Query/XML -
🔐
ACM
Request, import, describe certificates; DNS validation records; SANs; tags
JSON -
✉️
SES v2
SendEmail, identities, configuration sets, account suppression — REST API
REST/JSON -
🛡️
WAF v2
WebACLs, IP sets, rule groups, resource associations, LockToken enforcement — Pro-only on LocalStack
JSON -
☁️
CloudFormation
Stack lifecycle, change sets, 68 resource types, YAML/JSON templates, intrinsic functions, rollback, cross-stack exports
XML -
🔑
KMS
RSA & symmetric envelope encryption for internal cryptographic signatures
JSON -
📦
ECR
In-memory container registry providing Docker V2 manifests and full lifecycle rules
JSON -
⚡
AppSync
Serverless GraphQL architecture mocking local DataSources and complex Resolvers
REST/JSON -
🌐
CloudFront
High-throughput edge location edge server emulation targeting origins natively
XML -
📈
AutoScaling
ASGs, launch configs, scaling policies, lifecycle hooks, scheduled actions, tags
Query/XML -
🔨
CodeBuild
Projects, builds, start/stop, batch operations, metadata stored in-memory
JSON -
🗺️
Cloud Map
HTTP/DNS namespaces, services, instance registration, discovery, Route53 integration
JSON -
📂
S3 Files
File systems, mount targets, access points, policies — new April 2026 S3 service
REST -
🗄️
RDS Data API
ExecuteStatement, BatchExecute, transactions — routes SQL to real RDS containers
REST -
🔎
OpenSearch
Domains, versions, change progress, tags — optional real
Real Dockeropensearchproject/opensearchcluster + Dashboards sidecar viaOPENSEARCH_DATAPLANE=1 -
🏛️
Organizations
DescribeOrganization, ListRoots, accounts, OUs with the new
REST/JSONPathfield -
🪪
Account
GetAccountInformation (with
REST/JSONAccountState), GetContactInformation, ListRegions opt-in matrix -
⚙️
Batch
Compute environments, job queues, job definitions (auto-revisioning), SubmitJob — Pro-only on LocalStack
REST/JSON -
🛡️
WAF Classic
v1 + Regional stub for legacy Terraform / CFN — empty
JSONList*, validGetChangeToken,WAFNonexistentItemException -
📡
IMDS
EC2 Instance Metadata Service v1 + v2 — SDK credential chains resolve via
HTTPAWS_EC2_METADATA_SERVICE_ENDPOINT -
⏰
EventBridge Scheduler
Schedules, schedule groups, rate/cron expressions, target dispatch
REST/JSON -
💾
Backup
Vaults, plans, recovery points, tags — control plane stub
REST/JSON -
🚩
AppConfig
Applications, environments, profiles, deployments, hosted versions, configuration sessions data plane
REST/JSON -
📤
Transfer
SFTP servers, users, public-key auth, tags
JSON -
☸️
EKS
Clusters, node groups, Fargate profiles, addons — Pro-only on LocalStack
REST/JSON -
🏷️
Resource Groups Tagging
GetResources, GetTagKeys/Values, TagResources across S3, Lambda, SQS, SNS, DDB, KMS, ECR, ECS, EFS, AppSync, scheduler, more
JSON
Testing 101
Start Testing in Seconds
Integrating Ministack is as simple as overriding the AWS endpoint URL. Select your tool below to see exactly how to write your local test code.
# 1. Ensure MiniStack is running on port 4566 import boto3 # 2. Point boto3 to local endpoint s3 = boto3.client('s3', endpoint_url='http://localhost:4566', region_name='us-east-1', aws_access_key_id='test', aws_secret_access_key='test' ) # 3. Code logic interacts with Ministack instantly! s3.create_bucket(Bucket='my-local-bucket') print("✓ Successfully created bucket")
# Configure endpoints in your AWS provider provider "aws" { access_key = "test" secret_key = "test" region = "us-east-1" skip_credentials_validation = true skip_metadata_api_check = true skip_requesting_account_id = true endpoints { s3 = "http://localhost:4566" dynamodb = "http://localhost:4566" lambda = "http://localhost:4566" # Add other services needed... } }
import { S3Client, CreateBucketCommand } from "@aws-sdk/client-s3"; // Override the endpoint const s3 = new S3Client({ endpoint: "http://localhost:4566", region: "us-east-1", credentials: { accessKeyId: "test", secretAccessKey: "test" } }); await s3.send(new CreateBucketCommand({ Bucket: "my-test-bucket" }));
# Just append --endpoint-url parameter aws s3 mb s3://my-local-bucket \ --endpoint-url http://localhost:4566 \ --region us-east-1 aws dynamodb create-table \ --table-name Users \ --attribute-definitions AttributeName=Id,AttributeType=S \ --key-schema AttributeName=Id,KeyType=HASH \ --billing-mode PAY_PER_REQUEST \ --endpoint-url http://localhost:4566
Comparison
LocalStack vs MiniStack
Same developer experience. Fraction of the cost and footprint.
| Feature | LocalStack Free | LocalStack Pro | MiniStack ⚡ |
|---|---|---|---|
| Core services (S3, SQS, DDB…) | Now paid | ✅ | ✅ Free |
| Lambda, IAM, SSM, EventBridge | Paid | ✅ | ✅ Free |
| RDS (real DB containers) | ❌ | ✅ | ✅ Real Postgres/MySQL |
| ElastiCache (real Redis) | ❌ | ✅ | ✅ Real Redis |
| ECS (real Docker) | ❌ | ✅ | ✅ Real Docker |
| Athena (real SQL) | ❌ | ✅ | ✅ DuckDB (optional) |
| Glue Catalog + Jobs | ❌ | ✅ | ✅ |
| API Gateway v2 (HTTP APIs) | ✅ | ✅ | ✅ + data plane |
| API Gateway v1 (REST APIs) | ✅ | ✅ | ✅ + data plane |
| Firehose | ✅ | ✅ | ✅ S3 delivery |
| Route53 | ✅ | ✅ | ✅ |
| Cognito (user pools + identity) | Paid | ✅ | ✅ Free |
| EC2 (instances, VPC, subnets, SGs) | Paid | ✅ | ✅ Free |
| EMR (clusters, steps, instance groups) | Paid | ✅ | ✅ Free |
| EBS (volumes, snapshots, attach/detach) | Paid | ✅ | ✅ Free |
| EFS (file systems, mount targets, access points) | Paid | ✅ | ✅ Free |
| ALB / ELBv2 (LBs, listeners, rules + Lambda data plane) | Paid | ✅ | ✅ Free |
| SNS→SQS fanout + SQS→Lambda ESM | ❌ | ✅ | ✅ |
| CloudFormation | Paid | ✅ | ✅ Free |
| Startup time | ~15-30s | ~15-30s | ~2s |
| Memory at idle | ~500MB | ~500MB | ~30MB |
| Docker image | ~1 GB | ~1 GB | ~250 MB |
| License | BSL (restricted) | Proprietary | MIT |
| Price | Now paid | $35/mo | $0 forever |
Built different
Real infrastructure, not mocks
Where it matters most — RDS, ElastiCache, and ECS run real Docker containers. No fake endpoints, no stubbed responses.
-
🐘
Real databases via RDS
CreateDBInstance spins up an actual Postgres or MySQL Docker container. Connect with psycopg2 — it's a real database.
-
🔴
Real Redis via ElastiCache
CreateCacheCluster starts an actual Redis container. Use redis-py, run SUBSCRIBE, use it as your session store.
-
🐳
Real containers via ECS
RunTask pulls and starts real Docker containers via the Docker socket. Test your ECS task definitions locally.
-
🔍
Real SQL via Athena
Queries execute via DuckDB when installed. Query S3 data with actual SQL, get actual result sets back. Falls back to mock results without it.
-
🔌
Full SDK compatibility
Works with boto3, AWS CLI, Terraform, CDK, Pulumi, Java SDK v2, Go SDK v2 — any tool that speaks the AWS API. 1,300+ tests passing across Python and Java.
-
☕
Testcontainers module
Official Java module on Maven Central:
org.ministack:testcontainers-ministack:0.1.5. JUnit 5 and Spring Boot ready. AWS CLI bundled for init scripts. -
🔓
MIT licensed forever
No BSL, no feature gates, no "community" vs "pro". Every service is free. Fork it, embed it. MIT is MIT.
Stop paying for local development
One command. 45+ services. Real infrastructure. Free.
$docker run -p 4566:4566 ministackorg/ministack