Skip to content
Back to main site

Amazon DynamoDB

Create tables, read and write items, and emit DynamoDB Streams change records.

Plan: Free57 of 58 operations implemented2Known differences

PartiQL statements did not provide working SQL reads or writes in testing of Vera 1.2.0 preview.

Example checked on Vera 1.2.2, 8 November 2026. Each coverage note names its own evidence and date.

This Free service needs no license key. Start Vera as in Get started, 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.

Terminal window
export VERA_ENDPOINT="http://localhost:5003"
export AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test
export AWS_REGION=us-east-1 AWS_DEFAULT_REGION=us-east-1
export AWS_SHARED_CREDENTIALS_FILE=/dev/null
export AWS_EC2_METADATA_DISABLED=true
export AWS_PAGER="" AWS_CLI_AUTO_PROMPT=off
unset AWS_PROFILE AWS_DEFAULT_PROFILE
unset AWS_SESSION_TOKEN AWS_SECURITY_TOKEN
unset AWS_WEB_IDENTITY_TOKEN_FILE AWS_ROLE_ARN AWS_ROLE_SESSION_NAME
unset AWS_CONTAINER_CREDENTIALS_FULL_URI
unset AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
cat > vera-aws-config <<'EOF'
[default]
region = us-east-1
output = json
cli_binary_format = base64
s3 =
addressing_style = path
EOF
export 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.

The example uses the AWS CLI’s dynamodb commands. The emulator serves the 2012-08-10 API over the AWS JSON protocol, and the example was checked with the official AWS CLI 2.31.35. A table’s change records are read through a separate API: see DynamoDB Streams.

Create a table keyed on pk, put an item in it, then read it back with a get, a query and a scan.

Terminal window
aws --endpoint-url "$VERA_ENDPOINT" dynamodb create-table --table-name docs-items \
--attribute-definitions AttributeName=pk,AttributeType=S \
--key-schema AttributeName=pk,KeyType=HASH --billing-mode PAY_PER_REQUEST
aws --endpoint-url "$VERA_ENDPOINT" dynamodb put-item --table-name docs-items \
--item '{"pk": {"S": "example"}, "value": {"S": "hello"}}'
aws --endpoint-url "$VERA_ENDPOINT" dynamodb get-item --table-name docs-items \
--key '{"pk": {"S": "example"}}' --consistent-read

create-table prints the table’s metadata, whose IDs and times differ on every run. The get returns the item:

Output
{
"Item": {
"pk": {
"S": "example"
},
"value": {
"S": "hello"
}
}
}

A query on the key and a scan of the table both return the same item, with a Count of 1:

Terminal window
aws --endpoint-url "$VERA_ENDPOINT" dynamodb query --table-name docs-items \
--key-condition-expression 'pk = :key' \
--expression-attribute-values '{":key": {"S": "example"}}'
aws --endpoint-url "$VERA_ENDPOINT" dynamodb scan --table-name docs-items

To clean up, delete the item and the table:

Terminal window
aws --endpoint-url "$VERA_ENDPOINT" dynamodb delete-item --table-name docs-items \
--key '{"pk": {"S": "example"}}'
aws --endpoint-url "$VERA_ENDPOINT" dynamodb delete-table --table-name docs-items
  • Tables, created with a key schema and on-demand billing, listed and deleted. In an earlier recorded comparison, CreateTable’s response matched AWS’s.
  • Items: put, get with consistent reads, query on the partition key, scan and delete. In earlier testing, a deleted item was gone from the next get.
  • Updates: UpdateItem set a string attribute with an update expression.
  • Conditional puts: a put with the condition attribute_not_exists(pk) on a key that already exists fails with ConditionalCheckFailedException.
  • Streams: a table created with a NEW_AND_OLD_IMAGES stream records an INSERT, MODIFY and REMOVE change record for an item’s put, update and delete. Read them with DynamoDB Streams.
  • Regions: in earlier testing, a table created in us-east-1 wasn’t listed in us-west-2.
  • Also served, not yet tested: batch and transactional reads and writes, global tables, backups and restores, exports and imports, time to live, Kinesis streaming destinations, contributor insights, resource policies and tags.

The main limits are below. A few more apply to every service, and the API coverage notes cover smaller differences.

  • PartiQL doesn’t run as SQL. In Vera 1.2.0 preview, a parameterized SELECT * FROM "table" WHERE pk = ? returned an empty Items array, though the item existed. INSERT INTO "table" VALUE {'pk':'two','value':'via-partiql'} returned success with an empty Items array, but a later GetItem found no item. Use the item operations above instead. Earlier source inspection also found that PartiQL doesn’t implement SQL table, filter or bind semantics.
  • Only narrow expression and stream cases were checked. One condition expression, attribute_not_exists(pk), and one stream view type were tested. Expression semantics beyond these, secondary indexes, transactions, batch behavior, TTL expiry, backup restores and cross-account behavior weren’t verified.
  • No provisioning delay. In earlier testing, a new table was reported as CREATING, but it took items at once.
  • Capacity wasn’t tested. Throughput throttling and table and item quotas weren’t tried, and in earlier testing a query returned ConsumedCapacity as null.

Every operation in AWS's published 2012-08-10 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

OperationStatusNotes
BatchExecuteStatementImplemented
BatchGetItemImplemented
BatchWriteItemImplemented
CreateBackupImplemented
CreateGlobalTableImplemented
CreateTableImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — created a table with on-demand billing, and one with a NEW_AND_OLD_IMAGES stream whose change records the DynamoDB Streams API returned.
DeleteBackupImplemented
DeleteItemImplemented
DeleteResourcePolicyImplemented
DeleteTableKnown differenceRecorded comparison: The returned table description includes AttributeDefinitions, KeySchema and CreationDateTime, which AWS's doesn't, and omits BillingModeSummary.LastUpdateToPayPerRequestDateTime.
DescribeBackupImplemented
DescribeContinuousBackupsImplemented
DescribeContributorInsightsImplemented
DescribeEndpointsImplemented
DescribeExportImplemented
DescribeGlobalTableImplemented
DescribeGlobalTableSettingsImplemented
DescribeImportImplemented
DescribeKinesisStreamingDestinationImplemented
DescribeLimitsImplemented
DescribeTableImplemented
DescribeTableReplicaAutoScalingImplemented
DescribeTimeToLiveImplemented
DisableKinesisStreamingDestinationImplemented
EnableKinesisStreamingDestinationImplemented
ExecuteStatementKnown differenceLocal observation: Vera 1.2.0 preview, 5 November 2026 — a parameterized SELECT returned no existing item, and an INSERT returned success but didn't create the item. Source inspection: Recognizes leading SELECT, INSERT, UPDATE and DELETE keywords without implementing PartiQL table, WHERE or bind-parameter semantics. SELECT traverses stored items without those SQL semantics, and the write branches do not modify item state. Shape checks on Parameters and NextToken do not provide their query behavior.
ExecuteTransactionImplemented
ExportTableToPointInTimeImplemented
GetItemImplemented
GetResourcePolicyImplemented
ImportTableImplemented
ListBackupsImplemented
ListContributorInsightsImplemented
ListExportsImplemented
ListGlobalTablesImplemented
ListImportsImplemented
ListTablesImplemented
ListTagsOfResourceImplemented
PutItemImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — stored an item that GetItem, Query and Scan returned. A put with the condition attribute_not_exists(pk) on an existing key failed with ConditionalCheckFailedException; other condition expressions weren't checked.
PutResourcePolicyImplemented
QueryImplemented
RestoreTableFromBackupImplemented
RestoreTableToPointInTimeImplemented
ScanImplemented
SearchVectorsNot implemented
TagResourceImplemented
TransactGetItemsImplemented
TransactWriteItemsImplemented
UntagResourceImplemented
UpdateContinuousBackupsImplemented
UpdateContributorInsightsImplemented
UpdateGlobalTableImplemented
UpdateGlobalTableSettingsImplemented
UpdateItemImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — set a string attribute with an update expression.
UpdateKinesisStreamingDestinationImplemented
UpdateTableImplemented
UpdateTableReplicaAutoScalingImplemented
UpdateTimeToLiveImplemented