MiniStack is a free emulator that allows you to simulate AWS locally. It offers access to over 60 AWS services on a single port, supports multiple accounts and regions, and is self-hostable.

When developing an application that uses
MiniStack — The Best AWS Emulator | Free Open-Source LocalStack Alternative
https://ministack.org/

ministackorg/ministack: Ministack: Free, open-source local AWS emulator - 60+ services, Terraform compatible, real databases. Free forever. MIT licensed.
https://github.com/ministackorg/ministack
◆ How to set up MiniStack
This time, we will set it up in an environment where Docker Desktop , Git Bash for Windows , and AWS CLI are installed on Windows. Create a compose.yml file in the working folder.
services:
ministack:
image: ministackorg/ministack:latest
ports:
- '4566:4566'
environment:
- PERSIST_STATE=1
- S3_PERSIST=1
- LOG_LEVEL=INFO
volume:
- ./data/state:/tmp/ministack-state
- ./data/s3:/tmp/ministack-data/s3
The setup is complete once you start the container.
docker compose up -d
◆How to use MiniStack
Open Git Bash and configure the test credentials to be used with the AWS CLI.
export AWS_ACCESS_KEY_ID=test
export AWS_SECRET_ACCESS_KEY=test
export AWS_DEFAULT_REGION=us-east-1
First, create a bucket in S3.
aws --endpoint-url=http://localhost:4566 s3 mb s3://test-bucket
Running the `ls` command will show the `test-bucket` you created to check if the bucket exists. You can test it using the same AWS CLI as in actual AWS.
aws --endpoint-url=http://localhost:4566 s3 ls
#Execution result
2026-10-01 10:05:03 test-bucket
You can also create SQS queues. There's no need to switch ports between S3 and SQS; MiniStack parses AWS requests and distributes them to over 60 services.
aws --endpoint-url=http://localhost:4566 sqs create-queue --queue-name test-queue
aws --endpoint-url=http://localhost:4566 sqs list-queues
#Execution result
{
'QueueUrls': [
'http://localhost:4566/000000000000/test-queue'
]
}
◆RDS allows you to run actual PostgreSQL.
In addition to services that only reproduce API responses, MiniStack allows you to launch actual software such as PostgreSQL , MySQL , and MariaDB for RDS, and Redis for Amazon ElastiCache , as Docker containers.
docker ps
#Execution result
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2890264044ca postgres:15-alpine 'sh -c 'chown -R pos…' About a minute ago Up 58 seconds 0.0.0.0:15432->5432/tcp, [::]:15432->5432/tcp ministack-rds-281afe4a44d7-instance-mydb
3a672c1c3863 ministackorg/ministack:latest 'python -m ministack' 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:4566->4566/tcp, [::]:4566->4566/tcp ministack-ministack-1
In the case of RDS, MiniStack handles the management of the AWS RDS API, while the actual database processing is handled by a locally running database such as PostgreSQL. This configuration allows you to verify not only simple API mocks but also the part where the application actually issues SQL queries locally.
◆ Recreate multiple AWS accounts and regions
MiniStack uses a 12-digit 'AWS_ACCESS_KEY_ID' as the AWS account ID, allowing you to separate and store resources from multiple accounts within a single MiniStack.
Set AWS_ACCESS_KEY_ID to '111111111111' and check the status.
export AWS_ACCESS_KEY_ID=111111111111
aws --endpoint-url=http://localhost:4566 sts get-caller-identity
#Execution result
{
'UserId': '111111111111',
'Account': '111111111111'
'Arn': 'arn:aws:iam::111111111111:root'
}
Set AWS_ACCESS_KEY_ID to '222222222222' and check the status.
export AWS_ACCESS_KEY_ID=222222222222
aws --endpoint-url=http://localhost:4566 sts get-caller-identity
#Execution result
{
'UserId': '222222222222',
'Account': '222222222222',
'Arn': 'arn:aws:iam::222222222222:root'
}
Furthermore, because region information is also separated, even if you create SQS queues with the same name in us-east-1 and eu-west-1, they will be treated as independent resources. After creating SQS queues in each region, running the verification command displayed the following:
aws --endpoint-url=http://localhost:4566 \
> --region us-east-1 \
> sqs list-queues
#Execution result
{
'QueueUrls': [
'http://localhost:4566/222222222222/jobs'
]
}
aws --endpoint-url=http://localhost:4566 \
> --region eu-west-1 \
> sqs list-queues
#Execution result
{
'QueueUrls': [
'http://localhost:4566/222222222222/jobs'
]
}
By separating accounts and regions, it's possible to build a test environment that can be used by multiple developers on a single MiniStack.
◆Other features
MiniStack can handle over 60 AWS services, including major services like S3, SQS, DynamoDB, and Lambda, as well as EC2, ECS, EKS, CloudFormation, Step Functions, and Amazon Bedrock.
| category | Supported Services |
|---|---|
| Core | S3・DynamoDB・SQS・SNS・Lambda・Lambda MicroVMs・Lambda Core・IAM・STS・Secrets Manager・SSM・CloudFormation |
| Observability | CloudWatch・CloudWatch Logs・CloudTrail |
| Integration & Events | EventBridge・EventBridge Scheduler・EventBridge Pipes・Step Functions・IoT・IoT Wireless・Amazon Location・Amazon MQ |
| Streams & Analytics | Kinesis・Firehose・Athena・Glue・EMR・OpenSearch・MSK(Kafka)・MediaConnect |
| Compute & Containers | EC2・IMDS・ECS・EKS・Batch・Auto Scaling・ALB/ELBv2 |
| Databases & Cache | Aurora DSQL・RDS・RDS Data API・ElastiCache |
| Networking & DNS | Route53・CloudFront・CloudFront KeyValueStore・ServiceDiscovery |
| APIs & Edge | API Gateway v1・API Gateway v2・AppSync |
| Security & Crypto | KMS・ACM・AWS Signer・WAFv2・WAF Classic・Amazon Inspector |
| Identity & Accounts | Cognito・Organizations・Account |
| AI & ML | Amazon Bedrock・Bedrock Runtime・Bedrock Agent・Bedrock Agent Runtime・Bedrock AgentCore |
| Communication | SES |
| Storage & Transfer | EFS・ECR・Transfer Family・Amazon Transcribe・Amazon Translate・S3 Files・S3 Tables |
| Config & Dev Tools | AppConfig・CodeBuild・AWS Config・Cloud Control API・MWAA・Cost & Usage Report |
| Cross-service & Backup | Resource Groups Tagging API・AWS Backup・Resource Groups |
◆Points to note when using MiniStack
MiniStack is not a virtual cloud that perfectly replicates all AWS behaviors; some features, such as VPC packet routing and DNS propagation, are not replicated in the local environment.
◆MiniStack Review
On the social news site Hacker News , there has been much discussion about MiniStack, with some praising its iteration speed and ability to run quickly in a CI environment, rather than its cost. However, others have pointed out that it does not adequately reproduce DynamoDB's service exceptions, input validation, eventual consistency, and edge cases. In response , the creator explains that its intended use is integration testing to verify that the correct operations are being called with the correct data, not to reproduce the exact same behavior as the production environment.
Related Posts:







