> For AI agents: the complete documentation index is available at https://open-spaced-repetition.github.io/ts-fsrs/llms.txt, the full documentation bundle is available at https://open-spaced-repetition.github.io/ts-fsrs/llms-full.txt.

# DefaultScheduler

`DefaultScheduler` is an async factory that returns a ready scheduler instance. It creates a model (FSRS-7 by default) with `dateChrono` and the standard scheduling policies, so the only thing you configure is its options. Internally it is the same definition-and-instance machinery as a custom `defineScheduler` — the preset is just a convenient assembly.

## Options

When upgrading from FSRS-3\~6 to FSRS-7, omit `weights` to use FSRS-7 defaults or supply weights trained for FSRS-7. Replaying history rebuilds card state; it does not convert legacy weights.

FSRS-7 cards include `stabilityFast` as well as `stability` and `difficulty`. Rebuild legacy FSRS-3\~6 memory states by replaying review history with `Reschedule`; parameter migration does not migrate card state. Do not seed an evolved fast trace with `0.8 * stability`. The preset enables fractional days for FSRS-7, and `enableShortTerm: false` only disables explicit learning steps, not the model's fast trace.

For cost-adaptive retention, create a custom definition with `schedulerCostAdrMiddleware` in place of `schedulerDesiredRetentionMiddleware`. Cost ADR is not a `DefaultScheduler` option.

`scheduler.nextInterval(memoryState, desiredRetention, { card, grade, elapsedDays })` queries the interval for an already computed post-rating state. It runs `handlers.nextInterval` without advancing the card or chrono; put shared interval policies in that hook.

| Option               | Default                                 | Purpose                                                                                                                                                                                                                                                                            |
| -------------------- | --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `version`            | `'FSRS-7'`                              | Selects the FSRS model: `'FSRS-3'`, `'FSRS-4'`, `'FSRS-4.5'`, `'FSRS-5'`, `'FSRS-6'`, or `'FSRS-7'`. FSRS-7 cannot migrate legacy FSRS-3\~6 weights.                                                                                                                               |
| `weights`            | preset weights                          | Optional trained weights; omit to use the preset's defaults for the selected version. FSRS-7 requires exactly 34 FSRS-7 weights; supplying legacy weights throws during scheduler construction.                                                                                    |
| `desiredRetention`   | `0.9`                                   | Target retention applied before interval calculation.                                                                                                                                                                                                                              |
| `enableShortTerm`    | `true`                                  | Enables learning and relearning steps.                                                                                                                                                                                                                                             |
| `learningSteps`      | `['1m', '10m']`                         | Learning steps applied when `enableShortTerm` is on.                                                                                                                                                                                                                               |
| `relearningSteps`    | `['10m']`                               | Relearning steps applied when `enableShortTerm` is on.                                                                                                                                                                                                                             |
| `graduatingInterval` | `1`                                     | Shortest interval, in days, for a card in `Review`. A card which has a shorter interval after a review will stay in `Learning`/`Relearning`. When steps are configured, finishing them and rating a `Review` card `Hard`, `Good`, or `Easy` will result in at least this interval. |
| `allowModelOverride` | FSRS-7: `true`; other versions: `false` | Uses the model interval instead of the current step when the model interval is longer. Again is capped at `graduatingInterval`; Hard and Good graduate early once the interval reaches `graduatingInterval`.                                                                       |
| `enableFuzz`         | `false`                                 | Spreads intervals for variety when enabled.                                                                                                                                                                                                                                        |
| `maximumInterval`    | `36500`                                 | Upper bound on the interval in days.                                                                                                                                                                                                                                               |
| `clearStatsOnForget` | `true`                                  | Whether `forget` clears `reps` and `lapses`.                                                                                                                                                                                                                                       |

`DefaultScheduler` always uses `dateChrono` and applies the standard policies in the order described on the [Middleware](https://open-spaced-repetition.github.io/ts-fsrs/guide/middleware/built-in.md) page: desired retention, fuzzing, statistics, scheduled days, learning steps, maximum interval, then monotonic interval. Choosing `version` changes the model and its parameters, not this policy set.

```ts twoslash file="../../../snippets/run-code/default-scheduler.ts"
import { DefaultScheduler, Rating } from 'ts-fsrs'

const now = new Date('2026-01-01T00:00:00.000Z')
const scheduler = await DefaultScheduler({
  version: 'FSRS-7',
  desiredRetention: 0.9,
  enableShortTerm: true,
  learningSteps: ['1m', '10m'],
  relearningSteps: ['10m'],
  enableFuzz: false,
  maximumInterval: 36_500,
})
const card = scheduler.newCard({ cardId: 'quick-start', now })
const result = scheduler.review({ card, grade: Rating.Good, now })

console.log(
  JSON.stringify(
    {
      state: result.card.state,
      dueAt: result.card.dueAt,
      stability: result.card.stability,
      stabilityFast: result.card.stabilityFast,
      difficulty: result.card.difficulty,
      rating: result.revlog.rating,
    },
    null,
    2
  )
)

```


▶ Run code

The factory is async, so `await DefaultScheduler(...)` before using the returned instance. The example makes the common defaults explicit: `version`, `desiredRetention`, learning and relearning steps, fuzzing, and `maximumInterval`. Omit `weights` to use the preset for the selected FSRS version.

## Preset or custom definition

Reach for `DefaultScheduler` when the default FSRS model, `dateChrono`, and the standard policy set fit your product — it is the fastest correct start. Reach for `defineScheduler` when you need a different model or chronology, add or remove policies, or expose a configuration you validate per user. Both end in the same scheduler instance API (`newCard`, `review`, `rollback`, `preview`, and `forget`). See [Scheduler overview](https://open-spaced-repetition.github.io/ts-fsrs/guide/scheduler/index.md) for the definition-and-instance model.
