July 28, 2026 · v1.4.8
v1.4.8 continues the multi-region push — AWS IoT (control plane and MQTT broker) and AppSync Events now isolate state by account and region. It also lands parity fixes for S3 Tables Iceberg commits and CloudFormation schema wiring, Step Functions JSONPath array indexing, and a crash on aws-cdk-local cross-stack deploys.
$$.Map.Item.Value.values[0].name returned null because context paths used a separate dotted-key-only resolver. Context paths now retain their distinct $$. root while sharing the standard path traversal, so indexed references work in ItemSelector fields and intrinsic-function arguments. Contributed by @felixp-square.add-schema/add-spec/add-sort-order, but Spark re-declares its current unchanged schema, partition spec, and sort order on every write, so a second commit produced a duplicate id and the next table load failed building Iceberg's id-keyed maps (Multiple entries with same key). These updates are now idempotent by id, matching the invariant Iceberg's own TableMetadata builder enforces. Contributed by @squirmy.AWS::S3Tables::Table CloudFormation ignored the declared schema. The provisioner hardcoded an empty Iceberg schema and never read IcebergMetadata.IcebergSchema.SchemaFieldList, so every table created through CloudFormation had zero columns regardless of the template, and downstream consumers failed (a Firehose Iceberg-destination delivery errored with does not have a column with name …). The provisioner now parses SchemaFieldList (Name/Type/Required) into the table's Iceberg schema, the same way the CreateTable API path does. Contributed by @ryan-bennett.'dict' object has no attribute 'startswith'. aws-cdk-local rewrites a CDK cross-stack reference into the non-AWS Fn::GetStackOutput intrinsic instead of Fn::ImportValue, and the engine never resolved it, so the unresolved dict reached a provisioner (for example an AWS::Lambda::Permission FunctionName) and rolled the stack back. The engine now resolves Fn::GetStackOutput to the named output of the referenced already-deployed stack, so cdklocal deploy --all across dependent stacks works. Reported by @jacsonrsasse.docker pull ministackorg/ministack:1.4.8 docker run -d -p 4566:4566 ministackorg/ministack:1.4.8
Or pin in compose.yaml:
services:
ministack:
image: ministackorg/ministack:1.4.8
ports:
- "4566:4566"
Issues and PRs welcome on GitHub. Discussion on r/ministack.