Every FSRS parameter, w0 to w20, in plain English
FSRS-6 has 21 parameters: w0 to w3 set starting stability for each first grade, w4 to w7 run difficulty, w8 to w16 decide stability after a pass or a lapse, w17 to w19 handle same-day reviews, and w20 sets the forgetting curve's decay. Below is each one's default, legal range and effect.
Open Anki's deck options, scroll to the bottom, and turn on FSRS. (FSRS is an open-source algorithm that predicts when you're about to forget each card.) You get a text box with 21 numbers in it.
The manual's entire explanation is that "FSRS parameters affect how cards are scheduled", followed by a warning: "Do not change the parameters manually or copy them from someone else."
Fine advice, but it explains nothing. So here's the whole set, read out of the source code. I didn't paraphrase it from another blog post.
Everything below comes from fsrs-rs, the Rust library Anki links against. The defaults are in src/inference.rs. The clamp ranges are in src/parameter_clipper.rs. The formulas are in src/model.rs.
I checked my arithmetic against the worked example in the official Open Spaced Repetition wiki, and it lands within rounding. That's the only reassurance available, since no one publishes test vectors (known inputs with their expected outputs).
One thing to settle first, because half the guides I checked get it wrong: FSRS is opt-in in Anki. Anki still ships SM-2 as the default. The manual calls FSRS "an alternative to Anki's legacy SuperMemo 2 (SM-2) algorithm" and tells you to enable it yourself.
It's been built in since 23.10, in October 2023. That's a different sentence from "default since 23.10". If you've never touched that toggle, none of these 21 numbers has ever run on your cards.
The comparison with SM-2 covers what you'd be switching from, and the benchmark everyone cites for it has no SM-2 row.
Every one of the 21 has a default and a legal range
Two words run through all of it. Stability is the number of days until your odds of recalling a card fall to 90%. Difficulty is a score from 1 to 10 for how hard that card is for you.
Here are the FSRS-6 defaults, with the range the optimizer is allowed to move each parameter into. Anything outside the range gets clipped back to the edge before training and after it.
| Param | Default | Legal range | What it does |
|---|---|---|---|
| w0 | 0.212 | 0.0001 to 100 | Starting stability, in days, when your first grade on a card is Again. 5.1 hours. |
| w1 | 1.2931 | 0.0001 to 100 | Starting stability when your first grade is Hard. 31 hours. |
| w2 | 2.3065 | 0.0001 to 100 | Starting stability when your first grade is Good. 55 hours. |
| w3 | 8.2956 | 0.0001 to 100 | Starting stability when your first grade is Easy. 8.3 days, 39 times w0. |
| w4 | 6.4133 | 1 to 10 | Starting difficulty when your first grade is Again, not Good. See the oddities section. |
| w5 | 0.8334 | 0.001 to 4 | How steeply starting difficulty drops as that first grade improves. Sits in an exponent. |
| w6 | 3.0194 | 0.001 to 4 | How far difficulty moves per grade afterwards. Damped by how high difficulty already is. |
| w7 | 0.001 | 0.001 to 0.75 | Mean reversion strength, the anti-ease-hell pull. Pinned at its own floor by default. |
| w8 | 1.8722 | 0 to 4.5 | Overall size of a stability gain after a pass. Enters as e^w8, so 6.50. |
| w9 | 0.1666 | 0 to 0.8 | Diminishing returns. Higher w9 means well-known cards gain proportionally less. |
| w10 | 0.796 | 0.001 to 3.5 | The spacing-effect payout. How much extra you gain for passing a card you nearly forgot. |
| w11 | 1.4835 | 0.001 to 5 | Overall size of stability left after a lapse. The scale factor on post-lapse stability. |
| w12 | 0.0614 | 0.001 to 0.25 | How much a card's difficulty reduces what survives a lapse. Very weak at default. |
| w13 | 0.2629 | 0.001 to 0.9 | How much a card's old stability carries into what survives a lapse. |
| w14 | 1.6483 | 0 to 4 | Forgetting a card you were already unlikely to recall costs you less. This sets how much less. |
| w15 | 0.6014 | 0 to 1 | Hard penalty. Multiplies the stability gain, so a Hard pass earns 60% of the gain. |
| w16 | 1.8729 | 1 to 6 | Easy bonus. An Easy pass earns 1.87 times the gain. |
| w17 | 0.5425 | 0 to a computed ceiling | Same-day review effect: how much a repeat grade on the same day moves stability. |
| w18 | 0.0912 | 0 to the same ceiling | Shifts which same-day grade counts as neutral. Also caps post-lapse stability. |
| w19 | 0.0658 | 0.01 to 0.8, or 0 to 0.8 | Diminishing returns for same-day reviews. New in FSRS-6. |
| w20 | 0.1542 | 0.1 to 0.8 | Decay of the forgetting curve. The single most consequential number here. New in FSRS-6. |
Three footnotes the fsrs-rs source makes and the docs don't. The upper bound on w0 to w3 is 100 days, taken from INIT_S_MAX in parameter_initialization.rs. It's tighter than the 36500-day ceiling that applies to stability everywhere else.
The floor on w19 depends on a setting. It's 0.01 when short-term scheduling is on and 0 when it's off, so turning that off lets the optimizer switch w19 off completely.
And the ceiling on w17 and w18 is computed from other values. That's the subject of the third oddity below.
Five formulas hold all 21, and two of them do a second job off the books
Every FSRS-6 parameter belongs to at least one of these five formulas. Read them once and the table stops being a list of magic numbers.
The forgetting curve turns days since the last review into a probability of recall. R(t,S) = (1 + factor · t/S)^(-w20), with factor = 0.9^(-1/w20) - 1. That factor is chosen so that R = 90% exactly when t = S.
Only w20 appears. Stability S is defined as the interval at which recall odds hit 90%. That's why the constant is baked in and never fitted.
The difficulty update runs on w4 to w7. Initial difficulty is D0(G) = w4 - e^(w5·(G-1)) + 1.
After that, each grade moves difficulty by -w6·(G-3), damped by (10-D)/9. So the closer a card already is to 10, the less any single grade can push it. Then mean reversion pulls the result toward D0(4) with strength w7.
Stability after a pass runs on w8 to w10 plus w15 and w16. New S = S · (e^w8 · (11-D) · S^(-w9) · (e^(w10·(1-R)) - 1) · hard · easy + 1).
Here hard is w15 on a Hard grade and easy is w16 on an Easy, both 1 otherwise. Four separate brakes: harder cards gain less, more stable cards gain less, cards you were confident about gain less, and Hard grades gain less.
Stability after a lapse, called post-lapse stability, runs on w11 to w14:
PLS = w11 · D^(-w12) · [(S+1)^w13 - 1] · e^(w14·(1-R))
Plus a ceiling almost no one quotes: post-lapse stability is also capped at S / e^(w17·w18). With default parameters, that's 0.9517 times the old stability.
A lapse can never leave a card more stable than it was. And w17 and w18 are quietly doing a job outside the same-day formula they're named for.
The same-day update is the fifth thing, and it only fires when zero days have passed since the last review. New S = S · e^(w17·(G-3+w18)) · S^(-w19), running on w17, w18 and w19.
Two details from the same-day code that no write-up mentions. The result is floored at 1 for any grade of Hard or better. So a second look on the same day can never reduce a card's stability unless you press Again.
And the raw multiplier for a Good crosses below 1 once stability passes e^(w17·w18/w19), which is 2.12 days. So for almost every card, that floor is the thing actually deciding the outcome. Same-day Good presses are close to a no-op by design.
A third detail matters more than either. The zero-days branch is selected before the grade is consulted, so a same-day Again runs through this formula too, and skips post-lapse stability. Lapse on the same day you learned a card and the post-lapse machinery above never touches it.
Your first grade on a card matters more than any grade after it
Parameters mean nothing until you run them. Here's what the FSRS-6 defaults produce.
Your first grade sets a card's whole starting position. Again gives 5.1 hours of stability, Hard 31 hours, Good 55 hours, Easy 8.3 days. The Easy-to-Again spread is 39 times. That one tap matters more than any later tap on the same card.
A lapse costs more the better you knew the card. Run the PLS formula at D = 5 and R = 0.9. A card with 1 day of stability keeps 0.317 days, 32% of what it had. At 10 days it keeps 1.39, or 14%. At 100 days it keeps 3.75, under 4%. At a year it keeps 5.9 days, 1.6%.
Forgetting a card you've held for a year costs you roughly the same absolute stability as forgetting one you've held for a hundred days. That's because (S+1)^0.2629 grows so slowly.
It's the flattest curve in the whole model. It's why lapses on mature cards feel so much worse than the interval change suggests.
Hard and Easy are 3.1 times apart. The gain multipliers are 0.6014 and 1.8729. At S = 10, D = 5, exactly due, the stability multiplier is 2.32 on Hard, 3.20 on Good, 5.13 on Easy. Grading honestly is worth roughly a doubling of your next interval. That's the arithmetic behind grading yourself honestly.
Four Goods reach a year. Start from S0(Good) = 2.31 days. Press Good every time the card comes up exactly on schedule, so R is 90% at every review.
Stability goes 2.31, then 11.9, then 49.7, then 173.8, then 526.9 days. That's 4 passes after the first, 238 days of elapsed time, and the card lands on a 17-month interval. FSRS reaches long intervals faster than most people expect.
Difficulty barely moves across the whole run, from 2.118 to 2.091. A Good grade has a difficulty step of zero, and mean reversion at w7 = 0.001 does almost nothing.
w20 changes what desired retention means. (Desired retention is the recall odds you ask the scheduler to aim for.) This is the one I wouldn't have predicted.
The decay is now fitted instead of fixed, so the interval you get at a given retention target moved between versions. At 90% every version agrees by construction. Away from 90% they diverge hard:
| 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 an interval 2.4 times longer than FSRS-4 would from identical stability. Same setting, same card, different answer.
Anyone who tuned their retention setting under an older version and kept the number is running a different schedule than they think they are.
Three of the shipped defaults do something the docs never tell you
w4 is the Again value, and D0(Easy) computes to a negative number. The wiki states it plainly: w4 = D0(1), the initial difficulty when the first rating is Again. Plenty of secondary explainers call w4 "initial difficulty" without saying which grade.
The page most people are sent to goes further. It describes the mean reversion target as "the default value that corresponds to the Easy button: w4". That mixes up two different quantities.
The source reverts toward init_difficulty(w, 4), the computed D0 for an Easy grade. That value isn't w4, and at defaults it isn't even close to it.
Run the numbers: D0(Again) = 6.41, D0(Hard) = 5.11, D0(Good) = 2.12, and D0(Easy) = 6.4133 - e^(0.8334·3) + 1 = -4.77. That last one is negative, and gets clamped to the floor of 1.
So an Easy first grade always produces a difficulty of exactly 1 at defaults. Any optimizer movement in w4 or w5 is invisible on those cards until the clamp stops binding.
In FSRS-4 the same slot meant D0(Good), so a naive reading of an old parameter dump misidentifies this value.
w7 is switched off. Mean reversion is the mechanism the documentation credits with avoiding ease hell, where a card's difficulty climbs and never comes back down. Its FSRS-6 default is 0.001, exactly the lower bound of its own legal range of 0.001 to 0.75.
It was 0.031 in FSRS-4.5 and 0.0046 in FSRS-5. So it's fallen by a factor of 31 across two versions and now sits pinned at the floor. At 0.001, starting from D = 5, mean reversion alone would need about 102 reviews to move difficulty by a single point.
There's a second surprise in the same three lines of code. mean_reversion calls init_difficulty(w, 4) with no clamp applied, so the target it reverts toward is the raw -4.77. The clamped 1 never enters.
So reversion at defaults always pulls difficulty downward, on every card, whatever its current value. Calling it reversion to a mean is generous. It's a slow downward drift with the brakes on.
The anti-ease-hell pull is real in the formula and close to inert in the shipped defaults. The linear damping term, (10-D)/9, is doing that job now instead.
That reads to me like the optimizer finding mean reversion unnecessary once damping arrived. But the project hasn't written that anywhere I can find. So treat the reason as my inference and the number as fact.
The ceiling on w17 and w18 is computed on the fly, and the default can exceed it. This is the strangest thing in the clipper, and it isn't in any documentation. The upper bound is derived at clip time from three other parameters and from your relearning step count:
ceiling = sqrt( -[ln(w11) + ln(2^w13 - 1) + 0.3·w14] / steps ). The bracketed quantity is floored at 0.01 before the square root, and the result is capped at 2.0.
With one relearning step, the w17/w18 ceiling is just 2.0 and the default w17 of 0.5425 is safe. With 2 steps it drops to 0.6005, still clear. With 3 steps it drops to 0.4903, which is below the default.
So a user with three relearning steps has their w17 silently clipped from 0.5425 down to 0.4903 on every optimizer run.
Anki's own default is a single relearning step of 10 minutes, so most people never hit this. Add a step or two, which the deck options invite you to do, and you've changed a parameter you never touched.
The constraint exists to guarantee a lapsed card can't end up more stable than it started, which is sound. The interaction is undocumented.
Which FSRS version are your parameters from?
Count the numbers in your FSRS Parameters box. To reach it, open any deck, click the gear, choose Options and scroll to the FSRS section at the bottom.
Anki's own test suite encodes the three lengths, in rslib/src/import_export/gather.rs: fsrs_params_4 is 17 long, fsrs_params_5 is 19, fsrs_params_6 is 21.
- 17 numbers, FSRS-4 or 4.5. Fixed decay: 1 in v4, 0.5 in 4.5. No same-day model.
- 19 numbers, FSRS-5. Adds w17 and w18, a same-day stability update. Decay still fixed at 0.5.
- 21 numbers, FSRS-6. Adds w19, diminishing returns on same-day reviews, and w20, the fitted decay.
Parameter upgrades change the numbers. check_and_fill_parameters rewrites a 17-length set on the way in: w4 becomes w4 + 2·w5, w5 becomes ln(3·w5 + 1)/3, and w6 gains 0.5. That's because the difficulty formula changed shape between v4 and v5.
A 19-length set is extended with a zero for w19 and 0.5 for w20. A 17-length set gets three zeros plus that same 0.5.
That 0.5 matters. An upgraded set keeps the old fixed decay instead of the FSRS-6 default of 0.1542, so it behaves like the version it came from until you re-optimize.
So an old parameter set carried forward holds different numbers from the set you started with. Comparing your current w4 against a screenshot from 2024 compares two different quantities.
So that you can identify an old set without going anywhere else, here are the shipped defaults for the previous versions, from the same wiki that holds the FSRS-6 list:
FSRS-5 (19): 0.40255, 1.18385, 3.173, 15.69105, 7.1949, 0.5345, 1.4604, 0.0046, 1.54575, 0.1192, 1.01925, 1.9395, 0.11, 0.29605, 2.2698, 0.2315, 2.9898, 0.51655, 0.6621
FSRS-4.5 (17): 0.4872, 1.4003, 3.7145, 13.8206, 5.1618, 1.2298, 0.8975, 0.031, 1.6474, 0.1367, 1.0461, 2.1072, 0.0793, 0.3246, 1.587, 0.2272, 2.8755
FSRS v4 (17): 0.4, 0.6, 2.4, 5.8, 4.93, 0.94, 0.86, 0.01, 1.49, 0.14, 0.94, 2.18, 0.05, 0.34, 1.26, 0.29, 2.61
The version history in those default sets is worth a look. FSRS-4.5 started a Good card at 3.71 days, FSRS-5 at 3.17, FSRS-6 at 2.31, and an Easy card fell from 13.82 days to 8.30.
First intervals have got shorter with every release, while the decay change stretched long intervals out.
One more thing that moved. v4 initialised difficulty linearly, as D0(G) = w4 - (G-3)·w5, so w4 was the Good value. From FSRS-5 onward the term is exponential and w4 is the Again value. That's the rename that catches people reading old dumps.
You can check the arithmetic, but the reasons for the values are unpublished
The numbers check out, and the reasons behind them aren't published. I'll be straight about the gaps, since that's most of why a page like this is worth having.
The Anki manual documents zero of the 21 individually. The official Open Spaced Repetition wiki gives the formulas, but it presents each version as a diff against the last.
So reconstructing FSRS-6 in full means reading four sections and chaining "the other formulas are the same as FSRS-4.5" back through two hops.
The most-linked community explainer names 10 of the 21 in its text, has no table, and gives a clamp range for only w20. None of the three publishes the full clamp table. I put this page together because that table didn't exist.
Three things I couldn't establish. First, no one documents how the default values were arrived at, beyond that they come from fitting a large review corpus. The sample and the fitting run behind these exact 21 floats aren't public in a form I could check.
Second, no one explains the choice of clamp bounds. Is 0.75 for w7 or 0.9 for w13 a theoretical limit or an empirical guardrail? It isn't stated anywhere I looked.
And the derived w17/w18 ceiling appears only as a comment in the source, with no prose anywhere.
The honest summary: the numbers are real and the arithmetic is checkable, and the reasoning behind the specific values isn't published. Anki's advice to leave the box alone and press Optimize is still correct, and I'd follow it.
Read this table to understand why your card came back today. Then go and use the dials you were given, which the wider walkthrough of how FSRS schedules covers.
Verbamor runs FSRS with these defaults until your own review history is long enough to fit them. There's no parameter box in the app at all.
If you want to read your own w-values and argue with them, Anki is the better tool for that, and it isn't close.
What the app does instead is remove the step where you build the cards, since they come from audio you record, such as a lesson with a tutor, or from words you save in Translate. Then it puts each one back in front of you at the point the curve above says your recall has sagged to 90%.
The scheduler is the same mathematics either way. The difference is who does the setup.
Sources
The implementation, where every number here comes from
- Open Spaced Repetition. fsrs-rs, src/inference.rs.
DEFAULT_PARAMETERS, the 21 FSRS-6 floats, andFSRS6_DEFAULT_DECAY. - Open Spaced Repetition. fsrs-rs, src/parameter_clipper.rs. The 21-row clamp table and the derived w17/w18 ceiling.
- Open Spaced Repetition. fsrs-rs, src/model.rs. Every formula quoted above, plus
check_and_fill_parameters. - Open Spaced Repetition. fsrs-rs, src/simulation.rs and src/parameter_initialization.rs. The clamp constants S_MIN, D_MIN, D_MAX and INIT_S_MAX.
Anki, for version lengths and the official advice
- Anki. rslib/src/import_export/gather.rs. Asserts the 17 / 19 / 21 parameter lengths for FSRS-4, 5 and 6.
- Anki Manual. Deck options, FSRS. "An alternative to Anki's legacy SuperMemo 2 (SM-2) algorithm", and the instruction not to edit parameters by hand.
The prose documentation, and its limits
- Open Spaced Repetition. The Algorithm. Formulas and defaults for FSRS-6 back to v3, written as a diff per version.
- Expertium. The Algorithm, explained. The most-linked community explainer. Names 10 of the 21 parameters and gives a clamp range for w20 only.
Twenty-one numbers you never have to look at.
Verbamor runs FSRS on every card and fits it to your own reviews, with no parameter box to find and nothing to optimize by hand.
Start 7 days freeThe 7-day free trial is on the yearly plan.