September 8, 2026 · v1.5.9
v1.5.9 is the CloudFormation catch-up release: WaitCondition actually waits and SignalResource exists, stack-level tags propagate to the resources with the aws:cloudformation: tags, the seven list and describe actions page their results, dynamic references resolve, and DeletionPolicy is honoured. On the side, the Lambda Docker executor stops re-extracting code and layers on every cold start.
Ref is a URL the emulator serves; the stack holds until Count distinct SUCCESS signals arrive, a FAILURE or the Timeout rolls it back, signals land in the stack events, and Fn::GetAtt Wait.Data is the {UniqueId: Data} map. The CreationPolicy form is signalled through the new SignalResource action. Nested stacks now deploy on a worker thread, so a wait condition or custom resource inside one no longer blocks the server. Contributed by @iot-rocket.aws:cloudformation: tags on create and update; the common types (queue, topic, table, function, log group, stream) now store their own Tags where their service's list-tags call reads them; an empty Tags on UpdateStack removes them and tags set through a service's own API survive. Contributed by @iot-rocket.DescribeStacks, ListStacks, DescribeStackEvents, ListStackResources, ListExports, ListImports and ListChangeSets return 100 items per page with a NextToken, so boto3 paginators finally paginate. Contributed by @iot-rocket.{{resolve:ssm:...}} and {{resolve:secretsmanager:...}} resolve at provisioning time with AWS's measured update semantics; DeletionPolicy/UpdateReplacePolicy Retain keeps the resource with a DELETE_SKIPPED event; and ListImports, UpdateTerminationProtection, stack policies, CancelUpdateStack and ContinueUpdateRollback now exist, so an UPDATE_ROLLBACK_FAILED stack has a way out. Contributed by @iot-rocket.upgrade-format-version commit a Spark job sends for the v3 table property was silently dropped; both REST catalogs now apply it atomically and refuse downgrades with 400. Real S3 Tables supports Iceberg v3.Fn::Cidr splits the block it is given, Fn::GetAZs answers the stack's own zones, Fn::FindInMap gains DefaultValue and AWS's missing-key error, condition functions resolve to booleans in value position. Parameter constraints (AllowedPattern, min/max) are enforced with CloudFormation's wording, unregistered AWS::CloudFormation::* types are refused up front, and the stack id addresses GetTemplateSummary and UPDATE change sets. Contributed by @iot-rocket.DELETE_FAILED and is retried; DescribeStackResource(s) carry ResourceStatusReason, the detail's LastUpdatedTimestamp and the resource Metadata with intrinsics interpreted; change sets see DeletionPolicy/UpdateReplacePolicy/Metadata edits, so a CDK removalPolicy change deploys. Contributed by @iot-rocket.^[a-z][a-z0-9]*[.]mrap$. Contributed by @iot-rocket.docker pull ministackorg/ministack:1.5.9 docker run -d -p 4566:4566 ministackorg/ministack:1.5.9
Or pin in compose.yaml:
services:
ministack:
image: ministackorg/ministack:1.5.9
ports:
- "4566:4566"
Issues and PRs welcome on GitHub. Discussion on r/ministack.