Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@L-M-Sherlock
Copy link
Contributor

@L-M-Sherlock L-M-Sherlock commented Oct 14, 2025

Make FSRS (Free Spaced Repetition Scheduler) enabled by default for new users and users who haven't explicitly configured it.

Changes:

  • Add BoolKey::Fsrs to default-true boolean keys in Rust backend
  • Set defaultValue to true for FSRS toggle in deck options UI

close #3616

For AO, please create a new issue to keep track of it.

Make FSRS (Free Spaced Repetition Scheduler) enabled by default for new users and users who haven't explicitly configured it.

Changes:
- Add BoolKey::Fsrs to default-true boolean keys in Rust backend
- Set defaultValue to true for FSRS toggle in deck options UI
@JSchoreels
Copy link
Contributor

Should we include some kind of banner the first time that option will be by default used ? Just in case some people where on SM2 by default but who'd still want to switch back to SM2 if they really want it

Update deckconfig::update::test::updating to use actual config values from get_deck_configs_for_update() instead of hardcoded values. This ensures the test works correctly now that FSRS is enabled by default.
@jakeprobst
Copy link
Contributor

its worth noting that with this change you will be enabling fsrs for everyone that has not explicitly turned fsrs on then back off.

if fsrs_toggled {
self.set_config_bool_inner(BoolKey::Fsrs, req.fsrs)?;
}
There is logic that keeps the variable unsaved in the configuration unless it has changed. And since its unsaved the default-to-true gets triggered even if it is a preexisting deck.
I can see an argument that this might be a desireable interaction but I think this case should be known and discussed.

(I played around with this a few weeks back as I was gonna make this exact PR next april fools day. I thought things would move slowly enough that it would still be a relevant PR to make then)

- Add FSRS boolean config key to protobuf definition
- Update generated Rust config mapping code
- Disable FSRS in test_schedv3.py tests to maintain legacy scheduler behavior
- These tests are designed for the old SM-2 algorithm, not FSRS
@L-M-Sherlock
Copy link
Contributor Author

Should we include some kind of banner the first time that option will be by default used ? Just in case some people where on SM2 by default but who'd still want to switch back to SM2 if they really want it

I'm not good at UI/UX, so PR is welcome.

I can see an argument that this might be a desireable interaction but I think this case should be known and discussed.

Sure.

This test validates legacy SM-2 scheduler behavior and expects specific card states without FSRS memory states. Disable FSRS to maintain test compatibility.
Disable FSRS in review_queue_building and undo tests as they expect legacy SM-2 scheduler behavior for queue ordering and interval calculations.
Add Config import and disable FSRS in getEmptyCol() helper function.
This ensures all tests using this helper function have FSRS disabled
by default, maintaining compatibility with legacy scheduler tests.
@ghost
Copy link

ghost commented Oct 14, 2025

FSRS has clear advantages over SM-2, and because of the "Default Effect" most people won't be likely to change the default unless something has gone wrong.

@iamllama
Copy link
Contributor

We could perhaps enable it for new collections only by adding a default here:

"sched2021": true,
});

@L-M-Sherlock
Copy link
Contributor Author

L-M-Sherlock commented Oct 15, 2025

We could perhaps enable it for new collections only by adding a default here:

I have tested the PR's code. It has enabled FSRS by default for new collections.

Edit: oh, I know what happened. For a new collection, the config doesn't have the fsrs field. The PR will return true for fsrs by default in this case.

@user1823
Copy link
Contributor

user1823 commented Oct 15, 2025

This seems to be a good opportunity to make some changes similar to #3860 so that we don't need to read the config on every card answer.

let fsrs_enabled = self.get_config_bool(BoolKey::Fsrs);

Please feel free to ask me to create a separate issue for this.

@L-M-Sherlock
Copy link
Contributor Author

Please feel free to ask me to create a separate issue for this.

Sure, please do that, thank you!

@tatsumoto-ren
Copy link
Contributor

@L-M-Sherlock if you want more users to test FSRS, consider shipping Anki with no default scheduler. When a new collection (new Anki profile) is created, force the user to choose one or the other.

Also, a look through the Anki Forums shows many users confused or having problems with FSRS, which indicates it isn't ready yet.

@L-M-Sherlock
Copy link
Contributor Author

if you want more users to test FSRS, consider shipping Anki with no default scheduler. When a new collection (new Anki profile) is created, force the user to choose one or the other.

To be honest, @maimemo has been doing something similar. We shipped different schedulers all the time for A/B tests.

Also, a look through the Anki Forums shows many users confused or having problems with FSRS, which indicates it isn't ready yet.

If there are a lot of users confused or having problems, FSRS will get fixed soon. Just like SM-2 as the default, the community has invented tons of methods to fix it.

@tatsumoto-ren
Copy link
Contributor

tatsumoto-ren commented Oct 18, 2025

A less intrusive option is to have a popup on a new collection asking the user which scheduler they want to choose.

501581178-dba09644-7f23-4e2a-84e3-6b002fe35fad

Example how to make a message like this: https://github.com/ankitects/anki/blob/f94d05bcbe17c8d1eacad3178c77f58c9fb3c3bd/qt/aqt/deckbrowser.py#L407C1-L429C4

@GithubAnon0000
Copy link
Contributor

GithubAnon0000 commented Oct 18, 2025

A less intrusive option is to have a popup on a new collection asking the user which scheduler they want to chose.

In that case the message would need to be neutral, without bias. Your message is biased. And inaccurate for that matter. You do not have to optimize FSRS at all, as I already covered in the linked issue. It will improve retention though, if you do. Which is a huge plus compared to a non-dynamic, never adjusting algorithm like SM-2.

Also: The common user has no idea which algorithm is better for them; and probably will not read even a short explaination section. So I reccon it's better to just have a default (which might be FSRS if there are no real disadvatages and if its superior results reported by users are convincing dae) and allow users to change it in the preset options

@tatsumoto-ren
Copy link
Contributor

tatsumoto-ren commented Oct 18, 2025

In that case the message would need to be neutral, without bias

Yeah, I think it can be adjusted. The important part is to warn users that FSRS is experimental and that there's no solid data on how it affects retention given the same number of daily reviews. Some users report higher retention, others lower. Including a link to an article that explains the differences would also be helpful.

@nezmaka
Copy link

nezmaka commented Nov 14, 2025

Yeah, I think it can be adjusted. The important part is to warn users that FSRS is experimental and that there's no solid data on how it affects retention given the same number of daily reviews. Some users report higher retention, others lower. Including a link to an article that explains the differences would also be helpful.

Iirc, FSRS is based on an algorithm that has had several papers published about it, showing improved retention. Users' so called anecdotal reports about their own retentions are not exactly reliable.

For what it's worth, I find that even without the rather misleading note, the mere calling of the one ‘Anki Scheduler’ and the other ‘FSRS’ biases towards the former. Had I not known anything and just installed Anki for the first time, without the time to look into the different schedulers, I'd have chosen Anki Scheduler while I wish I'd have chosen FSRS.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Make FSRS the default?

8 participants