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

overcast

Scheduler — Amazon EventBridge Scheduler

Quick start, the expressions and eight target types the engine fires, target parameters, retries and dead-lettering, and why an unfirable target is refused at create time.

Schedules and groups, with a clock-driven engine that fires them into the same eight target types EventBridge rules reach.

Status: ⚠️ Partial

Quick start

export AWS_ENDPOINT_URL=http://localhost:4566

QUEUE=$(aws sqs create-queue --queue-name jobs --query QueueUrl --output text)
ARN=$(aws sqs get-queue-attributes --queue-url "$QUEUE" \
  --attribute-names QueueArn --query Attributes.QueueArn --output text)

aws scheduler create-schedule --name tick \
  --schedule-expression 'rate(1 minute)' \
  --flexible-time-window Mode=OFF \
  --target "Arn=$ARN,RoleArn=arn:aws:iam::000000000000:role/scheduler"

aws sqs receive-message --queue-url "$QUEUE" --wait-time-seconds 20

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

What works

AreaBehaviour
Schedules and groupsFull CRUD and tagging. default is auto-seeded and cannot be deleted; deleting a group deletes the schedules in it, as AWS does.
Expressionsrate(...), at(...) and AWS’s six-field cron(...) — the same parser EventBridge rules use, down to the refusal of the five-field Unix form.
EngineA 1-second ticker hands each due schedule to a pool of delivery workers, so a slow or retrying target delays only its own schedule. A schedule is never in flight twice, so its firings stay in order.
TargetsLambda, SQS, SNS, Step Functions, Kinesis, Firehose, ECS RunTask and EventBridge event buses — through the same dispatcher EventBridge rules and Pipes use, so a target ARN behaves identically wherever it is used.
Target parametersSqsParameters.MessageGroupId, KinesisParameters.PartitionKey, EventBridgeParameters (Source, DetailType), and EcsParameters (TaskDefinitionArn, TaskCount, LaunchType, PlatformVersion, Group, NetworkConfiguration).
PayloadTarget.Input is delivered verbatim; a target with none receives a generated {"source":"aws.scheduler","time":…,"id":…} envelope.
RetriesRetryPolicy.MaximumRetryAttempts and MaximumEventAgeInSeconds, with a DeadLetterConfig SQS queue after the final failed attempt.
PaginationMaxResults (1–100) and NextToken on both list operations; NamePrefix and State filters on ListSchedules.

Differences from AWS

AreaOn AWSOvercast
Target types~270, via templated and universal (aws-sdk:) targetsEight, validated at CreateSchedule/UpdateSchedule
RetriesUp to 185 attempts with backoffBack to back, no backoff, capped at 6 total attempts. No RetryPolicy means one attempt
FlexibleTimeWindowJittered across the windowStored and returned; a schedule always fires at its exact due tick
ScheduleExpressionTimezoneEvaluated in the named zoneStored and returned; expressions evaluate against the emulator’s clock
KmsKeyArnEncryptedAn association only; schedule data is held in plaintext
List responsesScheduleSummary / ScheduleGroupSummaryReturn the full stored object rather than AWS’s summary shape — a superset, so an SDK deserialises it unchanged

A target type Overcast cannot fire is rejected at create and update with a ValidationException, rather than accepted and dropped at fire time — as are an ECS target without EcsParameters.TaskDefinitionArn and an event-bus target without EventBridgeParameters. An expression the engine cannot evaluate is refused the same way. Nothing is stored that would read correctly in GetSchedule and never fire.

Gotchas

Warning

UpdateSchedule replaces, as AWS’s does. The request carries the whole schedule, so any optional member you omit — Description, ScheduleExpressionTimezone, State, StartDate, EndDate, or anything inside Target — ends up unset, and State returns to its ENABLED default. Read the schedule, change what you mean to change, and send the result back. Only the name, group, ARN and CreationDate survive regardless.

Operations

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