DEV Community

Cover image for FSRS for Obsidian: remember what matters
Evgene
Evgene

Posted on

FSRS for Obsidian: remember what matters

FSRS for Obsidian: remember what matters

Obsidian is called a "second brain". But to truly become one, links alone aren't enough — you need memory.

I built a spaced repetition plugin powered by the modern FSRS algorithm. It remembers what you studied and when, how hard it was, and predicts your recall probability. All data stays in your .md files — nothing is sent to any server.

plugin demo: card table with hover preview


Why another repetition plugin?

Because you shouldn't have to fiddle with cards when your notes are already right there.

SM-2 vs FSRS

SM-2 repeats everything at the same intervals. Miss a week? Progress resets. You can calculate it on a napkin.

Problems with SM-2 in practice:

  • Same intervals for easy and hard material — you review what you know and what you don't at the same rate
  • Progress reset after a break — skipped a week? Start over.
  • No forgetting prediction — the plugin won't tell you that you're about to forget

FSRS solves all of this. At the same retention level, it requires roughly 30% fewer repetitions — and with FSRS-6 used in the plugin, the real-world difference is noticeably larger.

SM-2 vs FSRS comparison

FSRS plugin vs other tools

Feature Obsidian + FSRS (this plugin) Anki + FSRS RemNote + FSRS
Data format .md, your files ⚠️ SQLite, optional cloud ⚠️ Local or cloud by choice
Card context ✅ Full note, links, graph ⚠️ Snippets of text ✅ Note = card
Card creation ✅ Note = card ❌ Copy-paste, form ⚠️ Quick from rem
Algorithm ✅ FSRS ✅ FSRS ✅ FSRS
Privacy ✅ Fully offline ⚠️ Local, optional account ✅ Offline mode
Sync ✅ Not needed — sync your vault ✅ Free via AnkiWeb (optional) ❌ Pro subscription only
Open source ✅ Fully open ✅ Fully open ❌ Closed
Visuals & extras ✅ heatmap ✅ add-ons available ✅ built-in
Analytics ✅ SQL-like queries, filtered views ✅ Free, add-ons ⚠️ Basic free, advanced paid

How FSRS understands your memory

FSRS calculates three parameters for each card based on review history (date and rating):

Parameter Meaning How it changes
Difficulty (D) How hard the material is Stays nearly constant — a hard topic stays hard
Stability (S) How firmly the memory is held, in days Grows with each successful review
Retrievability (R) Probability of recall right now Falls every second after review

After each answer (Again / Hard / Good / Easy) the algorithm recalculates difficulty and stability. Retrievability decays on its own — when it drops below the threshold, the card appears in the review list.

The threshold is configurable: want 90% retention? You'll review more often. 80% is enough? Fewer reviews.

DSR model diagram


How it looks in Obsidian

Nothing but Obsidian is required. Install the plugin and go.

1. Add FSRS fields to a note

Open the note you want to turn into a card. Call up the command palette (Ctrl/Cmd+P) and run:

FSRS: + Add FSRS fields to frontmatter

A reviews array will appear in the frontmatter — this is where the plugin stores review history. A review button is added right after the frontmatter:

adding FSRS fields via command palette

---
reviews: []
---

```fsrs-review-button
```
Enter fullscreen mode Exit fullscreen mode

In reading view, the code block becomes a button. Click it to see four rating options: Again, Hard, Good, Easy. No need to switch to edit mode.

You don't have to insert the button manually — the plugin adds it automatically when initializing a card. If you disable auto-add in settings, you can insert it via FSRS: □ Insert review button block.

The plugin records dates and ratings into the reviews field. After a couple of reviews, the frontmatter will look something like:

---
reviews:
  - date: "2025-03-15T12:00:00Z"
    rating: 2
  - date: "2025-03-17T08:00:00Z"
    rating: 3
---
Enter fullscreen mode Exit fullscreen mode

The rating value: 0 = Again, 1 = Hard, 2 = Good, 3 = Easy.

2. Create a review table

In a separate note (e.g. your daily note), open the command palette and run:

FSRS: ⬒ Insert default fsrs-table

No SQL knowledge needed — the command inserts a ready-to-use block. It looks like this:

```fsrs-table
SELECT file as " ", difficulty as "D",
       stability as "S", retrievability as "R",
       date_format(due, '%Y-%m-%d') as "Next"
LIMIT 20
```
Enter fullscreen mode Exit fullscreen mode

In reading view, the block becomes a table with all your cards, sorted by urgency — most forgotten first.

rendered fsrs-table with cards

3. Review without leaving the table

This is the main workflow. Hover over a filename in the table — a popup appears with the note content and the review buttons inside it. Rate the card and move on to the next.

The entire review cycle stays in one window:

  1. Open the note with the table
  2. See which cards are due
  3. Hover over a card — read the content
  4. Click a rating — the card updates
  5. Move to the next row

Later you can customize the query. Here are some practical examples:

Query What it does Why
WHERE retrievability < 0.6 Cards about to be forgotten Review before it's too late
WHERE state = "New" Cards with no reviews yet See what you added today
WHERE file = "Topic" A specific note (by filename without path or extension) Check one card's status
ORDER BY reps DESC Most-reviewed cards See what you've practiced most

All available fields and conditions are in the user guide.


5. Review heatmap

To see your progress over the year — how many reviews per day — insert the block via FSRS: Insert heatmap fsrs-heatmap (Ctrl/Cmd+P) or create it manually:

```fsrs-heatmap
```
Enter fullscreen mode Exit fullscreen mode

In reading view, a day-grid appears showing your activity.

heatmap with tooltip


Installation

The plugin is available in the Obsidian community catalog.

  1. Open Settings → Community plugins → Browse
  2. Search for FSRS
  3. Click Install
  4. Enable the plugin in Settings → Community plugins

What else

Evgene Kopylov, 2026

Top comments (0)