Overcast is alpha — behaviour and APIs may change between releases. Pin your version and read the changelog before upgrading.

overcast

Kinesis — Amazon Kinesis Data Streams

Kinesis Data Streams with real record storage, partition-key routing, shard iterators and shard split/merge. Retention is recorded but never trims, so records live for the life of the stream.

Records are really stored, routed by partition-key hash and read back through shard iterators; nothing is ever trimmed.

Status: ⚠️ Partial

Quick start

export AWS_ENDPOINT_URL=http://localhost:4566

aws kinesis create-stream --stream-name events --shard-count 1
aws kinesis put-record --stream-name events --partition-key a --data hello

ITER=$(aws kinesis get-shard-iterator --stream-name events \
  --shard-id shardId-000000000000 --shard-iterator-type TRIM_HORIZON \
  --query ShardIterator --output text)
aws kinesis get-records --shard-iterator "$ITER"

Any credentials work; with none configured, run eval "$(overcast env)" first — see Using AWS SDKs and CLI.

What works

AreaBehaviour
StreamsCreateStream is ACTIVE immediately; inline Tags and StreamModeDetails apply at creation, defaulting to PROVISIONED
WritesPutRecord and PutRecords route by partition-key hash into the owning shard
ReadsGetShardIterator supports TRIM_HORIZON, LATEST, AT_SEQUENCE_NUMBER and AFTER_SEQUENCE_NUMBER; GetRecords returns a usable NextShardIterator
PaginationListStreams, ListShards, DescribeStream and ListTagsForStream page on their documented cursors and limits; a NextToken expires after 300 seconds
ReshardingSplitShard and MergeShards close the parents and create real children with correct hash-key ranges
ConsumersLambda event source mappings and EventBridge Pipes poll Kinesis streams
TagsAddTagsToStream/RemoveTagsFromStream and the ARN-addressed TagResource/UntagResource/ListTagsForResource

Differences from AWS

AreaOn AWSOvercast
RetentionRecords expire at the retention periodIncreaseStreamRetentionPeriod and DecreaseStreamRetentionPeriod store and echo the value; no record is ever expired, so a shard keeps everything until the stream is deleted
ThrottlingProvisionedThroughputExceededException past the provisioned ratePutRecords always reports FailedRecordCount: 0; throughput throttling is not simulated
EncryptionRecords are encrypted with the named keyStartStreamEncryption stores EncryptionType and KeyId and Describe* echoes them; records are stored unencrypted
Capacity modesOn-demand capacity is enforcedUpdateStreamMode is recorded; nothing is enforced
Shard filteringListShards narrows its answer with ShardFilterShardFilter is ignored, so every open shard comes back whatever filter was asked for
Enhanced fan-outSubscribeToShard and the consumer registration APIsNot emulated, and a consumer ARN is refused by TagResource
Closed shardsListShards includes themOpen shards only, so a split parent disappears from the list

Gotchas

Warning

Because nothing is trimmed, a long-lived stream in a shared Overcast keeps growing and TRIM_HORIZON keeps replaying from the very first record. Delete and re-create the stream between test runs — DeleteStream removes its records with it.

Operations

All 23 listed operations are implemented. Per-operation status, notes and AWS API links: Kinesis operations.