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.
| Days since review | FSRS-6 recall | Plain exponential |
|---|---|---|
| 0.0 | 100.00% | 100.00% |
| 3.7 | 95.38% | 96.21% |
| 7.3 | 91.99% | 92.56% |
| 11 | 89.33% | 89.06% |
| 15 | 87.16% | 85.68% |
| 18 | 85.33% | 82.43% |
| 22 | 83.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:
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:
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 × S | 0.461 × S | 0.403 × S |
| 90% | 1.000 × S | 1.000 × S | 1.000 × S |
| 85% | 1.588 × S | 1.637 × S | 1.906 × S |
| 80% | 2.250 × S | 2.398 × S | 3.316 × S |
| 70% | 3.857 × S | 4.437 × S | 9.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.
−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