May 29, 2026 · v1.3.52
One major new Lambda feature, an S3 tagging refinement, and a CloudFormation resource type. All three close open GitHub issues.
Full support for the AWS Lambda durable functions preview API (2025-12-01). CreateFunction accepts DurableConfig; the seven management ops CheckpointDurableExecution, GetDurableExecutionState, GetDurableExecution, GetDurableExecutionHistory, ListDurableExecutionsByFunction, and StopDurableExecution are wired to the durable execution state machine; the three external callback ops SendDurableExecutionCallbackSuccess, SendDurableExecutionCallbackFailure, and SendDurableExecutionCallbackHeartbeat resume the SDK across invocations.
A resume scheduler fires WAIT expiries, callback timeouts (Callback.Timeout / Callback.Heartbeat), and step-retry backoffs (NextAttemptDelaySeconds). State persists across MiniStack restarts — the in-memory callback index is rebuilt from restored executions on boot and pending timers are re-armed.
End-to-end verified against the official aws-durable-execution-sdk-python 1.5.0 and aws-durable-execution-sdk-java 2.44.13.
from aws_durable_execution_sdk_python.context import DurableContext
from aws_durable_execution_sdk_python.execution import durable_execution
@durable_execution
def handler(event, ctx: DurableContext) -> str:
result = ctx.step(lambda _: "step result", name="my-step")
return result
Deploy the function with DurableConfig.Enabled=True on CreateFunction and invoke; the durable execution log is queryable via GetDurableExecution / GetDurableExecutionHistory. External systems resolve create_callback() waits by hitting POST /2025-12-01/durable-execution-callbacks/{CallbackId}/succeed on the MiniStack endpoint. Reported by @youngkwangk.
versionIdGET / PUT / DELETE ?tagging honor the versionId query parameter, and PutObject and the POST form upload now store the x-amz-tagging header against the resulting version rather than the object key — matching AWS's versioned-tagging semantics. Reported by @barrywilks7.
AWS::AppConfig::ApplicationCreate and delete provisioners for the AppConfig application resource type. The CFN dispatcher returns the AppConfig application id as the physical id and exposes ApplicationId for Fn::GetAtt. Reported by @zmartinec.
MaxItems on ListDurableExecutionsByFunction / GetDurableExecutionState / GetDurableExecutionHistory is now bounded to the AWS-documented [0, 1000] range (out-of-range returns InvalidParameterValueException 400 instead of silently clamping). CheckpointDurableExecution rejects OperationUpdate entries with missing Id / Type / Action or with a Type outside EXECUTION / CONTEXT / STEP / WAIT / CALLBACK / CHAINED_INVOKE. StopDurableExecution on an already-terminal execution returns InvalidParameterValueException 400 per the AWS-documented "Stops a running durable execution" contract.
docker pull ministackorg/ministack:1.3.52 docker run -d -p 4566:4566 ministackorg/ministack:1.3.52
Or pin in compose.yaml:
services:
ministack:
image: ministackorg/ministack:1.3.52
ports:
- "4566:4566"
Issues and PRs welcome on GitHub. Discussion on r/ministack.