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.
Connect
Section titled “Connect”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.
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.
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.
Example
Section titled “Example”Create a table keyed on pk, put an item in it, then read it back with a get, a query and a scan.
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_REQUESTaws --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-readcreate-table prints the table’s metadata, whose IDs and times differ on every run. The get returns the item:
{ "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:
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-itemsTo clean up, delete the item and the table:
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-itemsSupported features
Section titled “Supported features”- 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:
UpdateItemset 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 withConditionalCheckFailedException. - Streams: a table created with a
NEW_AND_OLD_IMAGESstream 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-1wasn’t listed inus-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.
Limitations
Section titled “Limitations”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 emptyItemsarray, though the item existed.INSERT INTO "table" VALUE {'pk':'two','value':'via-partiql'}returned success with an emptyItemsarray, but a laterGetItemfound 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
ConsumedCapacityas null.
API coverage
Section titled “API coverage”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
No operation matches .
Try part of a name, such as BatchExecuteStatement, or .
| Operation | Status | Notes |
|---|---|---|
| Batch | Implemented | |
| Batch | Implemented | |
| Batch | Implemented | |
| Create | Implemented | |
| Create | Implemented | |
| Create | Implemented | Local 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. |
| Delete | Implemented | |
| Delete | Implemented | |
| Delete | Implemented | |
| Delete | Known difference | Recorded comparison: The returned table description includes AttributeDefinitions, KeySchema and CreationDateTime, which AWS's doesn't, and omits BillingModeSummary.LastUpdateToPayPerRequestDateTime. |
| Describe | Implemented | |
| Describe | Implemented | |
| Describe | Implemented | |
| Describe | Implemented | |
| Describe | Implemented | |
| Describe | Implemented | |
| Describe | Implemented | |
| Describe | Implemented | |
| Describe | Implemented | |
| Describe | Implemented | |
| Describe | Implemented | |
| Describe | Implemented | |
| Describe | Implemented | |
| Disable | Implemented | |
| Enable | Implemented | |
| Execute | Known difference | Local 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. |
| Execute | Implemented | |
| Export | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Import | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| Put | Implemented | Local 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. |
| Put | Implemented | |
| Query | Implemented | |
| Restore | Implemented | |
| Restore | Implemented | |
| Scan | Implemented | |
| Search | Not implemented | |
| Tag | Implemented | |
| Transact | Implemented | |
| Transact | Implemented | |
| Untag | Implemented | |
| Update | Implemented | |
| Update | Implemented | |
| Update | Implemented | |
| Update | Implemented | |
| Update | Implemented | Local observation: Vera 1.2.0 preview, 5 November 2026 — set a string attribute with an update expression. |
| Update | Implemented | |
| Update | Implemented | |
| Update | Implemented | |
| Update | Implemented |