AWS Step Functions
Validate state-machine definitions and manage activity records. A state machine needs an IAM role; a freshly created one worked in Vera 1.2.2.
Plan: Pro37 of 37 operations implemented3Known differences
In Vera 1.2.0 preview, TestState reported success without evaluating a Pass Result, and Wait and SQS Task states stayed RUNNING in diagnostic runs.
Example checked on Vera 1.2.2, 8 November 2026. Each coverage note names its own evidence and date.
Connect
Section titled “Connect”Activate your license key and start the emulator with the Vera launcher, as in Activate Pro, then run this in a terminal of its own, from an empty scratch directory. It gives the official AWS CLI dummy credentials and a config file of its own, so no AWS account is needed and your own AWS profile isn't touched.
export VERA_ENDPOINT="http://localhost:5003"export AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=testexport AWS_REGION=us-east-1 AWS_DEFAULT_REGION=us-east-1export AWS_SHARED_CREDENTIALS_FILE=/dev/nullexport AWS_EC2_METADATA_DISABLED=trueexport AWS_PAGER="" AWS_CLI_AUTO_PROMPT=offunset AWS_PROFILE AWS_DEFAULT_PROFILEunset AWS_SESSION_TOKEN AWS_SECURITY_TOKENunset AWS_WEB_IDENTITY_TOKEN_FILE AWS_ROLE_ARN AWS_ROLE_SESSION_NAMEunset AWS_CONTAINER_CREDENTIALS_FULL_URIunset AWS_CONTAINER_CREDENTIALS_RELATIVE_URIcat > vera-aws-config <<'EOF'[default]region = us-east-1output = jsoncli_binary_format = base64s3 = addressing_style = pathEOFexport AWS_CONFIG_FILE="$PWD/vera-aws-config"When you've finished every example in this terminal, close it and delete vera-aws-config, not before.
Use the AWS CLI’s stepfunctions commands. The emulator serves the 2016-11-23 API over the AWS JSON protocol.
A state machine needs the ARN of an existing IAM role, and a role that doesn’t exist is rejected. In Vera 1.2.2, a freshly created role worked, and the tested Pass state returned its result. The example below validates a definition and manages an activity record, neither of which needs a role.
Example
Section titled “Example”Write a definition with one Pass state to definition.json, and validate it:
cat > definition.json <<'EOF'{"StartAt":"Prepare","States":{"Prepare":{"Type":"Pass","Result":{"domain":"example.net","executed":true},"End":true}}}EOFaws --endpoint-url "$VERA_ENDPOINT" stepfunctions validate-state-machine-definition --definition file://definition.jsonThe definition is valid, with no diagnostics. This checks one valid definition; it doesn’t run it, and it isn’t a test of every validation rule.
{ "result": "OK", "diagnostics": [], "truncated": false}Create an activity, keeping its ARN in ACTIVITY_ARN, and describe it:
ACTIVITY_ARN=$(aws --endpoint-url "$VERA_ENDPOINT" stepfunctions create-activity \ --name vera-docs-activity --query activityArn --output text)aws --endpoint-url "$VERA_ENDPOINT" stepfunctions describe-activity --activity-arn "$ACTIVITY_ARN"describe-activity returns the activity. These are selected fields:
{ "activityArn": "arn:aws:states:us-east-1:123456789012:activity:vera-docs-activity", "name": "vera-docs-activity"}An activity is a record that workers poll for tasks. Creating one doesn’t start a worker or run the definition above.
To clean up, delete the activity and the definition file:
aws --endpoint-url "$VERA_ENDPOINT" stepfunctions delete-activity --activity-arn "$ACTIVITY_ARN"rm definition.jsonSupported features
Section titled “Supported features”- Definition validation:
ValidateStateMachineDefinitionansweredOK, with no diagnostics, for a valid Pass definition. - Activities, created, described and deleted as records.
- State machines with a fresh role. In Vera 1.2.2, a freshly created IAM role worked, and the tested Pass state returned its result.
- Executions, in diagnostic runs on Vera 1.2.0 preview: where role records already existed, a Pass workflow computed its result,
{"value":7}, and a Fail workflow endedFAILEDwith the error and cause it supplied. Other states have limits: see Limitations. - Also served, not checked in Vera 1.2.0 preview or Vera 1.2.0-rc.3: synchronous executions, stopping and redriving executions, task tokens, versions and aliases, map runs and tags.
Limitations
Section titled “Limitations”The main limits are below. A few more apply to every service, and the API coverage notes cover smaller differences.
- Waits and task integrations didn’t finish in the diagnostic runs on Vera 1.2.0 preview. A two-second
Waitstate stayedRUNNINGthrough five reads about one second apart. An SQSTaskintegration also stayedRUNNINGand delivered no message while it was watched. That doesn’t prove every wait or task fails, but long-running workflows remain unverified. - Execution history is empty. In Vera 1.2.0 preview,
GetExecutionHistoryreturnedeventsas[]for both the completed Pass execution and the failed one. TestStatedoesn’t evaluate a Pass state. In Vera 1.2.0 preview, aTestStaterequest for{"Type":"Pass","Result":{"value":7},"End":true}with input{}returnedSUCCEEDEDwith output{}, not the Pass result. Don’t useTestStatein place of a real execution. Its API definition also puts async-prefix on the endpoint’s host name, so an SDK sends it tosync-localhostunless you turn host-prefix injection off for that client, for example with boto3’sConfig(inject_host_prefix=False). The example doesn’t callTestState.
API coverage
Section titled “API coverage”Every operation in AWS's published 2016-11-23 API (SDK model, botocore 1.43.105), and whether the emulator implements it. Availability combines the earlier implementation inventory with the dated observations below; checking a page's example does not verify every operation. Each note names its evidence first; an observation given without a build or date comes from earlier testing, on 3 November 2026. What the statuses mean
No operation matches .
Try part of a name, such as CreateActivity, or .
| Operation | Status | Notes |
|---|---|---|
| Create | Implemented | Local observation: Vera 1.2.0 preview, 5 November 2026 — Created the example's activity record and returned its ARN. |
| Create | Implemented | Local observation: Vera 1.2.2, 8 November 2026 — worked with a freshly created IAM role, and the tested Pass state returned its result. Local observation: Vera 1.2.0 preview, 5 November 2026 — Rejected a role ARN that doesn't exist. Diagnostic runs that reused existing role records created Pass, Fail, Wait and SQS Task state machines. |
| Create | Implemented | |
| Delete | Implemented | Local observation: Vera 1.2.0 preview, 5 November 2026 — Deleted the example's activity record. |
| Delete | Implemented | |
| Delete | Implemented | |
| Delete | Implemented | |
| Describe | Implemented | Local observation: Vera 1.2.0 preview, 5 November 2026 — Returned the example activity's ARN and name. |
| Describe | Implemented | |
| Describe | Implemented | |
| Describe | Implemented | |
| Describe | Implemented | |
| Describe | Implemented | |
| Get | Implemented | |
| Get | Known difference | Local observation: Vera 1.2.0 preview, 5 November 2026 — Returned events [] for both a succeeded Pass execution and a failed Fail execution, in diagnostic runs that reused existing role records. Earlier testing also found no events for a succeeded execution. |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| Publish | Implemented | |
| Redrive | Implemented | |
| Send | Implemented | |
| Send | Implemented | |
| Send | Implemented | |
| Start | Known difference | Source inspection: Earlier profile, 3 November 2026, with background processing off — Starts the execution RUNNING; it advanced when described. That doesn't establish what advances every execution. Local observation: Vera 1.2.0 preview, 5 November 2026 — In diagnostic runs that reused existing role records, a Pass workflow computed {"value":7} and a Fail workflow ended FAILED with the supplied error and cause. A two-second Wait stayed RUNNING through five reads about one second apart, and an SQS Task integration stayed RUNNING without delivering a message during the observation. |
| Start | Implemented | |
| Stop | Implemented | |
| Tag | Implemented | |
| Test | Known difference | Local observation: Vera 1.2.0 preview, 5 November 2026 — For a Pass state with Result {"value":7} and input {}, returned SUCCEEDED with output {}, without evaluating the Pass result. The operation's sync- host prefix means SDK callers need host-prefix injection turned off, or the request goes to sync-localhost. |
| Untag | Implemented | |
| Update | Implemented | |
| Update | Implemented | |
| Update | Implemented | |
| Validate | Implemented | Local observation: Vera 1.2.0 preview, 5 November 2026 — Returned result OK, no diagnostics and truncated false for a valid one-state Pass definition. Invalid definitions weren't checked. |