# How to incorporate space repetition into Org-Roam workflow?

**URL:** <https://org-roam.discourse.group/t/how-to-incorporate-space-repetition-into-org-roam-workflow/2819>\
**Category:** Tips\
**Created:** [October 12, 2022, 11:17am UTC](https://org-roam.discourse.group/t/how-to-incorporate-space-repetition-into-org-roam-workflow/2819 "2022-10-12T11:17:28Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![\_khaled\_mustafa](https://yyz2.discourse-cdn.com/free1/user_avatar/org-roam.discourse.group/_khaled_mustafa/32/1198_2.png) [@\_khaled\_mustafa](https://org-roam.discourse.group/u/_khaled_mustafa)\
**Post date:** [October 12, 2022, 11:17am UTC](https://org-roam.discourse.group/t/how-to-incorporate-space-repetition-into-org-roam-workflow/2819/1 "2022-10-12T11:17:28Z")

</div>

I want to be able to actively recall my notes and review them on a regular basis, and I haven’t figured out how to implement them in my notes.

I read [Doubleloop’s blog post](https://doubleloop.net/2020/08/02/adding-flashcards-to-your-digital-garden-with-org-roam-and-anki/) on his workflow, but as he stated in the improvement section,

> I feel like I’m maintaining the flashcards separately from the body of my notes – it’s a bit of a duplication of effort. It’d be good to get a flow where the flashcard is just part of the note as is, and I can pull it out without duplicating it.

I tried to manipulate it a bit, and my current workflow is incorporating it directly into my notes.  
Take this note, for example, about Edge Devices,

```auto
* Definition
:PROPERTIES:
:ANKI_DECK: Computer Networking
:ANKI_NOTE_TYPE: Basic
:ANKI_NOTE_ID: 1665541877624
:END:
** Front
What are Edge Devices?
** Back
- They are known as End-sytems or Hosts.
  These devices are divided into two groups: Clients and Servers.
- These are the devices that recieves the internet as a service.

*And, then here I continue with some more examples on the topic.*

```

And then I export it to Anki for reviewing.

My question here is this a good workflow in the long run, as all my notes would take this shape?

---

<div class="post-metadata">

**Author:** ![thecashewtrader](https://avatars.discourse-cdn.com/v4/letter/t/71c47a/32.png) [@thecashewtrader](https://org-roam.discourse.group/u/thecashewtrader)\
**Post date:** [October 16, 2022, 6:39am UTC](https://org-roam.discourse.group/t/how-to-incorporate-space-repetition-into-org-roam-workflow/2819/2 "2022-10-16T06:39:00Z")

</div>

You could try [org-fc](https://github.com/l3kn/org-fc). I haven’t used it in a while though, so I’m not sure of the details.

---

<div class="post-metadata">

**Author:** ![Cletip](https://avatars.discourse-cdn.com/v4/letter/c/7c8e57/32.png) [@Cletip](https://org-roam.discourse.group/u/Cletip)\
**Post date:** [October 16, 2022, 8:49am UTC](https://org-roam.discourse.group/t/how-to-incorporate-space-repetition-into-org-roam-workflow/2819/3 "2022-10-16T08:49:55Z")

</div>

Maybe this can help too (org-roam-review) :

> **[GitHub - chrisbarrett/nursery: Programs and libs that I haven't gotten around...](https://github.com/chrisbarrett/nursery)**
>
> Programs and libs that I haven't gotten around to formally packaging - GitHub - chrisbarrett/nursery: Programs and libs that I haven't gotten around to formally packaging

(However, I have not yet tested it. )

This can also be interesting  
[org-drill.el – flashcards and spaced repetition for org-mode](https://orgmode.org/worg/org-contrib/org-drill.html).

Finally, I was also considering creating my own system (of flashcards in particular. I don’t know if flashcards are “good enough”, maybe I should implement a larger space repetition system that could make flashcards work).  
If you’re ever interested, I can give details of the theory, but I haven’t had time to do anything yet (I prefer to look at the above solutions in detail first)

I will keep up to date with this topic, as implementing a space repetition system in org roam is almost a must: making your second brain is useless if you forget it 😉

Don’t hesitate to give your opinion on the various solutions proposed

Ps: Maybe you’ve already seen it, but this post may help too

> [@Any Use of Spaced Repetition/Incremental Reading?](https://org-roam.discourse.group/t/any-use-of-spaced-repetition-incremental-reading/652):
>
> Hello everyone, first-time poster here who just discovered Org-Roam this week. I was poking around for a way to cobble together a bunch of Learning/Knowledge Management ideas using Emacs, and I happened to stumble on Org-Roam, which seems like exactly what I didn’t even know I wanted. I’m still getting set up and comfortable with it, but I have a question about a possible extension: Has anyone incorporated any kind of spaced repetition to their workflow with Org-Roam? I saw Org-FC mentioned in…

---

<div class="post-metadata">

**Author:** ![JeffBrown](https://yyz2.discourse-cdn.com/free1/user_avatar/org-roam.discourse.group/jeffbrown/32/254_2.png) [@JeffBrown](https://org-roam.discourse.group/u/JeffBrown)\
**Post date:** [December 26, 2022, 3:03pm UTC](https://org-roam.discourse.group/t/how-to-incorporate-space-repetition-into-org-roam-workflow/2819/4 "2022-12-26T15:03:13Z")

</div>

I use spaced repetition in org-roam by hand. I do something like this:

```auto
* the last time I reviewed: 20
* review when time is equal to 1 mod 2 (i.e. odd)
** [[id:6422ff08-...][cholesterol reduction strategies]]
** What [[id:1b920360-...][mistake to avoid when restoring the old part of a diff]]?
...
* review when time is equal to 2 mod 4
...
* review when time is equal to 4 mod 8
...

```

When I start a new review session, I’ll mark the first line BLOCKED (press S-right twice), increment the value at the end of that line, and go to the appropriate collection to review based on the new value. As I go through things I’ll mark them DONE if I got them right the first time, BLOCKED if I didn’t. I then move all the DONE things to the next (half as frequent) collection, and review the BLOCKED things again. If I still get one of those wrong I’ll move it back to a more-frequent collection; otherwise I’ll just leave it where it is.

---

<div class="post-metadata">

**Author:** ![lr0](https://yyz2.discourse-cdn.com/free1/user_avatar/org-roam.discourse.group/lr0/32/1464_2.png) [@lr0](https://org-roam.discourse.group/u/lr0)\
**Post date:** [April 27, 2024, 4:38am UTC](https://org-roam.discourse.group/t/how-to-incorporate-space-repetition-into-org-roam-workflow/2819/5 "2024-04-27T04:38:18Z")

</div>

In my case I just used org-drill instead of implementing something from scratch. To make org-drill work fine with my setup with org-roam I used the following:

```auto
(setq org-drill-scope (let ((nodes
                               (salih/get-org-roam-nodes-with-tag "drill")))
                          (delete-dups (mapcar 'car nodes))))

```

```auto
(defun salih/get-org-roam-nodes-with-tag (tag)
  "Get all Org Roam nodes that have the specified TAG."
  (org-roam-db-query
   [:select :distinct [nodes:file nodes:title]
            :from tags
            :left :join nodes
            :on (= tags:node-id nodes:id)
            :where (like tags:tag $s1)]
   tag))

```

---

<div class="post-metadata">

**Author:** ![akashp](https://yyz2.discourse-cdn.com/free1/user_avatar/org-roam.discourse.group/akashp/32/1383_2.png) [@akashp](https://org-roam.discourse.group/u/akashp)\
**Post date:** [April 27, 2024, 10:50pm UTC](https://org-roam.discourse.group/t/how-to-incorporate-space-repetition-into-org-roam-workflow/2819/6 "2024-04-27T22:50:29Z")

</div>

Thanks for the recc, I needed this but had no idea it existed. For my case – I wont connect it with org-roam –

–it should be a great little standalone workflow in default non idd notes setting–

Edit : it creates id willy nilly for all items, quite annoying.

---

<div class="post-metadata">

**Author:** ![akashp](https://yyz2.discourse-cdn.com/free1/user_avatar/org-roam.discourse.group/akashp/32/1383_2.png) [@akashp](https://org-roam.discourse.group/u/akashp)\
**Post date:** [April 28, 2024, 12:28pm UTC](https://org-roam.discourse.group/t/how-to-incorporate-space-repetition-into-org-roam-workflow/2819/7 "2024-04-28T12:28:47Z")

</div>

I will probably have to craft my own system since org drill thinks its appropriate to create an id over every bit of information creating garbage everywhere.

Well, it is how it is, need to invent the wheel for my usecase.

---

<div class="post-metadata">

**Author:** ![zaijab2000](https://avatars.discourse-cdn.com/v4/letter/z/ecae2f/32.png) [@zaijab2000](https://org-roam.discourse.group/u/zaijab2000)\
**Post date:** [May 15, 2024, 7:39am UTC](https://org-roam.discourse.group/t/how-to-incorporate-space-repetition-into-org-roam-workflow/2819/8 "2024-05-15T07:39:30Z")

</div>

I agree, I would like to see a way in which the file itself could be used as a flash card.

Here is the solution I am currently using. To get rid of the flashcards while searching for Org Roam Nodes you can do:

```auto
(setq org-roam-db-node-include-function
	 (lambda ()
	   (not (member "FC" (org-get-tags)))))

```

Where FC is the flashcard tag. Another method, shown in this thread, is to create a custom query which hides nodes with tags which you call instead of the standard `org-roam-node-find` function.

---

<div class="post-metadata">

**Author:** ![akashp](https://yyz2.discourse-cdn.com/free1/user_avatar/org-roam.discourse.group/akashp/32/1383_2.png) [@akashp](https://org-roam.discourse.group/u/akashp)\
**Post date:** [May 15, 2024, 1:25pm UTC](https://org-roam.discourse.group/t/how-to-incorporate-space-repetition-into-org-roam-workflow/2819/9 "2024-05-15T13:25:59Z")

</div>

Greetings Zain,

I think there are two components to a spaced repetition system - firstly the subsystem responsible for allowing us to traverse through entries and the second subsystem is what makes it a spaced repetition system - a way of ranking entries based on how much we have been able to transform knowledge about something from simple association to the realm of intuition itself.

If all entries are ranked the same - then we are simply wasting time telling us what we already know very well as time progresses and we dutifully use such a system,

My problem with using an ID system to traverse is simply that IDs should not be exploited - they should be used scarcely because there is a computation cost as the system scales up.

So I advice taking a reverse approach for a good spaced repetition system - to take one established tool and hack it so that its traverse mechanism could be improved.

---

<div class="post-metadata">

**Author:** ![akashp](https://yyz2.discourse-cdn.com/free1/user_avatar/org-roam.discourse.group/akashp/32/1383_2.png) [@akashp](https://org-roam.discourse.group/u/akashp)\
**Post date:** [June 15, 2024, 4:31am UTC](https://org-roam.discourse.group/t/how-to-incorporate-space-repetition-into-org-roam-workflow/2819/10 "2024-06-15T04:31:47Z")

</div>

Just want to update on the state of org-drill. It has been abandoned.  
There’s a new tool

> **[Gnosis (γνῶσις) | Spaced Repetition System for GNU Emacs](https://thanosapollo.org/projects/gnosis/)**
>
> Spaced Repetition System for GNU Emacs.

Unknown if it will be abandoned in the near future too,  
org-fc is still being maintained.

I have resolved to directly use anki -  
org-nodes can be easily exported using [GitHub - anki-editor/anki-editor: Emacs minor mode for making Anki cards with Org Mode](https://github.com/anki-editor/anki-editor)

Best not to rely on any SRS system in org directly, anki will have persistent improvements being it a proper tool.
