Amazon Kinesis Data Streams
Create streams, write records and read the stored bytes through shard iterators.
Plan: Pro38 of 45 operations implemented1Known difference
SplitShard is not served, and MillisBehindLatest behaved like a remaining-record count rather than elapsed milliseconds.
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 kinesis commands. The emulator serves the 2013-12-02 API over the AWS JSON protocol.
A record’s data is bytes. The example writes them to record.bin and passes the file as fileb://, which the AWS CLI reads as raw bytes.
Example
Section titled “Example”Create a stream with one shard and describe it, write example.net to it, then read the record back from the start of the shard. The shard iterator is kept in ITERATOR.
printf %s example.net > record.binaws --endpoint-url "$VERA_ENDPOINT" kinesis create-stream \ --stream-name vera-docs-stream --shard-count 1aws --endpoint-url "$VERA_ENDPOINT" kinesis describe-stream --stream-name vera-docs-streamaws --endpoint-url "$VERA_ENDPOINT" kinesis put-record --stream-name vera-docs-stream \ --partition-key docs --data fileb://record.binITERATOR=$(aws --endpoint-url "$VERA_ENDPOINT" kinesis get-shard-iterator \ --stream-name vera-docs-stream --shard-id shardId-000000000000 \ --shard-iterator-type TRIM_HORIZON --query ShardIterator --output text)aws --endpoint-url "$VERA_ENDPOINT" kinesis get-records --shard-iterator "$ITERATOR" --limit 10get-records returns the stored record. ZXhhbXBsZS5uZXQ= is example.net in base64: the bytes that were written. These are selected fields; the ApproximateArrivalTimestamp differs on every run.
{ "Records": [ { "SequenceNumber": "1", "ApproximateArrivalTimestamp": "2026-11-05T20:37:24+00:00", "Data": "ZXhhbXBsZS5uZXQ=", "PartitionKey": "docs", "EncryptionType": "NONE" } ], "NextShardIterator": "iterator:shardId-000000000000:1", "MillisBehindLatest": 0}To clean up, delete the stream and the record file:
aws --endpoint-url "$VERA_ENDPOINT" kinesis delete-stream --stream-name vera-docs-streamrm record.binSupported features
Section titled “Supported features”- Streams with a shard count, described and deleted. A new stream is
ACTIVEat once. - Writing and reading records:
PutRecordstores a record’s bytes, andGetRecordsreturns them through aTRIM_HORIZONshard iterator, with an iterator for the next read. - Batch writes and shards: in a supplemental test, all three records of a
PutRecordsbatch were returned,ListShardsreturned the stream’s shard, and reading on with the next iterator returned the remaining records. - Also served, not checked in Vera 1.2.0 preview or Vera 1.2.0-rc.3: merging shards and changing shard counts, retention periods, encryption, enhanced fan-out consumers and
SubscribeToShard, stream modes, resource policies, tags and enhanced monitoring.
Limitations
Section titled “Limitations”The main limits are below. A few more apply to every service, and the API coverage notes cover smaller differences.
SplitShardisn’t served. A valid split request returned HTTP 400UnknownOperationException. Earlier testing also foundUpdateStreamRecordDistributionStrategyand the channel operations,CreateChannel,DeleteChannel,DescribeChannel,ListChannelsandUpdateChannel, not served.MillisBehindLatestcounts records, not milliseconds. With six records stored, a read withLimit1reported5. The same iterator still reported5after 1.5 seconds, and the next read, withLimit2, reported3, with three records left. Don’t use it as a measure of lag in time. This was seen on the tested iterator path; retention and resharding cases weren’t checked.- No throughput or timing. Throughput limits, throttling, large payloads, retention and iterator expiry, enhanced fan-out and encryption weren’t established.
AWS defines MillisBehindLatest as a time lag in its GetRecords reference.
API coverage
Section titled “API coverage”Every operation in AWS's published 2013-12-02 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 AddTagsToStream, or .
| Operation | Status | Notes |
|---|---|---|
| Add | Implemented | |
| Create | Not implemented | |
| Create | Implemented | Local observation: Vera 1.2.0 preview, 5 November 2026 — Created a one-shard stream, ACTIVE at once. |
| Decrease | Implemented | |
| Delete | Not implemented | |
| Delete | Implemented | |
| Delete | Implemented | Local observation: Vera 1.2.0 preview, 5 November 2026 — Deleted the example's stream. |
| Deregister | Implemented | |
| Describe | Implemented | |
| Describe | Not implemented | |
| Describe | Implemented | |
| Describe | Implemented | Local observation: Vera 1.2.0 preview, 5 November 2026 — Described the example's stream. |
| Describe | Implemented | |
| Describe | Implemented | |
| Disable | Implemented | |
| Enable | Implemented | |
| Get | Known difference | Local observation: Vera 1.2.0 preview, 5 November 2026 — Returned the stored record bytes. MillisBehindLatest behaved like a count of remaining records, not elapsed milliseconds: with six records stored, a Limit 1 read reported 5, the same iterator still reported 5 after 1.5 seconds, and a following Limit 2 read reported 3 with three records left. This resolves the earlier unverified inference from source review. |
| Get | Implemented | |
| Get | Implemented | Local observation: Vera 1.2.0 preview, 5 November 2026 — Returned a TRIM_HORIZON iterator that read the stream's records from the start. |
| Increase | Implemented | |
| List | Not implemented | |
| List | Implemented | Local observation: Vera 1.2.0 preview, 5 November 2026 — Returned the stream's shard. |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| Merge | Implemented | |
| Put | Implemented | Local observation: Vera 1.2.0 preview, 5 November 2026 — Stored the record's bytes, which GetRecords returned unchanged. |
| Put | Implemented | Local observation: Vera 1.2.0 preview, 5 November 2026 — All three records of a batch were stored and read back. |
| Put | Implemented | |
| Register | Implemented | |
| Remove | Implemented | |
| Split | Not implemented | Local observation: Vera 1.2.0 preview, 5 November 2026 — A valid split request returned HTTP 400 UnknownOperationException. |
| Start | Implemented | |
| Stop | Implemented | |
| Subscribe | Implemented | |
| Tag | Implemented | |
| Untag | Implemented | |
| Update | Implemented | |
| Update | Not implemented | |
| Update | Implemented | |
| Update | Implemented | |
| Update | Implemented | |
| Update | Not implemented | |
| Update | Implemented |