[API reference](https://evolu.dev/docs/api-reference) › [@evolu/common](https://evolu.dev/docs/api-reference/common) › [Schedule](https://evolu.dev/docs/api-reference/common/Schedule) › Schedule

```ts
type Schedule<Output, Input> = (
  deps: ScheduleDeps,
) => (input: Input) => NextResult<readonly [Output, Millis]>;
```

Defined in: [packages/common/src/Schedule.ts:57](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Schedule.ts#L57)

Composable scheduling strategies for [retry](https://evolu.dev/docs/api-reference/common/Task/functions/retry), [repeat](https://evolu.dev/docs/api-reference/common/Task/functions/repeat), rate
limiting, and more.

A Schedule uses the State pattern: calling `schedule(deps)` creates a step
function with internal state captured in closures. Each call to `step(input)`
advances that state and returns `Ok([Output, Millis])` or `Err(Done<void>)`
to stop. Multiple calls to `schedule(deps)` create independent state
instances.

### Example

```ts

const fetchWithRetry = retry(
  fetchData,
  // A jittered, capped, limited exponential backoff.
  jitter(1)(maxDelay("20s")(take(2)(exponential("100ms")))),
);
```

Or use a preset:

```ts

const fetchWithRetry = retry(fetchData, retryStrategyAws);
```