FSRS-7
For steps that rebuild memory states without rescheduling existing cards, see the v6 and FSRS-7 migration guide.
FSRS-7 uses 34 weights and two stability components. Its state contains stability (slow component), stabilityFast (fast component), and difficulty. The two stability components produce the slow and fast recall components used by the forgetting curve.
Memory state and notation
Use the shared symbols, with for stability and for stabilityFast. Both are measured in days, but neither is the interval at which the mixed recall probability reaches 90%. Difficulty affects both the slow curve and its mixture weight.
The formulas use bounded pre-review state values: both stabilities are in [0.0001, 36500] and difficulty is in [1, 10]. Elapsed time is in fractional days; curve evaluation uses . The fast and slow names identify model components, not a guaranteed ordering of their stability values.
Initial memory
For a new memory state, let and clamp to the slow and fast stability bounds respectively, and let clamp to [1, 10].
Dual-trace forgetting curve
Fast trace:
Slow trace:
Mixture weights and recall
The weights are positive, unnormalised coefficients. They depend on the memory state, not elapsed time. A raw component recall is not its contribution to the mixture.
algorithm.curve(t, state) returns fast, slow, fastWeight, slowWeight, retrievability, and derivative. The fast and slow fields are the two component recall probabilities, while fastWeight and slowWeight are positive, unnormalised mixture coefficients. The retrievability value is their weighted average followed by the final epsilon adjustment, so .
Stability after review
For a trace stability , recall input , and parameter offset , define the lapse value and successful-recall update:
Use and the mixed recall for the slow trace; use and the raw fast recall for the fast trace. All updates use pre-review difficulty. An explicit retrievability input replaces for the slow update and difficulty, but does not replace for the fast update.
On Again, cap the new fast stability at 80% of the new slow stability before applying state bounds:
Difficulty after review
Again scales the difficulty change by the mixed recall. Mean reversion uses a fixed coefficient of 0.01:
The implementation rounds the three new state values to eight decimal places and clamps them to their bounds. FSRS-7 uses these updates at fractional elapsed times, including zero; it has no separate enableShortTerm same-day formula. Learning-step scheduling is still a middleware policy.
Interval calculation
nextInterval(state, r) numerically solves the mixed curve for elapsed time. It depends on all three state fields and returns fractional days.
The implementation validates , clamps the target to [0.0001, 0.9999], and returns zero for a target at the upper bound. Otherwise it uses up to seven bounded Newton updates in log-time, with a bisection fallback when the recall error exceeds 0.001. The result is limited by sMax; extreme targets may therefore be unreachable.
Configuration and migration
FSRS-7 requires its own 34 weights. The parameter migration helper supplies defaults for empty input but requires exactly 34 weights for non-empty input. FSRS-3–6 weights and memory states cannot be directly converted to FSRS-7. To migrate card data, use reschedule with an FSRS-7 scheduler to replay review history and reconstruct the memory state, preserving fractional elapsed days. The 0.8 factor above applies to initialisation and Again updates.