femto-fsrs
Version:
A minimalistic implementation of FSRS 5 spaced repetition algorithm
64 lines (44 loc) • 1.8 kB
Markdown
A zero dependency implementation of the [FSRS 5](https://github.com/open-spaced-repetition) spaced repetition algorithm.
This is the scheduler used by [Koala.Cards](https://github.com/RickCarlino/KoalaSRS).
I made an HTML pen-and-paper demo [here](https://rickcarlino.com/srs.html). You can store facts on paper and use Femto-FSRS for scheduling, [just like Piotr Wozniak did in the 80s](https://www.supermemo.com/en/blog/the-true-history-of-spaced-repetition).
- Zero dependencies
- Follows the paper.
- Sensible defaults.
```typescript
import { Grade, createDeck } from "femto-fsrs";
// === Create a new deck
const { newCard, gradeCard } = createDeck();
// === Initiate a new card with an initial grade of "GOOD":
const initialGrade = Grade.GOOD;
const myCard = newCard(initialGrade);
// === Grade the card as "easy" two days later.
// Returns a new card that replaces the old one.
const daysSinceReview = 2;
const nextCard = gradeCard(myCard, daysSinceReview, Grade.EASY);
// The "I" attribute represents "I" like in the FSRS paper.
// It is the next review date at which the probability
// of success is 90% (assuming you used default parameters).
const nextReview = nextCard.I.toFixed(2);
// Print results:
console.log(`Card will be due for review in ${nextReview} day(s)`);
```
Result:
```
Card will be due for review in 16.63 day(s)
```
```
npm install femto-fsrs
```
This is supposed to be a minimalistic library that can be used as a starting point
for FSRS-enhanced apps. If you need a more full-featured offering with features
like logs (so you can optimize your `w` param) or revert, etc.., check out [ts-fsrs](https://github.com/open-spaced-repetition/ts-fsrs).
# Tests
```
npm run test
```