The Spaced-Repetition Algorithm

Fresh Cards schedules cards using spaced repetition: the idea that you remember something better if you re-encounter it at gradually increasing intervals. The app uses your evaluations of each card to decide when to bring it back, and it’s the engine behind everything in the Playlist and the study session.

You don’t need to read this page to use the app. It’s here for anyone who wants to understand why a card came back today versus three weeks from now.

The core idea

Every card has a next-due date. Cards appear in the Playlist regardless of whether they’re due yet — the due date drives their sort order and how they’re labeled, not whether they show up at all. When the date arrives, the card is marked Overdue in the Playlist (a small blue indicator next to it) and naturally rises to the top of the order. Cards that aren’t yet due show a friendly interval label instead — 25m, 5d, 2mo, 2y, and so on — so you can see at a glance when each one is scheduled next.

What changes that date is how you do on the card during a study session:

The point: you spend more time on the cards you find hard, and less on the cards you’ve already nailed. Over weeks, this builds a personalized schedule that matches your memory, not a fixed cycle.

What feeds the algorithm: grading

The algorithm doesn’t actually consume right/wrong directly — it consumes a 1.0–5.0 grade for each card. Right/wrong is just the user-visible front-end; the grade behind it is more nuanced, which is why the app can distinguish “knew it instantly” from “barely got it” without making you grade by hand.

The grade itself is not shown anywhere in the app’s UI — there’s no per-card score readout. It’s a behind-the-scenes input to the schedule.

The five grade points have specific meanings:

See Studying › Grading for how grades are produced — either automatically from your right/wrong tap plus how long you took to flip the card, or by hand if you’ve enabled manual score buttons.

The FC-3 algorithm

The default algorithm in Fresh Cards 3 is called FC-3 (Fresh Cards algorithm v3.5). It’s a variant of SM-2, the algorithm originally developed for SuperMemo and used in different forms by most spaced-repetition software.

There are two phases each card moves through:

Learning phase — the first few times you see a card.

Successful review # Interval to next
1 (just seen for the first time) +6 hours
2 +16 hours
3 +1 day

Each interval has roughly 10% random “fuzz” mixed in so a batch of new cards doesn’t all bunch up on the same date later.

If you mark a card wrong during the learning phase, the count resets and the card comes back in 6 hours.

Reviewing phase — after three successful learning-phase reviews, the card moves into the reviewing phase, where intervals grow more aggressively. Each successful review multiplies the previous interval by an ease factor that depends on how well you scored. The starting ease factor is 2.5; a grade of 5.0 nudges it up by 0.1, a 4.0 leaves it about the same, and a 3.0 brings it down a bit (the minimum is 1.3, so an ease factor can never collapse to zero).

A 5% fuzz is also applied to reviewing-phase intervals.

A typical schedule

For a card you keep getting right with a grade of 4.0 (good recall, with some hesitation — the most common case), the schedule looks like this:

Successful review # Interval to next
1 +6 hours
2 +16 hours
3 +1 day
4 +3 days
5 +8 days
6 +20 days
7 +50 days
8 +125 days
9 +313 days

Consistent 5.0s stretch the schedule out further (the ease factor climbs each time): 6h, 16h, 1d, 3d, 9d, 26d, 76d, 228d, 707d. Consistent 3.0s stay flatter: the ease factor shrinks toward 1.3, and intervals grow much more slowly.

For schedules built from any combination of scores, you can experiment with the spaced-repetition simulator at https://freshcardsapp.com/srs/simulator/.

Forgetting a card you used to know

If you’ve been reviewing a card for a while — say it’s grown to a 50-day interval — and you fail it (mark wrong, or score below 3.0), the algorithm does not make you re-learn it from scratch:

  1. The card immediately gets a 6-hour relearn step. It comes back the same day.
  2. Once you pass that relearn, it jumps straight back into the reviewing phase at about a quarter of its previous interval (minimum 1 day). So a card that was on a 50-day interval would resume at roughly 12–13 days, not at 6 hours and the full learning ladder.
  3. The ease factor also drops by about 0.2 (minimum 1.3), so subsequent intervals grow a little more cautiously than before the lapse.

The reasoning: if you forgot a card, the interval was clearly too long. But you don’t have zero memory of it, so starting over from the very first learning step would be too harsh and would waste your time.

Late reviews and the late bonus

If you don’t get to a card on its due date — life happens — the algorithm doesn’t punish you. In fact, if a card is overdue when you study it and you still get it right, that’s a stronger signal than a normal on-time pass: you remembered it even after a longer gap than the schedule planned for. So you get a bonus added to your score for that review, which stretches the next interval out a little further than it would have gone otherwise. The longer the delay (relative to the original interval) and the higher your score, the bigger the bonus, up to a cap so things don’t grow wildly.

Early reviews

Fresh Cards lets you re-review a card whenever you want, even before it’s due. (Just switch the Playlist to a filter that includes it.) But if the algorithm treated those as normal reviews, the schedule would race ahead in a way that doesn’t reflect your actual memory — drilling a card three times in one afternoon doesn’t mean you’ve committed it to long-term memory; it usually just means you crammed.

So when you review a card “too early,” the algorithm doesn’t fully progress the schedule. The earlier you are relative to the due date, the more it preserves the original interval; the closer you are to the due date, the more the new review counts. The threshold for what’s “too early” scales with how long the card’s current interval is: short-interval cards have to wait at least 50% of the interval, and very-long-interval cards (beyond about 90 days) need at least a 45-day wait.

Cards that are well past the learning phase also won’t have their n count advanced by early reviews, which keeps the schedule from being gamed.

Missing a day

Cards that came due while you were away aren’t penalized by the algorithm. They just stack up, and the next time you study, they’re waiting in the Study Queue or in the All Due (Seen) filter on the Playlist. Once you start working through them, the algorithm picks up where it left off — a card that was overdue isn’t treated worse than one studied exactly on time. (And as noted above, if you get an overdue card right, you actually get a small interval bonus.)

Streaks are a separate story — see Stats & Streaks for how streak counting works.

Cram mode and the schedule

The Cram filter on the Playlist does not suspend the algorithm — right/wrong evaluations still update each card’s next-due date the same as they do in any other filter.

What Cram changes is the order of the Playlist: cards you’ve studied most recently get pushed to the bottom, so the cards you haven’t seen in a while come up first. It’s an ordering filter, not a “no-consequences” filter. If you want to come back to a next-due-date-driven order afterwards, switch back to Study Queue or All Due (Seen). See Playlist › the filter button.

Other built-in algorithms

FC-3 is the default, but it’s not the only one Fresh Cards ships with:

You can pick a different algorithm per deck in the deck’s settings.

Custom algorithms

If FC-3 and Leitner don’t suit you, you can write your own spaced-repetition algorithm in JavaScript. Fresh Cards exposes a srsFunc(previous, evaluation) function you implement, and the app calls it for every card you review. You return { n, efactor, interval } (with an optional data field for any state your algorithm needs to track), and the app uses your return value to schedule the next review.

This was a paid feature in Fresh Cards 2 and is now free for everyone (see What’s New › Free Users Get More).

For full details on the API, the inputs your function receives, and tips on writing a working algorithm, see https://www.freshcardsapp.com/srs/write-your-own-algorithm.html.