August 1, 2026 · v1.4.9
v1.4.9 adds a new Lambda MicroVMs service, extends account+region isolation to 11 more services, and tightens S3 to real AWS by verifying presigned URL signatures. It also lands Step Functions, IoT, and SNS parity fixes.
2025-09-09): RunMicrovm, GetMicrovm, ListMicrovms, SuspendMicrovm, ResumeMicrovm, TerminateMicrovm, CreateMicrovmImage, CreateMicrovmAuthToken, and CreateMicrovmShellAuthToken. MicroVMs transition straight to RUNNING and images to CREATED (no real provisioning); state is account- and region-scoped. Reported by @wparad.CreateRole and GetRole now round-trip PermissionsBoundary; PutRolePermissionsBoundary / DeleteRolePermissionsBoundary update it with AWS-shaped output and missing-role errors; and UpdateRoleDescription now returns and persists the updated role. This unblocks Terraform providers that reconcile fixed boundaries and descriptions on service roles. Contributed by @jayjanssen.CLOUDFRONT-scope resources in us-east-1 with global-segment ARNs. Persisted state carries a versioned regional schema (on-disk format v3) that an older binary refuses rather than misreads; legacy resources migrate by ARN region. Contributed by @Areson.content-type, content-length, …) were changed after signing, still succeeded — passing against MiniStack but failing against real S3. Presigned URLs are now verified against the server credential (AWS_SECRET_ACCESS_KEY, default test); a bad signature or tampered signed header returns 403 SignatureDoesNotMatch, matching real S3. Header-signed and anonymous requests are unaffected. Sign presigned URLs with the test secret (or set the server's AWS_SECRET_ACCESS_KEY). Reported by @BartekAndree.String.Array message attributes. A FilterPolicy compared the raw StringValue of a String.Array attribute (e.g. ["example.created"]) against the policy values, so array attributes never matched. Each element of a String.Array attribute is now evaluated separately, matching AWS. Reported by @cabrerafd.GetBucketEncryption now returns the default SSE-S3 configuration. A bucket with no explicit encryption returned ServerSideEncryptionConfigurationNotFoundError, but since 5 January 2023 every S3 bucket has default SSE-S3 encryption, so real S3 returns an AES256 configuration. GetBucketEncryption now returns that default rather than the error. Reported by @rsariyev-nav.aws-sdk integrations for Query-protocol services sent malformed requests. The shared adapter numbered EC2 list parameters under the wrong wire names and passed the form body as a string rather than bytes, so calls such as aws-sdk:ec2:describeInstances and aws-sdk:sqs:getQueueAttributes failed or silently dropped parameters. EC2 list parameters are now numbered under their botocore wire names, the body is encoded to bytes, GetQueueAttributes returns the SDK Attributes map, and IsTruncated is emitted as a boolean. Contributed by @bandle.[*]) projections in ASL returned incorrect results. Contributed by @felixp-square.ModifySecurityGroupRules is now implemented. The action previously returned InvalidAction: Unknown EC2 action: ModifySecurityGroupRules. Contributed by @staranto.CUSTOM_AUTH now honors Cognito-owned SRP challenges and passes ClientMetadata to DefineAuth. Amplify CUSTOM_WITH_SRP failed with USER_ID_FOR_SRP was not found; the flow now records SRP_A success, returns built-in PASSWORD_VERIFIER challenge parameters, and continues the custom-auth session so MFA CUSTOM_CHALLENGE rounds still work. Contributed by @onelshina.aws-sdk:s3:headObject dropped the object's user Metadata map. The dispatcher now collects x-amz-meta-* response headers into a Metadata map with the prefix stripped, so ASL reading $.Metadata.<key> works. Contributed by @michael-denyer.docker pull ministackorg/ministack:1.4.9 docker run -d -p 4566:4566 ministackorg/ministack:1.4.9
Or pin in compose.yaml:
services:
ministack:
image: ministackorg/ministack:1.4.9
ports:
- "4566:4566"
Issues and PRs welcome on GitHub. Discussion on r/ministack.