Open-source project
open-spaced-repetition/fsrs4anki avatar
open-spaced-repetition/fsrs4anki

FSRS4Anki: replacing Anki's scheduler with a fitted memory model

A modern Anki custom scheduling based on Free Spaced Repetition Scheduler algorithm

4,083 stars164 forksJupyter NotebookMIT

At a glance

What is it?
FSRS4Anki is the reference implementation of the Free Spaced Repetition Scheduler for Anki, split into a scheduler script and a machine-learning optimizer. It is worth adopting only if you accept that an add-on touching intervals can no longer be trusted.
Who is it for?
Adopt FSRS4Anki if you review in Anki regularly enough that your history can be fitted, and if you are willing to drop or replace every add-on that rewrites intervals. Do not adopt it for incremental reading cards, for shared decks you do not control, or if you rely on Delay siblings, Auto Ease Factor, autoLapseNewInterval or Straight Reward, all of which the README marks as incompatible.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 49 days ago.
What is it written in?
Mainly Jupyter Notebook, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The problem FSRS4Anki addresses

Anki's default scheduler is hand-tuned. It uses an ease factor per card that drifts up or down with each answer, plus fixed learning steps, and those numbers are the same for every user regardless of how their memory actually behaves. FSRS4Anki replaces that with a model fitted to the individual. The README describes two parts: a scheduler that "schedules the cards according to the FSRS algorithm", and an optimizer that "uses machine learning to learn your memory patterns and finds parameters that best fit your review history". The audience is Anki users with enough review history for a fit to be meaningful, and users who want their intervals derived from their own data rather than from a global default. The README also points at the research lineage, citing Maimemo work on a stochastic shortest path formulation and on capturing memory dynamics, which tells you the design is data-driven and meant to stay interpretable and verifiable rather than being a black box.

Scheduler and optimizer as separate moving parts

The repository layout makes the split concrete. fsrs4anki_scheduler.js and fsrs4anki_scheduler_qt5.js are the scheduler side, with the second file covering the older Qt5 Anki builds. fsrs4anki_optimizer.ipynb and fsrs4anki_simulator.ipynb are Jupyter Notebooks: the optimizer produces the parameters, the simulator lets you inspect schedules before committing to them. The data flow is therefore one-directional and manual. You review cards, the optimizer reads that review history, it emits a parameter set, and the scheduler applies that parameter set when it decides the next interval. Nothing in the README suggests the optimizer runs automatically in the background; it is a notebook you run. That separation is the main architectural fact to internalize, because it means your scheduling quality depends on how recently you refitted, not only on which add-on is installed. It also explains why the project is tagged with deep-learning and reinforcement-learning topics despite shipping a JavaScript scheduler: the learning happens offline, in Python.

Installing FSRS4Anki and getting a first result

The README does not give a single install path, because it depends on your Anki version. If you are on Anki 23.10 or newer, the instruction is to refer to the deck options section of the Anki manual, and the README notes that "setting up FSRS is much easier in Anki 23.10 or newer". For anything older, it points to docs/tutorial2.md. No shell command appears in the README, so there is nothing to paste there: the concrete step is opening the files the project names. Open docs/tutorial2.md for the older-Anki route, or follow the Anki manual link for 23.10 and newer. For the optimizer, the artifact to open is the notebook at fsrs4anki_optimizer.ipynb, which expects your review history, the data the optimizer fits parameters against. The README does not document the expected export format, so read the notebook cells before assuming a file path. Before you apply any parameters, open fsrs4anki_simulator.ipynb to inspect what they imply. What you should see after a successful fit is a set of parameters that the scheduler can consume. If the notebook cannot read your history, you get nothing usable, and no amount of add-on configuration will fix that.

Add-on compatibility is the real constraint

This is where FSRS4Anki stops being a drop-in. The README states the rule plainly: "if an add-on affects a card's intervals, it shouldn't be used with FSRS." The compatibility table then names specific casualties. Delay siblings is marked incompatible with the note that it "will modify the intervals given by FSRS", and the suggested replacement is the FSRS Helper add-on. Auto Ease Factor, autoLapseNewInterval and Straight Reward are all marked No, each because the setting it manipulates (ease factor, new interval) is no longer relevant once FSRS is enabled. That last group is worth pausing on: those add-ons are not broken by FSRS, they are simply inert, and running them costs you nothing but also gains you nothing. Incremental Reading is marked Unsure for a more interesting reason. The README says FSRS was not designed for incremental reading and that FSRS settings do not apply to IR cards "because they work in a different way compared to other card types". If your workflow is built around incremental reading, FSRS is the wrong tool, not a partially working one. On the compatible side, Review Heatmap, Advanced Browser, Advanced Review Bottom Bar, The KING of Button Add-ons, Pass/Fail and AJT Card Management are listed as fine, with the last requiring Anki 23.12 or newer and Pass/Fail mapping Pass to Good and Fail to Again.

Where the documentation leaves you on your own

The README is a signpost, not a manual. It defers setup to the Anki manual and to docs/tutorial2.md, and the optimizer's expected input is not described in the text available here. That is a real cost: the scheduler is easy to switch on, but the part that makes FSRS4Anki different from a fixed parameter set is the optimizer, and the optimizer is a notebook you have to understand well enough to feed. The README does not document rollback. If you enable FSRS, fit parameters, and dislike the resulting intervals, there is no stated procedure for returning to the previous scheduling state, so treat the decision as one to make with a backup of your collection. There is also a version split to watch: the standalone scheduler scripts exist for older Anki, and the README's own compatibility note about Incremental Reading mentions that the standalone version shows the interval given by Anki's built-in scheduler rather than the custom one. Two code paths with different observable behaviour is a maintenance surface, and the last push to the repository was on 2026-08-14, with the most recent release listed as v6.1.3 from 2025-09-08.

FSRS4Anki against plain Anki scheduling

The honest alternative is Anki's built-in scheduler with its ease factor and learning steps, which is what FSRS4Anki replaces. The difference in approach is not cosmetic. Built-in scheduling adjusts a per-card ease in response to your answers and applies global learning steps; it has no notion of your personal forgetting curve. FSRS4Anki fits parameters to your review history first and then schedules from that fitted model, which is why the optimizer exists at all. The trade is complexity for fit. Built-in scheduling works on day one with no data and no notebook. FSRS4Anki wants history, wants you to run Python, and wants you to stop using add-ons that rewrite intervals. If your collection is new, or you review irregularly, the fitted model has little to fit, and the built-in scheduler is the more sensible default. If you have months of consistent reviews and you care about interval accuracy, the fitted model is the point.

Licence and upgrade cost

FSRS4Anki is MIT licensed, which is permissive: you can use, modify and redistribute it, including in closed products, provided the licence and copyright notice are preserved. That matters if you want to lift the scheduler script into your own tooling. It does not give legal advice, and the LICENSE file is the authoritative text. On upgrade cost, the release list shows v6.1.1, v6.1.2 and v6.1.3 spaced roughly one to two months apart, so parameter formats and notebook expectations can move. The practical burden is not the add-on update; it is refitting. Each time your review behaviour changes, the parameters that were optimal earlier are stale, and the only way to refresh them is to rerun the optimizer notebook and reapply the output. Budget for that as a recurring task, not a one-time setup.

Editorial conclusion

Adopt FSRS4Anki if you review in Anki regularly enough that your history can be fitted, and if you are willing to drop or replace every add-on that rewrites intervals. Do not adopt it for incremental reading cards, for shared decks you do not control, or if you rely on Delay siblings, Auto Ease Factor, autoLapseNewInterval or Straight Reward, all of which the README marks as incompatible. Verify two things first: whether your Anki version is 23.10 or newer, because the manual route applies there, and whether the optimizer notebook can read your collection, since the optimizer is a separate Jupyter Notebook rather than part of the add-on.

Frequently asked questions

How do I enable FSRS in Anki?

If you are on Anki 23.10 or newer, the README directs you to the deck options section of the Anki manual, and notes that setup is much easier there. On older versions, follow docs/tutorial2.md in the repository.

What is the FSRS algorithm and how does it work?

FSRS stands for Free Spaced Repetition Scheduler. In FSRS4Anki it is split into a scheduler that assigns card intervals and an optimizer that uses machine learning to find parameters fitting your review history; the README links to a wiki page on the algorithm for the details.

Should I use FSRS on Anki?

It suits users with enough review history for the optimizer to fit, and it requires giving up add-ons that modify intervals, such as Delay siblings. It is not designed for incremental reading cards, where the README says FSRS settings do not apply.

When FSRS is enabled, steps of 1 day or more are not recommended?

The README does not state a recommendation about learning steps of one day or more, so this cannot be answered from it. Check the Anki manual section the README links to for deck options.

Official sources

  1. License: MIT
  2. open-spaced-repetition/fsrs4anki on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/open-spaced-repetition-fsrs4anki.svg)](https://hysenlabs.com/projects/open-spaced-repetition-fsrs4anki)