Verbamor Download the appGet the app
Free tools Download on the App Store
Free tool

The FSRS forgetting curve, drawn properly

Set a card's stability and the retention you want, and this plots the real FSRS-6 curve and the interval it produces. Most forgetting-curve widgets on the internet draw an exponential, or worse, Ebbinghaus. Both give you the wrong shape.

FSRS gives every card a number called stability. It has one definition: the days at which your chance of recalling that card falls to 90%. A stability of 10 means a 90% chance of getting it right 10 days after your last review.

What happens on day 11, or day 60, is a curve. And the shape of that curve is the thing almost every explainer gets wrong, because it looks exponential and it isn't.

The curve

Drag the sliders, or tab to them and use the arrow keys. The chart redraws, the three figures under it recompute, and the working appears at the bottom. With JavaScript off, the formulas and a fully worked example are still below, which is enough to run this on paper.

10 days
90%
0.1542
Jump to a version's decay
FSRS-6 retrievability against days since the last review The vertical axis is probability of recall from 0 to 100 per cent. The horizontal axis is days since the last review. The solid line is the FSRS-6 power curve. The dashed grey line is a plain exponential with the same 90 per cent point, shown for comparison. The dashed green line marks the desired retention level and where it crosses the curve. 0%25%50%75%90%100%0.05.5111722 days
FSRS-6, the fitted power curve A plain exponential, for comparison

10.0 Days until the card comes back, at your retention target
1.000× That interval as a multiple of stability
0.9803 The factor term, which is what pins recall to 90% at t = S
Recall probability at seven points after the last review, for the stability and decay currently set on the sliders.
Days since review FSRS-6 recall Plain exponential
0.0100.00%100.00%
3.795.38%96.21%
7.391.99%92.56%
1189.33%89.06%
1587.16%85.68%
1885.33%82.43%
2283.76%79.31%

The two formulas

Both come out of src/model.rs in fsrs-rs, the Rust library Anki links against, and both are quoted and checked in the parameter-by-parameter walkthrough.

Retrievability. Days since the last review go in, a probability of recall comes out:

R(t, S) = (1 + factor × t / S)−decay
factor = 0.9−1/decay − 1

decay is w20. FSRS-6 default 0.1542, giving factor = 0.980346

The factor exists to make one thing true: at t = S the expression collapses to (1 + factor)−decay, which is exactly 0.9. Stability is defined as the 90% point, so the constant is baked in rather than fitted.

The interval. Invert the curve and you get the days at which recall reaches whatever target you set:

interval = S / factor × (R−1/decay − 1)

Two things fall straight out of that. At R = 0.9 the interval is exactly S, which is the definition closing the loop. And the interval scales linearly in S, so the multiple in the middle stat cell depends only on your retention target and the decay.

Which is why the decay slider matters more than it looks. FSRS-6 fits the decay instead of fixing it, so the interval a given retention target buys you moved between versions:

Desired retention FSRS-4, decay 1 FSRS-5, decay 0.5 FSRS-6, decay 0.1542
95%0.474 × S0.461 × S0.403 × S
90%1.000 × S1.000 × S1.000 × S
85%1.588 × S1.637 × S1.906 × S
80%2.250 × S2.398 × S3.316 × S
70%3.857 × S4.437 × S9.288 × S

At a 70% target FSRS-6 hands you 2.4 times the interval FSRS-4 would from the same card. Set the decay slider to 0.5 and the tool reproduces the FSRS-5 column; set it to 1 and you're outside its range, since w20 clamps to 0.1 to 0.8.

One case, worked by hand

Take S = 10 days, a retention target of 85%, and the default decay of 0.1542.

factor = 0.9−1/0.1542 − 1
−1 / 0.1542 = −6.485084
ln(0.9) = −0.10536052
−6.485084 × −0.10536052 = 0.68327183
e0.68327183 = 1.98034649
factor = 0.98034649

check at t = S: (1 + 0.98034649)−0.1542 = 0.900000 ✓

recall at 20 days:
1 + 0.98034649 × 2 = 2.96069299
ln(2.96069299) = 1.08542336
1.08542336 × −0.1542 = −0.16737228
e−0.16737228 = 0.845885, so 84.59%

interval at 85%:
ln(0.85) = −0.16251893
−0.16251893 × −6.485084 = 1.05394896
e1.05394896 = 2.86895818
2.86895818 − 1 = 1.86895818
10 / 0.98034649 = 10.20047509
interval = 10.20047509 × 1.86895818 = 19.064 days

19.064 / 10 is 1.9064, and the published FSRS-6 multiplier for 85% is 1.906. Set the sliders to 10 days and 85% and the tool should print the same two numbers.

The curve this is not

Search for a forgetting curve and you get Ebbinghaus, 1885, with a line dropping to 10% inside a week.

That line is a misreading, and it's worth saying why before you compare it to the one above. Ebbinghaus measured savings: how much less time it took him to relearn a list of nonsense syllables after a delay. Savings is a relearning-effort measure. It is not a percentage of items recalled, and the two have different units.

His own published equation, solved for 90% forgotten, returns 5,309 years. His table says 25.4% savings at 6 days, which is the number the honest sources print. The full arithmetic on that goes through his equation, his table and where the 90% figure came from instead.

So this page draws no Ebbinghaus curve at all. What it plots is FSRS retrievability, which is a probability that you produce the answer, fitted on a large corpus of real reviews. The dashed grey line is a plain exponential pinned to the same 90% point, so the two lines cross at t = S and only the tail differs. At 10 days of stability the exponential reads 53.1% at 60 days and the FSRS curve reads 74.3%. A power law with a fat tail says a mature card decays much more slowly than a decaying-constant model would let it.

What it does not tell you

It plots one card, in isolation. Stability is per card. FSRS updates it after every review, using formulas that need difficulty, your grade and your elapsed time. This page takes stability as an input and asks what the curve does from there, so nothing here predicts what your next review will do to S.

The default decay is a population fit, not yours. 0.1542 comes from fitting a large review corpus. Anki's optimizer refits w20 on your own history once you have enough of it, and the value it lands on will not be 0.1542. Slide the decay to see how much that matters.

Retrievability is a probability, not a promise. A card at 85% is one you'll miss roughly one time in seven. The curve is an average over many cards and many reviews, and no single review is predicted by it.

Recall probability is not the same as knowing the word. FSRS models whether you'll produce a card's answer when the card is shown. It has nothing to say about whether you'd produce that word in conversation, which is a different and harder thing.

Sources

Every formula and default here comes from Open Spaced Repetition's fsrs-rs: the curve and the interval from src/model.rs, the 21 FSRS-6 defaults and FSRS6_DEFAULT_DECAY from src/inference.rs, and the 0.1 to 0.8 clamp on w20 from src/parameter_clipper.rs. The version comparison table is reproduced in the parameter walkthrough, which reads every one of the 21 out of the source.

If you want the plain-English version of what FSRS does to a card between reviews, how FSRS schedules your reviews is shorter than this page.

You never have to touch a curve.

Verbamor runs FSRS on every card and fits it to your own reviews, so each word comes back at the point this graph says your recall has sagged.

Download on the App Store